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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
garasubo
January 10, 2024
Programming
790
1
Share
RustでISUCONに勝つには
garasubo
January 10, 2024
More Decks by garasubo
See All by garasubo
Cancel Safetyとスレッドリーク
garasubo
1
720
Rustでの自作OSをやってきて
garasubo
0
1.2k
Armの仮想化支援機構を用いてハイパーバイザーを自作する
garasubo
3
7.7k
RustからX Window Systemを触る
garasubo
0
690
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
670
Other Decks in Programming
See All in Programming
Are We Really Coding 10× Faster with AI?
kohzas
0
200
GoogleCloudとterraform完全に理解した
terisuke
1
200
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
230
実践ハーネスエンジニアリング:ステアリングループを実例から読み解く / Practical Harness Engineering: Understanding Steering Loops Through Real-World Examples
nrslib
5
5.7k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
1
160
【ディップ|26年新卒研修資料】TDD実装演習
dip_tech
PRO
0
210
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
200
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
190
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
120
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
110
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
290
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
200
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
First, design no harm
axbom
PRO
2
1.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
560
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
810
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
700
Producing Creativity
orderedlist
PRO
348
40k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
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位内のチームがもっと増えるといいなあ