HashiCorpのConsulは,数千台のノードで分散稼働するように設計され,高い可用性と拡張性を備えた,サービスディスカバリとコンフィギュレーションのためのソリューションだ。
Consulはサービスディスカバリ,キー/バリューコンフィギュレーション,ヘルスチェックを目的とする。Zookeeperやdoozerd,あるいはetcdなどと機能的には同じようだが,サービスディスカバリ用のDNSインターフェースを備えることで,既存のサービスやレガシサービスに対応すると同時に,gossipプロトコルを採用することで,スケーリングの面でも優れているという。他のツールとの違いは,完全な分散型アーキテクチャで監視サービスを提供していることだ。クエリサービスに中央サーバを使用するNagiosや,サービス通知の管理の中心としてブローカが必要なSensuは,いずれもスケーリングの問題を起こす可能性がある。
それらよりも現代的な,サービスディスカバリツールと比較しても違いがある。SkyDNSは,同じようなクエリ実行用のDNSインターフェースを備えているが,監視チェックにはハートビートとTTLを使用する。一方でConsulは,カスタムチェックを定義可能であるのに加えて,最初から複数のデータセンタをサポートしている。Airbnbが開始したプロジェクトのSmartStackは,ZookeeperとHAProxy,そしてAirbubの2つのオープンソースプロジェクトSynapseとNerveとで構成された,サービスディスカバリと登録を行うことを目的とするフレームワークである。Consulはgossipプロトコルを採用する唯一のツールだ。gossipプロトコルはスケーラビリティに優れ,クラスタノードの完全な動的追跡が可能だとされている。他のソフトウェアとの比較資料には,これまで述べたもの以外にも,同様なシナリオで一般的に使用されるツールとの違いが,さらに詳細に説明されている。
Consulのクラスタは複数のクライアントと複数のサーバで構成される。大きな特徴は,データが後者のみにストアされること,そして自動ディスカバリを使用していることだ。読み込みと書き込みは,クラスタの任意のメンバに対して行うことができる。サービスの登録は,コンフィギュレーションファイルを使用するか,あるいはクラスタ内の任意のエージェント(クライアントまたはサーバ)に対してHTTP API経由で行う。登録されたサービスとノードは,HTTPインターフェースあるいはDNSインターフェースのどちらを使っても問い合わせることができる。これにより,既存のサービスを改造することなく,簡単に利用可能になる。
gossipプロトコルは,Hashicorpの別のプロジェクトであるSerfライブラリで,メンバシップ管理とクラスタへのブロードキャストメッセージに使用されていたもので,コーネル大学のコンピュータサイエンス学部によって発表された論文,“SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol”に基づくプロトコルである。
Ben Schwartz氏が述べているように,ConsulはPuppetでプロビジョニングすることができる。氏が提供しているvagrantボックスを使ったサンプルでは,Consulの設定にPuppetモジュールを,ConsulのDNSルックアップを.consul
で終わるConsulエージェントにルートするためにPuppet Dnsmasqモジュールを使った,Spring Bootデモプログラムの利用方法が示されている。