Microservices vs Serverless:どのアーキテクチャを選ぶか?
モダンなアプリケーションがどう構成され実行されるかを設計するとき、二つのアプローチが何度も現れます。システムを独立したサービスに分割する microservices と、サーバーを管理せず関数を実行する serverless です。しばしば混同されたり対立させられたりしますが、これらは異なる問いに答えています。microservices はシステムを組織する方法であり、serverless はそれを実行する方法です。違いを理解すれば、より良いアーキテクチャの判断を下し、不要な複雑さを避けられます。
この記事では microservices と serverless を比較し、それぞれの利点と欠点を示し、どちらがどんなときに適しているか、または両方を組み合わせるべきかを説明します。
microservices とは
microservices のアーキテクチャは、アプリケーションを多数の小さく独立したサービスに分割し、それぞれが自分の責務を持ち、別々にデプロイできるようにします。その利点は独立性と選択的なスケーラビリティです。各チームが自分のサービスに取り組み、必要なものだけをスケールさせ、ひとつの障害が全体を倒すことはありません。その代わり、相当な複雑さを持ち込みます。サービス間の通信、協調したデプロイ、そして厳しい運用です。これは、どこで実行されるかとは無関係に、システムを組織する方法です。
serverless とは
serverless は実行モデルで、関数を書けばプロバイダーがプロビジョニング、スケーリング、インフラの維持を引き受け、実際の実行分だけを請求します。その利点は運用の単純さと、変動する負荷に対するコストです。サーバー管理ゼロ、ゼロまでの自動スケーリング、従量課金です。その代わり、制御は少なくなり、プロバイダーへの依存が強まり、非常に一定した負荷では高くつくことがあります。これはコードを実行する方法であって、組織する方法ではありません。
組織と実行
混同しないための鍵は、これらが異なるものを比較していると理解することです。microservices は「アプリケーションをどう分割するか」に答え、serverless は「コードをどこでどう実行するか」に答えます。実際、両者は排他的ではありません。serverless 上で実行される microservices、コンテナ上の microservices、あるいは microservices なしの単純な serverless アプリケーションを持つこともできます。正しい問いはどちらか一方ではなく、「自分のシステムにはどんな構造が必要で、各部分にはどんな実行モデルが適しているか」です。
主な違い
まとめると、両概念の違いが最も顕著に表れる要素は次のとおりです。
- 性質:microservices は組織し、serverless は実行する。
- 制御:microservices で大きい(とりわけコンテナで)。
- 運用:serverless はインフラ管理をほとんど必要としない。
- コスト:変動負荷では serverless が有利、一定なら他のモデルが向く。
- 複雑さ:microservices で高く、serverless は始めるときは低い。
- 組み合わせ可能:問題なく一緒に使える。
早すぎる複雑化という誤り
この二つの概念での最も高くつく誤りは、モダンだという評判に惹かれて、必要になる前に採用してしまうことです。小さなアプリケーションを初日から多数の microservices に分割すると、複雑さ(通信、デプロイ、監視)が倍増し、しかもその利点はある程度の規模でしか現れません。同様に、すべてを serverless に押し込むと、重く一定した負荷でその限界にぶつかることがあります。業界で繰り返されてきた経験は明確です。単純に始め、計測し、現実の痛みが正当化するときにだけ分割やモデルの変更をするほうが、最初から過剰設計するよりずっと費用対効果が高いのです。必要だと思うものより単純なアーキテクチャが、たいてい正しい決定です。なぜなら、具体的な問題が現れたときに、いつでも進化させられるからです。
選び方
立ち上げ段階のほとんどのプロジェクトにとって最も賢明なのは、単純に始めることです。よく組織されたアプリケーションを、多くの場合 serverless かマネージドコンテナで、必要になる前に microservices に飛びつかずに。システムが本当に成長したときに microservices を採用しましょう。多数のチーム、スケーリングのニーズが大きく異なる部分、別々にデプロイすべきコンポーネントがあるときです。そして serverless は変動的または event-driven な負荷に使い、一定したものにはコンテナと組み合わせましょう。流行のラベルではなく、現実の問題に基づいて設計してください。
AxiomTech では、それぞれのケースに適したアーキテクチャを、microservices、serverless、コンテナを実際のニーズに応じて組み合わせ、不要な複雑さなく設計します。アプリケーションをどう構成し実行するか迷っているなら、ぜひご相談ください。負荷とチームに応じてアドバイスします。
blogPage.ctaTitle
構築したい内容をお聞かせください。24時間以内に明確なプランをご返信します(ご相談は無料です)。
- コードはお客様のもの — ベンダーロックインなし
- 24時間以内に返信
- シニアチーム、グローバルB2Bパートナー