Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RustでISUCONに勝つには
Search
garasubo
January 10, 2024
Programming
1
710
RustでISUCONに勝つには
garasubo
January 10, 2024
Tweet
Share
More Decks by garasubo
See All by garasubo
Cancel Safetyとスレッドリーク
garasubo
1
550
Rustでの自作OSをやってきて
garasubo
0
1.1k
Armの仮想化支援機構を用いてハイパーバイザーを自作する
garasubo
3
7.1k
RustからX Window Systemを触る
garasubo
0
640
Rustで始める自作組込みOS
garasubo
1
3.5k
クラウド向けOS(?)Unikernelとは何か
garasubo
0
1.8k
論文紹介:KVM/ARM: The Design and Implementation of the Linux ARM Hypervisor
garasubo
0
620
Other Decks in Programming
See All in Programming
Claude Code派?Gemini CLI派? みんなで比較LT会!_20250716
junholee
1
760
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
390
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
4
1.6k
コーディングエージェント概観(2025/07)
itsuki_t88
0
460
フロントエンドのパフォーマンスチューニング
koukimiura
6
2.3k
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
CDK引数設計道場100本ノック
badmintoncryer
2
590
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
15
8.8k
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
1
370
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
6
1k
MySQL9でベクトルカラム登場!PHP×AWSでのAI/類似検索はこう変わる
suguruooki
1
260
階層化自動テストで開発に機動力を
ickx
1
450
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
524
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Balancing Empowerment & Direction
lara
1
510
Designing for humans not robots
tammielis
253
25k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
182
54k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Designing Experiences People Love
moore
142
24k
BBQ
matthewcrist
89
9.8k
Code Review Best Practice
trishagee
69
19k
Side Projects
sachag
455
43k
Transcript
Rustで ISUCONに勝つには @garasubo
自己紹介 • ID: @garasubo • ISUCON10ではRustで予選通過 • ISUCON11以降では結果を残せず • 普段からRustを書いているのでできればISUCONもRustで勝ちたい
• 今年はISUCON個人スポンサー枠で参加しました
背景 • ISUCONの30位以内のRust使用チーム数は0チーム • Rustの参考実装が提供されたISUCON10以降で予選30位以内には必 ず1チーム以上Rust使用チームがいた RustでISUCONを制すには何が足りないのかを考えたい
Rustの強み • ランタイムが存在しないので高速で動作する • 最近の問題だとアプリケーションのCPU使用率がネックだったりする • 参考実装段階でGoよりも高速な場合も • コンパイル時に各種エラーに気が付きやすい •
なにより自分が使い慣れている
Rustの弱み • コンパイル時間が長い • 競技サーバーが貧弱だとそもそもコンパイルできない場合も • Mac利用者がいるとクロスコンパイルをする必要がある • ライブラリが不安定で他言語に比べるとやや使い勝手が悪い •
場合によっては変なエラーを踏む場合もある • どのライブラリが参考実装で使われるかも読みにくい • DBスキーマとの不整合はコンパイラでも防げない
今年の弊チーム • 私+初心者2名の構え • 経験不足・チーム内でのノウハウの不足 • 方針をミスって勇猛果敢にRedis化に挑み爆発四散 • 練習なしでRedis化に手を出すのは無謀 •
そもそも今回の問題でRedisを使っても高速化できないことが後で分かった • 延長戦でたぶんもう一人実装できる人がいれば30位以内に入れた感触 Rustを使ってももっと善戦できるはず
デプロイ戦略 コンパイルは手元のLinuxマシン上で行う • Macの人は別の仮想マシン等を利用してもらう • コンパイル成果物をrsyncで競技サーバーにアップロード • コンパイル&アップロード等をシェルスクリプト化してデプロイ しやすく
他のデプロイ戦略 • サーバーで直で編集するスタイル • 競技サーバーがそこまで強くないのでコンパイル時間が長くなりそう • できればアプリケーションコードはGitで同期をとりつつ変更したい • デプロイ用サーバーを用意するスタイル •
デプロイ専用サーバーが競技サーバーにアクセスしログ集計等を含めてやる スタイル • 事前準備はやや大変だが、メンバー間の同期は取りやすい • 微妙な変更とかの小回りはあんまりよくないかも
プロファイリング戦略 • tracingクレートを利用してOpenTelemetry形式でプロファイル可能 • jaegerを使えば各実行ごとのトレースが取れる • 統計情報をとる方法がよくわかっていないので活用が難しい • Nginxやmysqlのスローログからも十分な情報が得られる •
未知のDBや外部マイクロサービスとかが絡むとややこしいかも
DBとの向き合い方 sqlxがやや扱いにくい • Bulk insertやWHERE xx IN (..)みたいなクエリを書きにくい • 書けなくはないので気合で乗り切る
• Injection上等でformatマクロで乗り切る • スキーマのvalidationが厳しくランタイムエラーになりがち • 整数系の型の区別が厳しい • マクロを使うと事前検知もある程度できるっぽいけど使い勝手悪そう
その他テクニック • mokaを使ってアプリケーションキャッシュを実現 • ttl設定とかもできてかなり使い勝手が良い • 非同期対応もバッチリ • ISUCON用のいい感じのラッパをつくるのも悪くないかも •
そのほか使い勝手のいいライブラリの紹介を待ってます
まとめ • デプロイ戦略を練り直して開発を快適にしたい • プロファイリングのもっといい方法ないかなあ • moka以外にも便利なクレートないかなあ • 来年はRustで30位内のチームがもっと増えるといいなあ