ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

【ISUCON】ISUCON10本選出場した話 #ISUCON

はじめに

ISUCON10本選に某チームインフラ担当として出場しまして、賞金はおろか特別賞ももらえないという地味な結果に終わりました。本選でのshinobe179の働きと課題をまとめます。

今回の働き

EnvoyのNginx化

sudo lsof -i:443HTTPSをEnvoyが捌いてることが判明した時は、チームに激震が走りました。Envoyのまま走ってしまおうかとも思ったんですが、ログフォーマットの変え方が分からなかったこと(kataribe-friendlyな形式にしたかった)、チームメンバーがNginxのgrpc_passの存在を教えてくれたこと、config.tomlを見るにそれほど難しいことをしているわけではないことから、思い切ってNginxの設定ファイルを書き起こしました。修正とベンチを繰り返したら数度目でパスして、なぜかスコアもちょっと上がってました。その後はコンテンツキャッシュや負荷分散など、堂々活躍してくれました。

Envoyはこの日まで名前を聞いたことしかなかったのですが、今は「なぁんだ、Nginxみたいなもんじゃん」という気持ちです。サービスメッシュについては帰りにググりました。

Netdata

はい出た十八番。予選突破のブログでは「MySQLの詳細ログも取れるようにしたい」と言っていて実際試しもしたんですが、ISUCONの競技用マシンのリソースだとめちゃくちゃ重くなって再起動不可避になることが練習で分かったため、予選同様にメモリ、CPU、ディスクI/O、ネットワークI/Oだけで臨みました。今回もこれを起点にアーキテクチャを提案したりできたので、Netdata様様といった感じです。

課題

ネットワーク

本選HTTP/2あるなーと思って『詳解HTTP/2』を読んでいたんですが、よさを引き出してやることができなかったと思います。今回その余地があったのかどうかも、あまりちゃんと判断できませんでした。SETTINGフレームの内容を見る限り、できることはないのかな、という程度で。

また、Wiresharkが出力したJSONをパースして、HTTPのリクエストとレスポンスを紐づけて見られるようにするツールも作ってあったのですが、これが使えませんでした。リクエストに対応するレスポンスのパケット番号情報(HTTP/1.1だと、Wiresharkが解析して付与してくれる)がなかったためです。Wiresharkが古いのか……?

私のエンジニアとしての能力をレーダーチャートにしたら、ネットワークは最も尖っている部分だと思いますが、パフォーマンスの改善に繋がるインサイトを得られていない実感があります。それを突き止める眼力を養う術が分からないことも含めて、歯がゆいです。

アプリケーション

今回もアプリケーション改善はメンバーに任せっきりでした。エンジニアとしてのレベルアップを目的のひとつとして参加していて、インフラはある程度貢献できるようになってきましたが、できることばかりやっていてはダメなので、ボトルネックになりそうな箇所を見つけて、対策を立案して、それをゴリゴリ実装できる実力を身に付けたいです。今回で言えば、唯一のアプリ担当がメインの改善で手一杯だったので、二人目のアプリ担当として、Web Pushの実装に手を付けられたらよかったです。

また、「インフラ面は貢献できるようになった」とは言ったものの、データベースのクエリ改善やKVSみたいな、アプリと直結しているプロダクトについては無知です。このあたりについても根拠を持って提案・実装できないと、「ISUCONで本選進んだチームのインフラ担当です」と胸を張って言えないというのもあります。

チーム紹介スライド

私が素案を考えたんですが、ウラを狙いすぎて完全にスベってました。これで「あそこのチームか」などと思われるのも正直つらい

さいごに

「最後のISUCON、やっていくぞ」と決起集会が開かれたのが今年の1月。9ヶ月にも及ぶ戦いが幕を閉じました。これまで参加した中で、心技体全てにおいて最高のチームだったと思っていますが、それでもこの結果。まだまだやれることがあります。

どうやら最後じゃないらしい、というのは若干拍子抜けではあったものの、紛うことなき福音でした。来年また会いましょう*1。ISUCON最高です。対戦ありがとうございました。

*1:また会いま賞はもらえていません