集権型と分権型のインフラ設計

それなりの数のサーバーをクラウドで管理しているのですが、管理の方法をそろそろ分権型の設計に移行するべきなのかどうか、考えています。

これまでは完全に集権型でした。中心となる管理サーバーがあって、コマンドはそこから発行します。これまではfabricをコアライブラリとして使って、各ノードにSSHコマンドを発行することを軸にオーケストレーション運用を設計してきました。

しかしこの方法には限界もあって、各ノード間の関係を管理するのが面倒です。ロードバランサへのアプリケーションサーバーの組入、データベースのレプリケーション、スタンバイ機へのフェイルオーバーなどです。やれているのですが、一度全体の状態を問い合わせにいって、それを集めてからあらためてコマンドを発行する形が、なんか理想型じゃないなと。

Serfを代表に、分権型、つまり各ノードがエージェントを持って自らのあるべき姿を認識してコマンドを自ら発行する形の運用方法が脚光を浴びてきています。分権型にすると良いのは、管理サーバー側が周期的に状態を問い合わせなくても自動で動くので状態の変化に対応するスピードが早くなり、より自律的なアーキテクチャを作れるのではないかということです。

Push/Pullのどちらか、という問題とも言い換えられます。状態を問い合わせてその結果に応じてコマンドを発行するのか、自らが状態を認識して能動的にコマンドを発行するのか、という違いです。

分権型のパラダイムで運用を考え始めたときに、発想の転換ができるのではないかと期待している部分もあるのですが、今のところ、劇的に運用を改善するようなアイデアは思いつけていません。何はともあれ手を動かして、少しずつ試していこうと思います。

この記事が気に入ったらサポートをしてみませんか?