詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

ISUCON13に参戦した(カラアゲネイティブ、105,751点、15位) #isucon

追記: 15位でした

ISUCON13 まとめ

もう何度目か忘れたけど、チーム「カラアゲネイティブ」(Songmutoricls)でISUON13に参戦。

リポジトリはこちら。

GitHub - motemen/isucon13

toriclsくんが午前中不在であることがわかっていたので、開始前に集まってGitHubやSlackの会場の相談をしてからスタート。実装はGo。

Songmuさんと問題を読みながら方針を検討。DNSをやるのは面白そうだけど、全然触ったことがないし意図もまだつかめなかったので、まずはmysqldがボトルネックになっていることを確認して、愚直にpt-query-digestでクエリの改善を進めていった。今回はじめてquery-digesterを使ったけど、便利でした。一方でGoアプリケーション自体の改善やアクセスログからのチューニングはまったくやらなかった。

最終的にはPowerDNSに手を入れることはせずに、PowerDNS用のDBとisupipe用のDBを分けるくらいの対応だった。

  • isu11: nginx, pdns, isupipe
  • isu12: isupipe, redis
  • isu13: mysql

という感じ。

あとは思い出せる範囲でざっくりと。ほんとにpt-query-digestの結果を上から潰していくことしかしてない。

  • 初期実行: 3,862
  • livestream_tagsにインデックスを張る: 4,629
  • ADMIN PREPARE が支配的だったのでinterpolateParamsを設定: 4,977
  • 投げ銭、リアクション数の統計情報の一部をRedis化: 6,335
    • 統計情報については他にもまとめて対応できそうな部分も横目に見ていたが、主要ではなさそうだったのでこの時点では後回しにした。
  • 予約枠をstarted_at、end_atで見てるところはidベースで見るようにできそうだったので変更: 7,517
  • このへんでtoriclsくんが合流。とくに説明せずにキャッチアップしてくれたので助かった。
  • Songmuさんがiconsのファイル化をしてくれてだいぶ伸びた。それからtagsのN+1解消、themeのRedis化など: 18,098
  • DBとアプリケーションを分ける: 27,976
  • goccy/json化、ng_wordsにインデックス、アプリケーションを2台にわける: 34,688
  • 統計情報のその他のクエリが支配的になっていたのでRedis化: 36,603
  • iconsをredis化: 57,313
  • 複数台構成をさらに調整: 74,129
    • ユーザ登録時にpdnsutilを呼んでるのを思い出せてよかった。ユーザ登録処理をpdns同居のアプリケーションのみで行うように変更(したはず)
  • 最後にダメ押しで getReactionsHandler, getLivecommentsHandler のN+1を解消して2万点ほど上乗せして: 105,751

追試に失敗してなければこれが最終スコア。水責め対応をいくらかでもできればもう少し伸ばせたかもしれないけど、明確にボトルネックなようにも見えなかった&具体的な手を思いつけていなかったので手が出せず。

運営の皆さんおつかれさまでした!!!

思い出の本 - Win32 APIオフィシャルリファレンス

あなたのキャリアに影響を与えた本は何ですか? 著名エンジニアの方々に聞いてみた【第三弾】 - Findy Engineer Lab - ファインディエンジニアラボ

寄稿しました。これを書くにあたって、なにか思い出に残ってる本はあるかなー、と考えて最初に思いついたのがこの本だった。

ビルの表紙ね。この本が学校の図書館にあって、これを読みながら通学したりしていた。 学校の前のバス停で読んでたら知らない先輩に「それ面白いん?w」ってからかうように聞かれて、面白いから読んでるに決まってんだろ、お前はなにがおかしいんだと思ったが、 今思いかえせばこんな本外で読んでたらおかしい気はする。まあまあ分厚かったので。

ちなみにこれを使いこなしてたわけじゃなくて、ほとんどはただ読んでいただけだった。HWND ってなんだろう……そんなエキゾチシズムですよね。

そのころの様子がなぜかこの記事にも登場しています: CTOになったToriです。せっかくの機会なのでエンジニアとしてのキャリアを振り返ってみました - Findy Engineer Lab - ファインディエンジニアラボ

Scrapboxで今週をハイライト

仕事でもプライベートでも週ごとにテンポを作って暮らしているので週番号で暮らしがち。 しかし今が2023年の何週目かっていうのはまったくわからんので、ScrapboxのUserScriptでなんとかしている。

./2023W46 などへのリンクをハイライトするかたち。 これをesbuildでビルドしているよ。 適当にstyleタグを生成しているので、開きっぱなしにして週が変わるとおかしくなるわけだが、気にはしていない。

import getWeek from 'https://cdn.skypack.dev/date-fns/getWeek';
const now = new Date();
const w = getWeek(now);
const wn = (1900 + now.getYear()) + "W" + (w < 10 ? '0' + w : w);
const style = document.createElement('style');
style.textContent = `a[href$="/${wn}"] {
  background-color: #FFEB3B;
}`
document.querySelector('head').appendChild(style);

こんなふうに、週ごとに雑多に予定を書いていくときに使っとります。

はてなで一緒に働きませんか?