慣れ親しんだコントローラーとサービス
コントローラーがリクエストを受け、サービスが業務処理を担当します。Go の構造体とメソッドで、それぞれの役割を分けます。
コントローラーの書き方を見る
NestJS や Spring で使っていたコントローラーとサービスの構造で Go アプリを構成しましょう。コンストラクタ注入とインターセプターを使い、同じリソースで測定したスループットとメモリ使用量を確認できます。
go install github.com/NARUBROWN/spine-cli/cmd/spine@v0.1.4
spine new hello-spine --module example.com/hello-spine
cd hello-spine
go mod tidy
spine contract check
spine verify
spine dev
CLIでプロジェクトを生成し、検証してから実行します。詳しい手順は「最初のアプリ」を参照してください。
CLIで最初のアプリを作るNestJS/Express、Spring MVC、FastAPI/Uvicornのそれぞれに3 vCPUと3GiBのメモリを割り当てて比較しました。
Spine 内部ラボテスト / 2026.11.01
測定条件とすべての結果を見る163,559req/s
HTTPスループット
飽和負荷で測定した中央値
41.8MiB
観測メモリ使用量
毎秒2万リクエスト時の使用量
1.062ms
p99応答遅延
毎秒2万リクエスト時の遅延
高いほど良い値です
1人のユーザーが毎秒1回リクエストを送るとすると
Spineなら、約69,582人分のリクエストをさらに処理できた計算です。
Spineなら、約44,616人分のリクエストをさらに処理できた計算です。
Spineなら、約113,386人分のリクエストをさらに処理できた計算です。
同時接続256での飽和スループットです。各実装の実際のスループットを比較しました。
毎秒のスループットの差を、1人あたり毎秒1回のリクエストとして人数に換算した例です。実際に対応できる人数は、リクエストの頻度やアプリの処理内容によって変わります。