今週は ICL 手術後の一ヶ月検診があったり ISUCON11 に参戦したりした。ISUCON の話にも少しだけ触れておこうと思う。
仕事
- 普段仕事でペアプロ(ペア作業)をすることが多いのだけどVS Code の Live Shareを試すなどした
- 1年前くらいに使ったときは挙動が不安定でちょっと利用するのは難しいなとおもったけど今回はサクサク雨後したし、3人でシェアしても問題なかった
- オペレーション作業をする時にメトリクスを見ながら「あ、この時間帯は避けておこう」と判断するのだけど、今回もやっててよかったなと改めて思った
- 特にユーザーに影響がないと思っていた作業も実はサーバーリソースを以外と食っているケースがあるので慎重に
- スクラムセレモニーがだいぶ慣れてきた感じで設けた時間を大きく超過することがなかった
- ベースになっているのはmixiさんのこちらの記事
- 「家族アルバム みてね」のSREチームの紹介と取り組み
- 個人開発部が出来たので雑にChromeエクステンション作ってますとチャットに書いたところChromeエクステンションマスターがいたので1on1をしてみていろいろと話しを聞けた++
- ホットリロードにweb-extがいいよと教えてもらったので試してみる
プライベート
- 作りかけてまったく動作しなかったChromeエクステンションが動いた
- github.com
- エクステンションとして公開しみようと思う(需要はないだろうけど)
- ICLの一ヶ月後検診が無事終了
- まだハログレア現象が気になるけど半年もすればだいぶよくなるとのこと
- 東急プラザ銀座で食べた牛タン利休の「濃い卵」が人生で一番美味しかった。ほんとうに味が濃くて食べた時に醤油に漬けてたのかと思った。それぐらい濃かった。もちろん牛タンも美味しかった
- 16時間ファスティングを卒業した。朝を抜くと基礎代謝分のカロリーを下回ることが増えてしまったので朝も食べるようにした。ただ夜は20時ぐらいに済ますようにしている。体調はいい感じ
- ISUCON11に参戦してきた。後述する
ISUCON11の感想
最後に出場したのがISUCON6 or 7だった記憶で約5年ぶりに出場。
毎回3人で出場して主にインフラ面を担当していたのだけど今回はソロで出場してみた(チーム名はpokke)理由はコロナの影響で直接会うことが難しそうだったのとソロでインフラ以外にも手を出してみようと思ったのが理由。オンラインでつないでやることも出来たと思ったけど、ちょっと大変そうに思えたため。
今回はソロでインフラ以外にアプリにも手を出せたのは良かった。ただ、やっぱソロはきつい。当然ながら担当範囲が広くなるのとアプリの改修に没頭してサーバーのリソース状況の把握など全く出来ずという始末。あとスコアの仕様がちゃんと理解する余裕もなかった。。。
結果はもちろん予選敗退でまた来年参戦したい。実力をシンプルに試されるのが本当に面白い。
twitter.comisucon11おわったーーー!!!おもろつかれたぞーい😆#isucon
— Masa (@maaaato) 2021年8月21日
事前準備
過去問をやるぞと思っていたけどまったく時間が取れずに前日にisucon10をVagrantで動かしてslowログをみたりalp
を試してみた。あとはやることメモを用意しておいた。
isuconでやること ## 以下のツールのインストール - alp - pt-query-digest wget https://github.com/tkuchiki/alp/releases/download/v1.0.7/alp_linux_amd64.zip sudo apt install unzip unzip alp_linux_amd64.zip sudo mv alp_linux_amd64 alp sudo mv alp /usr/local/bin/alp wget https://github.com/percona/percona-toolkit/archive/3.0.5-test.tar.gz tar zxvf 3.0.5-test.tar.gz ./percona-toolkit-3.0.5-test/bin/pt-query-digest --version sudo mv ./percona-toolkit-3.0.5-test/bin/pt-query-digest /usr/local/bin/pt-query-digest ## mysqlのスロークエリの設定 [mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 0 確認 show variables like 'slow%'; ## myplofiler wget https://github.com/KLab/myprofiler/releases/download/0.2/myprofiler.linux_amd64.tar.gz tar xf myprofiler.linux_amd64.tar.gz sudo mv myprofiler /usr/local/bin/ ## スペック確認 cat /proc/cpuinfo free -h ## 参考実装をgithubにpush git init git add . git commit -m "fitst commit" ## ベンチマークを実行 初回のアプリケーションでどの程度スコアが出るか確認 ## systemdでなにが動いているか `systemctl list-unit-files --type=service | grep isu`
主にやったこと
以下をup.sh
としてアプリケーションのリポジトリを置いた。デプロイはサーバーにログインしてgit pull
してそのあとにこのスクリプトを毎回実行していた。もっと楽ができたはず。。。
#!/bin/bash function status(){ systemctl status mysql systemctl status nginx systemctl status isucondition.go.service } function restart() { sudo systemctl restart mysql sudo systemctl restart nginx sudo systemctl restart isucondition.go.service } status restart
pt-query-digest
をインストールして時間がかかっているクエリを見てみた。一番時間がかかったクエリのexplan
を取ってみたところusing filesort
が出たのでindexを張った。ここで勘違いしたのがorder by
でindexが効かないと勘違いしてしまった。
さらにindexを張ったけどusing filesort
が消えなくてちゃんと調べるとindexのカラムの順番がクエリで指定するカラムの順番が間違っていた。
indexを入れるとことでスコアが2万台くらいに一気に跳ね上がった記憶。discordの感想戦でも同じ結果になったチームが多かった模様。
アプリケーションの改修はあまりできておらず、トランザクションを張る必要がないんじゃ?と思ったところは片っ端から消した。スコアに影響があったかはよくわかってない。あとは画像を返すところにCache-Control
を入れてみた。これも効果は不明。
あとデプロイしたはいいけどgo
のbuildをすっかり忘れていて1時間くらい気づかずにいた...
今回用意されたサーバーは3台あったけど2台しか使えてない。途中まで1台だったけどさすがに勿体ないと思ったので1台をDBサーバーにしてアプリケーションからDB接続先ホストを変更(env.sh
に環境変数の設定をしていた)
17時ごろから再起動試験を開始。ここでミスしたのが、cloneしていたリポジトリを/tmp/
に置いていたので再起動後に消えてしまい、シンボリックリンクが全滅してしまった。homeディレクトリにcloneしてシンボリックリンクを張り直してちゃんとベンチマークが取れることを確認した。
運営の追試の結果、スコア25118点で185位で着地。 isucon.net
twitter.comまた来年頑張ろう!
— Masa (@maaaato) 2021年8月22日
ISUCON11 オンライン予選 予選結果と本選出場者決定のお知らせ : ISUCON公式Blog https://t.co/LxgGEjL8T1
本戦出場チームのみなさんおめでとうございます。そして運営のみなさんありがとうございました。そしてお昼ごはんやコーヒーの用意をしてくれて支えてくれた妻に感謝。また来年がんばるぞ。
そういえば公式テーマソングが出来てた。ちゃんとかっこよい曲。
See you next time:)