2018-07-12(木) [長年日記]
■ わさますのmassrをHerokuからGCPへ引っ越した
すでに数日が経過したが、長年Heroku上で運用してきたわさますのmassrを、GCP (Google Cloud Platform)へ引っ越した。いまのところいくつか問題はあるものの、順調に稼働中。
きっかけはHerokuのプラグインとして提供されているMongoDBにいい感じのプランがなくなってしまったことで、とにかく長いこと運用していて数百MBオーダーまで膨れ上がったコンテンツを適当な価格でサーブしてくれるところがない。ちょうどGCPのGCE (Google Compute Engine)の一番小さなやつ(f1-micro)に無償プランがあるから、それを試用してみようという話に。
とはいえf1-microはメモリたったの600MB。ここにこれだけのサービスを乗せないといけない:
- nginx (reverse proxy、https終端)
- mongodb (storage)
- memcached (cache)
- massr (app)
かなり無茶ですなー。OSはDebian9。そこにAnsibleでnginxのリバースプロキシをざっくり構築。あとLet's Encryptで専用ドメインをHTTPS化。残りのパッケージはdocker-composeを使って全部コンテナに乗せる形にした。
これで「えいやっ」と動かしてみたら、残メモリ50MBあたりでいちおう稼働してる。ギリっギリやんけ(笑)。しかも、検索みたいなちょっと重い処理を走らせると、CPUが100%に張り付いてsshすらできなくなるので、やっぱメモリ不足はあきらか。まぁネックはMongoDBでしょう。
このあたりで、内輪で「f1-microチャレンジ」と呼び始める(つまりゲームになった)。もう引っ越しちゃったのでしばらくこのまま様子は見たいし、やれるところまでやろう。
ということで、焼け石に水だとは思いつつ、swap領域を設定してみた。ついでにStackdriverも入れて各種ステータスの監視を始める*1。
そしたら、重めの処理を走らせるとCPUやディスクI/Oがガンっと上昇するものの、swapの使用率がちょっと上がるだけでなんとか死なずに結果を返すようになったのだった。仮想メモリすげー。というわけで、意外や意外、f1-microでもけっこうまともに動くじゃん。
それでもしばらく運用してると重くなったりするし、検索もちょくちょく失敗したりするので、定期的に再起動かけてやったりする必要はありそうで、少しは課金してメモリ1GBくらいの環境にしてやった方がよさそうだ。まぁそれもぼちぼち。
今回の話でしみじみ思ったのはやっぱHerokuってすげーーー!!ってことだな。運用に手間暇かけられない趣味のサイトなんて、Herokuがやっぱりいちばん楽だよ。予算が許せばとことんHerokuだけで運用したいものだ*2。