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
0
300
RustでISUCONに勝つには
garasubo
January 10, 2024
Tweet
Share
More Decks by garasubo
See All by garasubo
Rustでの自作OSをやってきて
garasubo
0
980
Armの仮想化支援機構を用いてハイパーバイザーを自作する
garasubo
3
6.5k
RustからX Window Systemを触る
garasubo
0
520
Rustで始める自作組込みOS
garasubo
1
3.2k
クラウド向けOS(?)Unikernelとは何か
garasubo
0
1.7k
論文紹介:KVM/ARM: The Design and Implementation of the Linux ARM Hypervisor
garasubo
0
480
Other Decks in Programming
See All in Programming
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.7k
Elm 0.19.0 Changes
bkuhlmann
0
490
Java 22 Overview
kishida
1
190
Node.js v22 で変わること
yosuke_furukawa
PRO
10
3.5k
Ruby Pattern Matching
bkuhlmann
0
930
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
310
SIMD Parallel Programming with the Vector API
josepaumard
0
200
Tailwind CSSを本気でカスタマイズする方法
fsubal
14
5.3k
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.1k
Goのエラースタックトレースの歴史と今後
sonatard
9
1.6k
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.2k
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
190
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
132
6.3k
How to Ace a Technical Interview
jacobian
272
22k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
For a Future-Friendly Web
brad_frost
172
9k
Six Lessons from altMBA
skipperchong
21
3k
How GitHub (no longer) Works
holman
304
140k
The Language of Interfaces
destraynor
151
23k
Building Flexible Design Systems
yeseniaperezcruz
319
37k
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
121
39k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
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位内のチームがもっと増えるといいなあ