10章Singleton Service(シングルトンサービス)
Singleton Service(シングルトンサービス)パターンは、ある時点でアプリケーションのインスタンスが1つだけ動作しているようにしつつ、高可用性を保ってくれます。このパターンはアプリケーションからも実装できますし、Kubernetesに完全にそれを任せることもできます。
10.1 問題
Kubernetesが提供する主な機能の1つが、簡単かつ透過的にアプリケーションをスケールできる能力です。Podはkubectl scaleのようなコマンド1つで命令的に、あるいはReplicaSetのようなコントローラ定義を通じて宣言的に、はたまた「29章 Elastic Scale(エラスティックスケール)」で説明するようにアプリケーションの負荷に応じて動的にスケールできます。同じサービス(ここで言うサービスはKubernetesのServiceではなくPodとして表現される分散アプリケーションのコンポーネント)の複数のインスタンスを動かすことで、システムのスループットと可用性は通常高まります。可用性が高まるのは、サービスの1インスタンスが正常でなくなった時、リクエスト割り当ての仕組みがそれ以降のリクエストを正常なインスタンスに転送するからです。Kubernetesにおいて複数のインスタンスとはPodのレプリカのことであり、Serviceリソースがリクエストの分散とロードバランシングに責任を持ちます。
しかし、ある時点においてサービスのインスタンスは1つしか実行が許されない場合もあります。例えば、あるサービスに定期的に実行されるタスクがあり、そのサービスには複数のインスタンスがあるとしましょう。各インスタンスはそのタスクをスケジュールされた間隔で実行するので、タスクが1回だけ実行されて欲しい場合でも、複数回実行されてしまいます。また別の例として、何らかのリソース(ファイルシステムやデータベースなど)に対してポーリングを行うサービスがあり、そのポーリングとデータ処理を行うのは1つのインスタンス、あるいは1つのスレッドにのみであるようにしたい場合が挙げられます。3つめの例として、順番を保った状態でメッセージブローカからメッセージを受け取る際にシングルスレッドのコンシューマを使用する際も、シングルトンサービスが必要です。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access