週末雨だったのでSerfをさわってみた

最近までSerfの意味を波乗りくらいにおもってました。’農奴’らしいです。梅雨で週末雨だったのでSerfを触ってみました。

Vagrantで仮想マシン2台建ててGet Startedをもくもくやってみました。

  • Membership: ノード一覧を管理する。管理するといっても中央サーバはいなくて各ノードが自律分散的に他ノードと会話して全ノードを知っている状態になる。ノードのクラスタへの参加、離脱はeventという形でクラスタ内のノードに即時伝搬する。イベントハンドラの機能により各ノードは任意のスクリプトを実行できる。

  • Failure detection and recovery: nodeは他のノードの(コネクティビティ的意味の)failを検知でき、他のノードにも伝える。また自動で再接続を試みる。これもイベントとして伝搬されイベントハンドラによりスクリプト実行可能。

  • Custom event propagation: ノードの参加、離脱、接続失敗以外にもカスタムなイベントをクラスタ内に伝搬できる。例えば、deploy実行を伝搬させたり、設定を伝搬させたり。またQueryを使えばevent handler経由で各ノードの実行結果を受け取ることもできる。

さわってみた感想としては、インストール楽。serfコマンドをダウンロードして置くだけ。Goの良いとろこ。また学習コストが低くてGet Started読んで試してみれば1, 2時間あればだいたい理解できるとおもいます。

ユースケース || 参考

まとめ

やんごとなき事情により/etc/hostsを使っているシステムを知ってて内部DNSサーバなあと考えてたけどSerf + /etc/hostsの組み合わせいいですね!

あと、個人的にはネットワーク機器みたいな箱物のサービスディスカバリに対する最適解が無いので、良いツールが出て来ないものかとおもっている次第なんだけど、ネットワーク機器がLinuxの箱で置き換わればいいのにとおもってます。

簡単に自立分散システム作れて良い時代になったものですね。

以上!!