9章オーナーシップの選出

ここまで見てきたパターンは、秒間リクエスト数、提供できる状態数、リクエストの処理時間などをスケールさせるため、リクエストを分散するものでした。マルチノードパターンの最後の章は、役割の割り当てをスケールさせる方法を扱います。多くのシステムでは、特定のプロセスが特定のタスクを行うという、オーナーシップの考え方があります。この考え方は、特定のインスタンスがシャーディングされたキースペースの特定の範囲を担当するという、シャーディングされたシステムの話の中でも出てきました。

シングルサーバの観点では、オーナーシップを取るアプリケーションは1つしかなく、1つのアクターだけが特定のシャードやコンテキストを所有するよう、すでに確立されたプロセス内ロックの仕組みを使えばいいので、オーナーシップの実現は通常は簡単です。しかし、1つのアプリケーションのみにオーナーシップを限定するとタスクを増やせず、スケーラビリティが制限されてしまい、タスクが失敗しても一定時間オーナーシップを取れないことになるので、信頼性も制限されてしまいます。そのため、システム内でオーナーシップの仕組みが必要な時には、オーナーシップを取得できる分散システムを開発する必要があります。

一般的な分散オーナーシップを図示したのが図9-1です。この図では、オーナーまたはマスタになる可能性のあるレプリカが3つあります。始めは1番のレプリカがマスタです。その後そのレプリカがダウンすると、3番のレプリカがマスタになります。最後に、1番のレプリカが復旧してきてグループに戻りますが、3番のレプリカがマスタ(あるいはオーナー)のままになる、という流れです。

図9-1 マスタ選出プロトコルの実際。1番のレプリカが選出された後ダウンしたら、3番のレプリカがマスタの役割を引き継ぐ ...

Get 分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計 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.