一般的なHTTPサービスであれば、GoもRustも十分に対応可能です。選択を間違えてもプロジェクトが頓挫するわけではありませんが、適切な選択をすれば労力を大幅に節約できます。以下は検討すべきポイントです。
新入社員の業務への適応速度
Goは明らかに優れています。この言語は意図的に機能を最小限に抑えており、他の言語を知っている人なら、数日でGoのコードを読み解き、数週間で記述できるようになります。一方、Rustでは、所有権やライフサイクルに慣れるまでに数ヶ月かかります。
頻繁にメンバーが入れ替わるチームや、多くの人が手直しに訪れるプロジェクトの場合、これが最も重要な要素となります。
テール遅延
Goにはガベージコレクション機能があります。最新のガベージコレクションは非常に優れており、停止時間は通常1ミリ秒未満ですが、それでもガベージコレクションは発生し、メモリ使用量が増えるとその頻度も高まります。
Rustには停止点がありません。「リクエストの99.9%が閾値Xを下回らなければならない」という要件があり、その閾値が厳しい場合、この差は決定的なものとなります。一方、注目する指標が中央値である場合は、この差はほぼ無視できる程度です。
サーバーのメモリとコスト
Rustのサービスは、ガベージコレクション用のバッファが不要なため、通常、RAMの使用量が大幅に少なくなります。サーバーが数台程度の規模では、この差はコストに見合うものではありません。しかし、数千台規模になると、これは大きなメリットとなります。
簡潔な提案
- 業務サービス、内部API、運用ツール — Goは、ほぼ常に正しい
- ホットパス上のコンポーネント、プロキシ、大規模データストリームの処理 — Rustは努力に見合う成果をもたらす
- チーム内で両方を熟知している者はいない — まずはGo、そして想像上の限界ではなく、真の限界に直面した時にRust
Thảo luận