これで
を動かす話
要約と言うか感想
- Arukasは簡単だけれど、その裏返しで制限が厳しい
- private registryにはまだ対応予定状態だとか
- VPNっぽい仕組みがないとか
- kuiperbeltが想定している環境ではない
- データストアとArukasは非常に相性が悪い
- kuiperbelt instance 1台構成なら出来たのでやり方を晒してみる
何を構築した?
- かんたんなWebSocketを使ったチャットアプリ
- kuiperbeltを使えばWebSocketとか何も考えずに作った普通のWeb Applicationでも簡単にWebSocketを扱えるようになりますというのを示したい
構成
- Perl/PSGI Application x N
- Redis x 1
- 高可用性取るならレプリケーションしたほうが良い
- というかコンテナでデータストア運用するのが(ry
- ここもRedisじゃなくてもKVS的な機能を持っていれば良くて、pub/subとかは使ってない。SET型使ってるけれどmemcachedであれば、カンマ区切りで複数個入れるのでも良くて、と思ったけれどアトミックに要素を出し入れするのは考えないといけ無さそう
- ぶっちゃけRDBMSでも良い
- というか認証も暗号化もかかってない。ノーガード戦法で平文をインターネットが漂っている
- ホストとポートを推測しにくいものを使って、パケットがArukas内部で収まっていることを祈りながら使っているけれど、みなさんは真似しないように
- ローカルの
redis-cli
から繋げられてデバッグに便利
- kuiperbelt x 1
- アイコンはWebSocketのロゴらしいです
- ここが現状1台なんだなぁ
- いや、今回はAppのほうでkuiperbeltのエンドポイントを返すようにしたのでそこを複数個にしてクライアントがランダムで何処かに繋げば複数台が可能
- ここには課題があります
kuiperbeltがのびのびと動くための条件
- のびのび=クライアントからのWebSocketを扱うkuiperbeltが複数台でロードバランサー配下に収まって機能する
- Web Application側がメッセージをクライアントに送る時に対象のクライアントがどのkuiperbeltにつながっているかを知る必要がある
- この情報は接続時コールバックで渡ってきてWeb Application側がKVSとかに保存する
- 接続時コールバックでWeb Applicationに通知するための「外からつながる自分のホスト名/IPアドレスとポート」をコンテナ自身が知る必要がある
Arukasでは
- アプリケーションは単一のエンドポイントを持つ
- これが曲者でアプリケーション起動時に設定したポートに飛んでいくが、httpsしか対応していないっぽい?
- コンテナ一個一個にホスト名とポートが割り当てられる
- これらはガチャ
- コンテナごとに割り当てられるホスト名とポートをコンテナ自身が知ることができれば勝つる
- 現在は敗北してます
- しょうがないので1アプリケーション1コンテナ、増やしたいならアプリケーションを増やす、この辺のリストはWeb Application側に環境変数で渡せるようにした
- このやり方でも無停止でkuiperbelt側を増やすことが出来る
- 1コンテナでも512MBもメモリがあれば2500接続ぐらいは余裕で持つ事ができるわけで、全然問題無さそう。メッセージ数はちょっとあれだけれど
- 今のやつはつながっている全員にブロードキャストしているので危ない
設定例
kuiperbelt
webapp
redis
- redis:latest指定して立ててるだけ
展望
- 前述のhyper.shでも試してみる
- つながるIPをコンテナにアタッチできるみたい
- ドキュメント見る限りはそれでもやはりよしなスケールは出来無さそう?
- GKEもといkubernetes...
- もっとちゃんとしたアプリケーションを作る
- このサンプルアプリだと見た目で夢が広がりにくいかなあ
- あとコンテナで監視ってどうやるんだろう。。。
追記:2018-03-22
Twitter眺めてたら、 pottavaというイメージをArukasで立てている人がいて、そのコンテナのURLを叩いてみると、渡ってきた環境変数やらがババっとJSON APIで取得できるという代物だった。
その中にMARATHON_HOST
と MARATHON_PORT
という環境変数があり、値の方はコントロールパネルで見たことのあるようなものが。。。。
早速自分も同じイメージで立ててみて検証してみた。
2台で立てるとガチャでこんな感じで取れた〜ワンチャンあるで〜〜〜 pic.twitter.com/OJb0ApaCzq
— トーカナイザの守護霊 (@mackee_w) 2018年3月21日
である。つまりこれは望んでいたものではーーー?????
今のkuiperbeltの公式イメージにそのまま適用することは出来ないが、arukas用の設定ファイルを作ればいけるのでそういうDockerfileを書いてみようと思う。