正直に言いましょう。サービスをRustに移行する話をするとき、私たちが皆思い描くものは同じです:液体のような稲妻のようなレイテンシ、崖から落ちるCPUグラフ、そして1台のサーバーが突然小国のトラフィックを捌く姿です。
Momentoは3年以上かけて、KotlinからRustへのサービス書き換えを行いました。彼らが期待していたのは生の速度でした。実際にもたらされたのは、エンジニアリングの精神衛生に対する大規模なアップグレードでした。
JVMをカニの絵文字に捨てたときに実際に起こることは次のとおりです。


1. コンパイラはあなたの攻撃的なペアプログラマーである

Kotlinでは、account_idとuser_idを入れ替えることができます。どちらも文字列だからです。IDEは気にしません。レビューアも見逃します。本番環境は午前2時に爆発します。
Rustでは、コンパイラはあなたを犯罪現場の容疑者のように扱います。カスタム型の宣言と参照の明示的な処理を強制することで、バグの全カテゴリがPull Requestに触れる前に蒸発します。

[ あなたの脳 ] -> 「この変数をちょっと共有するだけだよ...」
[ ボローチェッカー ] -> 「私の死体を越えてくれ。」

はい、学習曲線は垂直の壁のように見えます。しかし、ラップトップ上でコンパイラと戦うことは、本番環境でメモリリークと戦うよりも無限に優れています。


2. プロットツイスト:Rustは自動的に悪いコードを修正しない

Pythonで悪いアルゴリズムを書けば、それは遅いです。Rustで悪いアルゴリズムを書けば、それは安全に、並行して、美しく遅いです。
Momentoの最初のRust書き換えは、魔法のようにレイテンシを削減しませんでした。なぜなら、コードは依然として馬鹿げたことをしていたからです。たとえば、メトリクス用の動的文字列メモリをメインのリクエストパス内で繰り返し割り当てていました。
彼らは依然としてフレームグラフとCriterionを取り出して、貧弱なロック設計を修正し、ホットパスをプロファイリングする必要がありました。Rustは足を撃つのを止めてくれますが、コードを書いてはくれません。


3. 本当の強み:スループットとクラウド料金

レイテンシは即座に低下しませんでしたが、インスタンスのスループットは確かに急上昇しました。
Momentoは1インスタンスあたり20,000リクエスト/秒から100,000リクエスト/秒を処理するようになりました。

従来のスケーリング:「もっとAWSインスタンスを投げろ!」
Rustのスケーリング:「サーバーの80%を削除してもアプリは問題ない。」

インフラ企業である場合、あの種のリソース効率は財務担当役員を喜びの涙で泣かせます。実際、彼らは後でパフォーマンスに敏感でないワークフローサービスにもRustを選びました。ただ明示的なコードと一貫性が気に入ったからです。


4. チームを解雇せずにRustを採用する方法

Momentoは初日からコアインフラ全体を書き換えませんでした。彼らは小さく始めました:

  1. 小さな社内CLIツールを構築しました。
  2. パフォーマンスクリティカルなホットスポットを1つ移行しました。
  3. 残りのチームがコンパイラエラーで泣くのを防ぐために、ライフタイムとasyncパターンをすでに理解している「Rustの達人」に大きく依存しました。

まとめ

Rustは怠惰なエンジニアリングを修正する魔法の性能エンジンではありません。それはエンジニアリングの安全ネットです。チームに、すべてが壊れそうになるという絶え間ない恐怖なしに、実験、リファクタリング、変更のプッシュを行う自信を与えます。