マイクロサービスアーキテクチャ解説:独立サービスのネットワーク

By JoeVu, at: 2022年10月28日20:46

Estimated Reading Time: __READING_TIME__ minutes

Microservices Architecture Explained: The Network of Independent Services
Microservices Architecture Explained: The Network of Independent Services

もし、モノリシックデザインが1つの大きな建物だとすれば、マイクロサービスアーキテクチャ丸ごとの、近代都市です。これは、大規模なアプリケーションを、ネットワークを介して通信する、より小さく独立したサービスに分割する分散アプローチです。

 

マイクロサービスとは具体的に何ですか?

 

マイクロサービスアプリケーションは、それぞれが異なるビジネス能力(「在庫」「支払い」「ユーザー管理」など)を表す、小さく自律的なサービスの集合体です。

 

  • 独立したデプロイ: 各サービスは、他のサービスに影響を与えることなく、個別に構築、テスト、およびデプロイできます
     

  • 疎結合サービス: コードベースやデータベースを共有しません。API(例:RESTやgRPC)またはメッセージキューなどの軽量なメカニズムを介して通信が行われます
     

  • 技術的異種性: 各チームは、各特定のサービスに最適なプログラミング言語、フレームワーク、およびデータベースを自由に選択できます。

 

都市の良い面

 

マイクロサービスは、複雑さとスケールに対処する際にその真価を発揮します:

 

  • 優れたスケーラビリティ: 負荷に基づいて、個々のサービスをスケーリングできます。「検索」サービスがビジーな場合、そのサービスのみを複製し、コストとリソースを節約できます
     

  • より速い開発サイクル: 小規模なチームは、独自のサービスで独立して作業できるため、機能の開発、テスト、およびデプロイが高速化されます
     

  • 障害隔離(回復力): 1つのサービス(例:「レコメンデーションエンジン」がクラッシュ)が失敗した場合でも、アプリケーションの他の部分(「チェックアウト」や「ログイン」など)は機能し続けます
     

  • 技術的な柔軟性: チームは、アプリケーション全体を書き換えることなく、新しい技術を採用できます

 

分散ネットワークの課題

 

複雑さは、コードベースから運用環境へと移行します:

 

  • 運用の複雑さ: 数十または数百のサービスを実行するには、監視、ログ記録、および調整のための専門的なツール(DockerKubernetesなど)が必要です
     

  • 分散トランザクション: 複数のサービスにまたがる操作(例:在庫を更新し、支払いを処理する注文の配置)は、管理とデータの整合性を確保することが大幅に難しくなります
     

  • デバッグのオーバーヘッド: 複数のサービスとネットワーク呼び出しにまたがるリクエストを追跡することは、単一のアプリケーション内の関数呼び出しを追跡するよりもはるかに複雑です
     

  • より高いコスト: 分散システムをサポートするために必要な運用インフラストラクチャ(ネットワーク、サーバー、サービスメッシュ)は、単一のモノリスよりも高価です。

 

どのような場合に意味がありますか?

 

マイクロサービスは、大規模で複雑、かつ高度にスケーラブルなアプリケーションNetflixAmazonUberなど)にとって、高い可用性、迅速な独立デプロイ、および技術的な多様性が重要な要件である場合に、ゴールドスタンダードです。

 

単純なアプリケーションや新しいアプリケーションでは、運用オーバーヘッドが利点を上回ることがよくあります。

 

Tag list:

Subscribe

Subscribe to our newsletter and never miss out lastest news.