isucon9の予選に出て敗退した

isucon9の予選に参加して、今年も予選敗退してしまったのでその記録を残しておく。今年で4回目で、id:hitode909 さん、id:side_tanaさんと「ミッシングマグネティックストレージ」という名前のチームで出た。最高スコアは6720イスコインで、最終スコアは5120イスコインだった

振り返ってみたけど自分はほとんど何もやってない。もう少し手を動かす必要があった。

準備

締め切り1週間くらい前にチームを組んで、予選1週間くらい前に練習をした。レギュレーションを読んだり、言語どうしましょうねとか、あと最初にこういうことやりましょうとかそういうことを話して、isucon8の予選問題で軽く試したりした。ここ数年はAzureとかConoHaとか使われているものの、だいたい「サーバにSSHでログインしてあとはいい感じにする」みたいなムーブになってしまい、出題環境となるクラウドサービスを特に触らずに終わってしまう。今年はなにか触ってみたいなと思って、どうせNginxのログとか集めたくなるのでLogServiceというのを使ってみることにした。それ以外は「デプロイはrsyncでやりましょう」「sshの鍵を事前に集めておきましょう」という話をして、Alibabaのテスト用インスタンス無事立てられましたね〜とかをやった。

前日は明日最初にだれが何をやるのかというのを決めたり、RAMユーザーをチームメンバー分発行したり、あとはテンション上がりそうなご飯はどこで注文しましょうかとか話して解散した。前日は飲酒禁止ですとか言っていたのに、その後うっかりビールを飲んでしまった。

LogService

なんとなくLogServiceのドキュメント眺めてたら便利そうだったので使った。この辺りにNginxのログを集めて分析する方法が書いてあったので導入時に困ることもなかった。

jp.alibabacloud.com

「よく使う集計クエリ」を保存しておけるのがよかった。ベンチマーク走らせたあとに各自がそれぞれの画面でログの集計結果を眺めたり、好きなクエリで集計できそうだなと思ったので導入した。もちろん、こういうのはkibanaとか使ってもいいのだと思う。とにかく今年はいつもと違うことをやってみたかった。 f:id:tkzwtks:20190909225629p:plain

当日

当日どういうことをしたかはhitode909さんのブログにある通り。

blog.sushi.money

今年はアプリケーションの改善に集中したい、ということを練習時から話していて、実際みんなでそういう動きをできたのは良かった。hitode909さんの細かい修正は少しづつスコアを上昇させたし、side_tanaさんが導入したCloud Traceはアプリケーションのボトルネックを探すにはかなり役に立った。

tana.hatenablog.com

最初にも書いたけど、僕はあまり手を動かすことができずに、最初やる予定だったタスクをやったあとは、このサービスはどういうアプリケーションか、みたいなことをずっと考えたり、ペアプロに参加したりしていた。/buy のエンドポイントが遅いものの、ここを改善しないとポイントが上がらないと考えていたので、どう改善するかということを考えていたけど、結局解決案を見つけられなかった。サービスで実際にユーザーがどういう動きをするのだろうかというモデルをうまく作れたらもう少し改善できたのかもしれない。普段から触れているアプリケーションなら「この画面のあとはここに遷移するはずだから、この処理はあとでもいい」みたいな解決案は出せるかもしれない。しかしisuconみたいに初めて触れるアプリケーションでそういうことをやるのは難しい、というのは改めて実感した。こういうのが得意な人もいるのかもしれない。次回は(ベンチマーカーが模している)ユーザーがどういう動きをしているか、というのを最初に考えるといいかもしれない。

/buyにこだわりすぎたのもよくなかった。「/loginが遅い」という話はしていたものの、今回のスコア計算は「売ったイスの総額」になるということだったので、とにかく購入エンドポイントを解決するのが先決だと思っていた。が、/loginを素早く捌けるようになればより多くのユーザーが購入までたどり着けるようになるはずで、もしかしたらスコアを上げることができたかもしれない。ここを改善するための案はそこそこ早く話し合えたものの、タイムアップまでの時間があまりなくて試すこともできなかった。

アプリケーションの改善にこだわりすぎて、結局サーバーを1台しか使えなかったのも反省点だと思う。まずはアプリケーションのボトルネックをある程度解消しないとホストは増やせないと思っていたが、最終的には増やしたいはずだったので、最初から3台でやればよかったのかもしれない。同様にキャンペーンレベルを最初からMAXでやればよかったと思う(キャンペーンレベルは一度MAXにしてみたが、その結果スコアががくんと下がったのでその後日和ってしまったのだった)。あと最初に書いたけど、やっぱりもう少し手を動かす必要があった...

反省点はあるものの、今年は「どういうアプリケーションか考えながら改善したい」というつもりだったので、一貫してそういう話ができたのは満足感がある。問題のボリュームは多いなと思ったけど、考えることもたくさんあって楽しかった。あとisuconは普段の仕事と違う人とチームを組めるのがよい。普段一緒に仕事していないメンバーと課題に取り組むのは新鮮な感じがして楽しかった。出題者、運営の皆様お疲れさまでした。来年こそは本戦に出たいと思いつつ、しばらくは反省の日々を過ごします...

「天気の子」観た

何だかんだ楽しんで観たとは思うけど、「自分の身の周りに存在するもの」がちょこちょこ出てきて現実に引き戻されてしまうのが辛かった。ローソンとか。たまに出てくるくらいなら良いけど、自分の感覚では多すぎた。

 

そういえば「君の名は。」観た後に新開誠作品ちゃんと観るかって考えてたけど結局観てない。今回も同じように観るかって考えてるけど、結局また観ない気がするな...

「DNSがよくわかる教科書」を読んだ

最近DNSを触ったり、同僚の作業のレビューをする機会が増えてきたものの、自分の知識が曖昧な部分も結構あったので読んだ。

DNSがよくわかる教科書

DNSがよくわかる教科書

DNS自体は知っているものの、僕がDNSの設定を触ったのは10年以上前で、そのときもbindの設定を見よう見まねで書いて・・・みたいな感じだったので、基礎から勉強しないとなというのと、同僚から良い本だとお勧めされたのがそもそもの始まり。「よくわかる教科書」と書いてあるだけあって、DNSの基礎から権威サーバーの設定方法・digの使い方・DNSへの代表的な攻撃、権威サーバーの移転等の実践的な内容までカバーされていて、「なんとなく知っているけど、いざ触ろうとするとよくわからない」みたいな人にはいい本だと思う。

最近だとクラウドのマネージドサービスを使うことも増えているので、自分でbindとかunbound(これは最近知った)の設定書くこともしかしたらほとんど無いのではない気もするけど、基礎的な知識に関しては今でも十分使えると思う。この本ですべてがカバーできているわけではないが、アプリケーションを触りつつこういうのも触らないといけない、という状況になった場合には読んでみると良いと思う。サッと読めるし。

子供が生まれた

日付的にはもう昨日なのだけど、子供が生まれた。

子供はあれよあれよという間に生まれた。実は予定日は来週で、今日も普通に仕事をしていたところ会社の昼休み終わったくらいに妻から「陣痛が始まったぽいので病院に行く」という連絡がきて、全く考えてなかったので動揺してしまった。一緒に行ったほうがいいかなと聞くと「病院行ってみてもらってから連絡する」と言われたので、少し落ち着かないなと思いつつ普通に仕事を続けていたのだけど、20分後くらいに「もう生まれるらしいから来てほしい」という電話がかかってきて慌てて会社を出てタクシーに乗って病院に向かう。

タクシーの中ではまあまあ気持ちに余裕があったけど、病院に着いて分娩室に入ったらすでに頭だけ出ていて、それを見た瞬間からボロボロと泣いてしまった。自分でもまさか泣くと思っていなかったけど、びっくりするぐらい泣いてしまって、助産師さん達に「お父さんが一番泣いてる」と言われてしまう。分娩室に入った直後くらいに生まれてきてくれたので間に合ってよかった。最初に連絡もらってからここまでで1時間経ってない。とにかく考えていたよりもすばやく生まれてきてくれたのであまり心の準備ができなかった。

生まれてきた赤ちゃんが自分と血がつながっている、というのは正直実感がないのだけど、生まれてきた子が元気に育つように支えていきたい。