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
860
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
810
Rustでの自作OSをやってきて
garasubo
0
1.3k
Armの仮想化支援機構を用いてハイパーバイザーを自作する
garasubo
3
8.2k
RustからX Window Systemを触る
garasubo
0
710
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
700
Other Decks in Programming
See All in Programming
Modernizing iOS Apps
seyfoyun
0
130
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
130
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
180
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
140
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.6k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
390
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.2k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7.1k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.6k
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
220
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
11k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Visualization
eitanlees
153
17k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Raft: Consensus for Rubyists
vanstee
143
7.8k
Deep Space Network (abreviated)
tonyrice
0
390
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
360
The SEO identity crisis: Don't let AI make you average
varn
0
620
What's in a price? How to price your products and services
michaelherold
247
13k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
600
Chasing Engaging Ingredients in Design
codingconduct
0
380
Building Adaptive Systems
keathley
44
3.3k
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位内のチームがもっと増えるといいなあ