9章オーナーシップの選出
ここまで見てきたパターンは、秒間リクエスト数、提供できる状態数、リクエストの処理時間などをスケールさせるため、リクエストを分散するものでした。マルチノードパターンの最後の章は、役割の割り当てをスケールさせる方法を扱います。多くのシステムでは、特定のプロセスが特定のタスクを行うという、オーナーシップの考え方があります。この考え方は、特定のインスタンスがシャーディングされたキースペースの特定の範囲を担当するという、シャーディングされたシステムの話の中でも出てきました。
シングルサーバの観点では、オーナーシップを取るアプリケーションは1つしかなく、1つのアクターだけが特定のシャードやコンテキストを所有するよう、すでに確立されたプロセス内ロックの仕組みを使えばいいので、オーナーシップの実現は通常は簡単です。しかし、1つのアプリケーションのみにオーナーシップを限定するとタスクを増やせず、スケーラビリティが制限されてしまい、タスクが失敗しても一定時間オーナーシップを取れないことになるので、信頼性も制限されてしまいます。そのため、システム内でオーナーシップの仕組みが必要な時には、オーナーシップを取得できる分散システムを開発する必要があります。
一般的な分散オーナーシップを図示したのが図9-1です。この図では、オーナーまたはマスタになる可能性のあるレプリカが3つあります。始めは1番のレプリカがマスタです。その後そのレプリカがダウンすると、3番のレプリカがマスタになります。最後に、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.