分散システムでは、コンポーネントは別々のプロセスや別々のマシン上で動作します。これらのコンポーネントは、アプリケーションサービス、データベースのレプリカ、バックグラウンドワーカーなどです。システムが多くの部分に分割されているため、あるコンポーネントが何かを実行するために別のコンポーネントと通信し、その応答を待つ必要が生じることはよくあります。
協調は、コンポーネント同士のこのような通信として考えることができます。たとえば、あるサービスが別のサービスによるリクエストの承認を待つ場合があります。データベースがレプリカからの確認応答を待つ場合があります。ワーカーがロックを待つ場合があります。こうした待機のそれぞれが依存関係を追加し、その依存関係こそが分散システムで問題が生じる箇所です。
この記事では、分散システムにとって協調がなぜ課題となるのかを検討します。協調がなぜ難しくなるのか、システムの拡張に伴って協調がどのように増えるのか、そして協調をどのように減らせるのかを扱います。コンポーネント同士が互いを待たなければならない箇所を最小限に抑える設計者は、より回復力が高く、拡張しやすく、運用しやすいシステムを構築できます。
中心となる考え方は、協調よりも独立性のほうが通常望ましいということです。コンポーネントが他者を待つことなく自力で処理を進められる場合、システムは障害、遅延の急増、負荷に対してより穏やかに耐える傾向があります。協調を避けられない場合にそれを扱う戦略は、以降のセクションの主題となります。
出典: ByteByteGo · 要約:HeadlinesBriefing