Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RustでISUCONに勝つには
Search
garasubo
January 10, 2024
Programming
830
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RustでISUCONに勝つには
garasubo
January 10, 2024
More Decks by garasubo
See All by garasubo
Cancel Safetyとスレッドリーク
garasubo
1
780
Rustでの自作OSをやってきて
garasubo
0
1.3k
Armの仮想化支援機構を用いてハイパーバイザーを自作する
garasubo
3
8.1k
RustからX Window Systemを触る
garasubo
0
700
Rustで始める自作組込みOS
garasubo
1
3.6k
クラウド向けOS(?)Unikernelとは何か
garasubo
0
1.8k
論文紹介:KVM/ARM: The Design and Implementation of the Linux ARM Hypervisor
garasubo
0
690
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
5
2.4k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
アクセシビリティから考える情報設計
high_g_engineer
0
330
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
業務時間外もAIに働いてもらう話
colorful12
3
10k
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Building an army of robots
kneath
306
46k
A Tale of Four Properties
chriscoyier
163
24k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Documentation Writing (for coders)
carmenintech
77
5.5k
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Un-Boring Meetings
codingconduct
0
410
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Tell your own story through comics
letsgokoyo
1
1.1k
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位内のチームがもっと増えるといいなあ