consulを使って半年運用した感想

毎週書く予定だったのにすっかり間があいてしまった。細かいtipsはQiitaに書いたりしてるので、こっちに書くのはある程度まとまった話にしたいと思う。 ここ最近開発・運用していたサービスが落ち着いたので、一度感想を書いておこうと思う。一人でインフラの設計、開発、運用までやるのは初めてだったのでいろいろ勉強になった。 terraformとconsulを半年くらい使ってるので、感想を書いておく。今回はconsul。 サービスの要件 サービスはAWS上で動かす。 いわゆる普通のWebサービスと違うのは、Websocketサーバのようなコネクションを持つサーバがあり、単純にELBで負荷分散できない部分がいくつかあること。イメージとしては、ニコニコ生放送みたいな、動画のストリームを受けて配信するサーバ(サーバAとする)と、リアルタイムにコメントをブロードキャストするサーバ(サーバBとする)、のようなものに近い。 サーバAは配信するクライアントとコネクションをはるタイプのサーバだけど、サーバ側のCPU負荷が高くサーバ1台で5-10本くらいしか捌けない。 サーバBは、チャットルームのようなものが存在して、部屋に入っている人同士がWebsocketサーバ経由で大量のメッセージを送り合う。そのため、同じ部屋に入ったユーザは同じサーバに割り当てる必要があり、部屋ごとにユーザ数やメッセージ数が異なるので均等に負荷を割り振ることが難しい。 サーバA、Bともに負荷が上がると新たに増やす必要があるし、全てのコネクションが切れるまでサーバを落とすことはできない。 あとは、普通のAPIサーバやWebのフロントサーバがあるけど、それはELBがあれば問題ない感じ。 Consulを使う ユーザが新たに配信を始める際、どのサーバA・Bに接続させたらよいか判断するためには、それぞれのサーバのリストと負荷状況を知る必要がある。また、サーバ台数を増やしたり減らしたりすることがあるので、そのサーバに接続してもいいのかどうかも知る必要がある。 そこで、サーバの管理にconsulを利用することにした。 consulとは…