4章マイクロサービスの通信スタイル
マイクロサービス間の通信を適切に行うことは、多くの人にとって問題です。その主な理由は、必要となる各種の通信を最初に考慮することなく、選択した技術アプローチに惹かれてしまうからだと感じています。本章では、各種の通信を試して解き明かし、それぞれの長所、短所だけでなく、どのアプローチが自分の問題領域に最も合うかを理解できるようにします。
同期ブロッキング、非同期非ブロッキングの通信メカニズムの説明だけでなく、リクエスト/レスポンス連携、イベント駆動連携を比較します。
本章を読み終わるまでには、利用できるさまざまな通信の選択肢を理解する準備ができ、以降の章でより詳細な実装上の注意点を見ていく際に役立つ、基礎知識を身に付けることができるでしょう。
4.1 プロセス内からプロセス間へ
まず、簡単なもの(少なくとも、私が簡単であってほしいと「願って」いるもの)から始めましょう。つまり、ネットワークを介した異なるプロセス「間」の呼び出しは、単一プロセス内の呼び出しとは「大きく」異なります。あるレベルでは、この区別を無視できます。例えば、あるオブジェクトが別のオブジェクトにメソッド呼び出しを行うことを考え、それから、この対話をネットワークを介して通信する2つのマイクロサービスにマッピングすることは、簡単です。マイクロサービスは単なるオブジェクトではないという事実はさておき、この考え方は多くの問題を引き起こすことがあります。
これらの違いのいくつかを見ていきましょう。それによって、マイクロサービス間の対話についてのあなたの考え方が変わるかもしれません。
4.1.1 パフォーマンス
プロセス内呼び出しのパフォーマンスは、プロセス間呼び出しのパフォーマンスと根本的に異なります。プロセス内呼び出しを行う際、基盤となるコンパイラとランタイムは、呼び出しのインライン化など、さまざまな最適化を行って呼び出しの影響を軽減するので、まるで最初から呼び出しがなかったかのようになります。プロセス間呼び出しでは、このような最適化は不可能です。パケットを送信する必要があるからです。プロセス間呼び出しのオーバーヘッドは、プロセス内呼び出しのオーバーヘッドに比べて、かなり大きいものだと考えてください。プロセス間呼び出しのオーバーヘッドは、非常に計測しやすいものです。データセンター内での単一のパケットのラウンドトリップは、ミリ秒単位で測定されます。一方、メソッド呼び出しのオーバーヘッドについては、気にする必要はありません。 ...
Get マイクロサービスアーキテクチャ 第2版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.