0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【マイクロサービス】サービス間通信の代表的パターンまとめ

Posted at

はじめに

こんにちは!
普段AWSを用いたインフラ構築に携わっているインフラエンジニアです。
この記事では、マイクロサービスにおけるサービス間通信のパターンと通信を実現するサービスを紹介させて頂きます!

サービス間通信

マイクロサービスではモノリスとは違い、サービスが分割されているためサービス間で通信を行う必要があります。

qiita_microservice_com-intro.drawio.png

以下、サービス間通信を設計・構築する際の代表的なパターンを説明します。

メッセージブローカー

メッセージ・ブローカーは、アプリケーション、システム、サービスが相互に通信し、情報を交換することを可能にするソフトウェアです。

qiita_microservice_com-mb.drawio.png

メッセージブローカーを用いることで、サービス間の通信を非同期に行うことができます。
これにより以下のようなメリットが得られます。

  • サービス間が疎結合になる
  • 送信先のサービス障害時でもメッセージブローカーにメッセージを送信することが可能

メッセージング方式

メッセージブローカーのメッセージング方式として Pull型 と Pub/Sub型 があります。

【Pull型】

Pull型は送信者(プロデューサー)がメッセージブローカーにメッセージを送信し、受信者(コンシューマー)がそのメッセージを取りに行く方式となります。

qiita_microservice_com-mb-pull.drawio.png

【Pub/Sub型】

Pub/Sub型は送信者(プロデューサー)がメッセージブローカーにメッセージを送信し、メッセージブローカーが受信者(コンシューマー)にメッセージをプッシュする方式となります。

qiita_microservice_com-mb-push.drawio.png

代表的なメッセージブローカー

製品 提供 特徴
Apache Kafka Apache Pull型で高スループットで低レイテンシー。
Apache ActiveMQ Apache Pub/Sub型のJavaベースのメッセージブローカー。柔軟なルーティングが可能。
RabbitMQ Pivotal Software 柔軟なルーティング機能を持ち、複数のプロトコル(AMQP, MQTT, STOMPなど)に対応。
MQ AWS ActiveMQおよびRabbitMQのフルマネージドサービス。
MSK AWS Apache Kafkaのフルマネージドサービス。
SQS AWS シンプルなメッセージングを提供するフルマネージドサービス。
Service Bus Azure トランザクションやメッセージの順序保証などの機能を持つフルマネージドサービス。
Pub/Sub Google Cloud Pub/Sub型で高スループットなフルマネージドサービス。

サーキットブレーカー

サーキットブレーカーとは、サービスの障害を検知した際に通信を遮断する仕組みになります。

qiita_microservice_com-circuit-breaker.drawio.png

サーキットブレーカーを導入すると以下メリットが得られます。

  • サービス障害時のタイムアウト処理を待たないため、UXが向上する
  • 障害の拡大を防ぐ (カスケード障害)

代表的なサーキットブレーカー

製品 提供 特徴
Istio Istio OSSのサービスメッシュ。サーキットブレーカー以外にも多数の機能を持つ。
Resilience4f Resilience4f Javaで実装されたOSS。Netflix OSSのHystrixの後継。
App Mesh AWS サーキットブレーカー以外にも多数の機能を持つ。

サービスディスカバリ

サービスディスカバリは、動的に変化するサービスの情報(IPアドレスやポート番号)を管理し、自動的に検出する仕組みです。
これを用いることで、マイクロサービスがスケールアウトしたり再配置された際にも、動的にサービスを見つけ出すことが可能になります。

qiita_microservice_com-service-discovery.drawio.png

代表的なサービスディスカバリ

製品 提供 特徴
Consul HashiCorp HashiCorpが提供するOSS。サービス監視やトラフィック管理などの機能も持つ。
Eureka Netflix Netflix OSSの1つ。負荷分散とフェイルオーバーも行う。
Zookeeper Apache Apacheが提供。JavaとCに公式ライブラリを持つ。
etcd CNCF kubernetesでネイティブサポートされている。
Cloud Map AWS AWSのリソース検出サービス。サービスにカスタム名をつけることが可能。

サービスメッシュ

サービスメッシュは、サービス間の様々な通信を制御できるようにする技術となります。
サービスメッシュを導入することで、サービス間の通信をインフラストラクチャ層で制御できるようになるため、アプリケーション開発者の負担を軽減ことが可能です。

qiita_microservice_com-service-mesh.drawio.png

またサービスメッシュには通信制御以外にも、以下の様な機能を持ちます。

  • トラフィック管理
  • 通信の暗号化
  • 負荷分散
  • リトライやサーキットブレーカー
  • カナリアリリースなどのリリース機能
  • モニタリング

サービスメッシュの仕組み

通信にはプロキシを用いてサービス間の通信・ルーティングを行います。

プロキシはサービスとは別の外付け機能 (サイドカー) として実装します。
以下の様にサービスのトラフィックをプロキシに送ることで、プロキシがゲートウェイとして通信を制御する仕組みとなっております。

service-mesh-work.png

代表的なサービスメッシュ

製品 提供 特徴
Istio Istio 高機能なオープンソースのサービスメッシュ。プロキシにはenvoyが用いられており、高度な機能を実現できる。
Linkerd Buoyant Kubernetes向けでオープンソースの軽量サービスメッシュ。シンプルで軽量な環境に最適。
Consul HashiCorp サービスメッシュの他、サービスディスカバリ機能も持つ。
App Mesh AWS AWSサービスとの連携がしやすく、AWSネイティブ環境に強力。

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?