マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャは、アプリケーションを個々の独立した(マイクロ)サービスに分割するアーキテクチャ手法で、各サービスは特定の機能に焦点を当てています。 これらのサービスは密接に連携して動作し、エンドユーザーには単一のエンティティとして見えます。 例として、Netflix を考えてみます。そのインターフェイスは、ビデオへのアクセス、検索、プレビューが可能です。 これらの機能は、ブラウザでの認証、検索、プレビューの実行など、それぞれ一つの機能を扱う小さなサービスによって実現されている可能性が高いです。

このアーキテクチャ手法により、モノリシックアプリケーション(以下に詳細あり)のようにすべてが密接に結合している場合よりも、開発者は新機能を迅速に導入したり機能を更新したりすることができます。

解決すべき問題はなんですか

アプリケーションは、さまざまなパーツで構成され、それぞれが特定の能力を担当します。 特定の機能に対する需要は、アプリケーションの他のパーツに対する需要と連動して必ず増減するわけではありません。 Netflix の例に戻りましょう。 例えば、大規模なマーケティングキャンペーンの後で、Netflix の契約者数が急増したが、その日の早い時間帯におけるストリーミングは概ね安定しているとします。 契約者数の急増は、平常時より多くのキャパシティを要求します。 伝統的な手法(モノリシックアプローチ)の場合では、増加に対応するためにアプリ全体をスケールアップする必要がありました。 これは非常に非効率的なリソースの使い方です。

また、モノリシックアーキテクチャは、開発者が設計の落とし穴に陥りやすくするものです。 すべてのコードが一か所にあるため、そのコードが密結合になりやすく、関心の分離の原則を適用することが難しくなります。 さらに、多くの場合、モノリスはデプロイする前にコードベース全体を理解する必要性を生じさせます。 マイクロサービスアーキテクチャは、こうした課題への対応策です。

どのように役に立つのでしょうか

機能を異なるマイクロサービスに分離することにより、それらを独立してデプロイ、アップデート、スケールすることが容易になります。 また、意図せずアプリケーションの他のパーツに悪影響を与えることなく、大きなアプリケーションの一部に対して複数のチームが同時に作業することを可能にします。 マイクロサービスアーキテクチャは多くの問題を解決しますが、デプロイして追跡する必要があるものが桁違いに増えるため、運用上のオーバーヘッドも発生させます。 多くのクラウドネイティブテクノロジーは、マイクロサービスのデプロイと管理を容易にすることを目指しています。