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。
2018-07-11(水) [長年日記]
■ ミリシタ1周年記念イベント「BRAND★NEW★PERFORM@NCE!!!」
全52人分の新規衣装付きSRをほぼまちがいなく獲得できるという大盤振る舞いの1周年記念イベントながら、もちろん上位ランカーはガチ中のガチ勢だから、そんなところに食い込もうなんてはなから考えもしないわけです(とりわけ志保なんてムリムリ)。そんなわけで、デイリー報酬をもれなくゲットできるレベルでむりなく終了。
なお、全員分のポイント累積による「総合アニバーサリーミッション」として設定されていた52億ptをたった4日で達成してしまったので、運営が急遽追加した152億ptも終了前日に達成して、とうとう運営が公式に「参りました」と言ったというのは歴史に残るアレかもしれない。
とはいえその裏では「オートプレイパスのおかげで食事がとれる」とか「1位の人が入院した」みたいな逸話がごろごろしているわけで、みんな本当に体壊してまでゲームすんなよ、急速に熱くなると飽きるのも早いぞ……とは思うけど、まぁいうだけムダだよなぁ。
THE IDOLM@STER MILLION THE@TER GENERATION 11 UNION!! (特典なし)
ランティス
¥2,226
2018-07-10(火) [長年日記]
■ 一日おきに薬を飲む
先週末の通院で、調子がいいから薬の服用頻度を減らそうということになり「一日おきに飲んでください」といって処方をされたわけだが、既視感があるなーと思って検索したらなんと12年前の自分の日記である。日記は続けるもんだねぇ。
あのときは誤差を承知で1年の経過日数を2で割った余りによって飲んだり飲まなかったするというアルゴリズムだったが、ツッコミでこれは一種のflip-flop回路であるという指摘があったので、今回はそういう方向で実装した。あるファイルがないときは作成して通知、あるときは削除だけすることで、これを毎朝cronで走らせれば1日おきに通知がくる:
#!/bin/sh mkdir -p $HOME/var/flipflop; cd $HOME/var/flipflop test -f medicine && rm medicine && exit echo "DO NOT TAKE A MEDICINE TODAY!" | pushme "flip-flop notify" pill touch medicine
pushmeコマンドは自分のSlackへ通知してくれる自作コマンドで、実行するとこんな感じの通知がくる*1:
ステートレスな前回の実装に対して今回のはステートフルだし、一長一短があるなーという感じだが、まぁ好みの問題だな。
*1 いかにもな感じのアイコンを探すのが今回もっとも時間をかけた部分です。
◆ zunda [1970-01-01 00:00:00 UTCからの経過秒数を86400で割って、2で割った余りを使えば誤差はうるう..]
◆ ただただし [そのクソリプは想定内です!w]