はじめに
こんにちは、京セラコミュニケーションシステム 福留(@kccs_kazuo_fukudome)です。
先日、Cloud Run の新機能 CPU boost が発表されました。
参考:https://cloud.google.com/blog/ja/products/serverless/announcing-startup-cpu-boost-for-cloud-run--cloud-functions
Cloud Functions、Cloud Run で CPU boost 機能を利用すると、コールドスタートからの起動が早くなる、とくに Java アプリケーションでの効果が高いという説明でした。今回は Spring Boot アプリケーションで、簡単な REST API のアプリケーションのコンテナを作成し、CPU boost を利用した時と利用しない時で、どのくらいレスポンスタイムに差が出るのかを検証してみました。
本記事は 2022 年 11 月ごろに作成しております。
Google Cloud の機能を利用した場合は、利用料が発生します。
この記事の対象者
- Web アプリケーションでバックエンド処理に Java を利用している人
- Cloud Run で Java を利用したアプリケーションを作ってみたい人
- Cloud Run の機能に興味がある人
Spring Boot アプリケーションの作成
今回は、Java + Spring Framework で、以下のようなメッセージのみ返却する REST API アプリケーションを作成しました。この REST API アプリケーションを Cloud Run へデプロイし、レスポンスタイムを計りました。Spring Boot を利用した Java アプリケーションの Cloud Run へのデプロイ方法については、参考となる HP が色々とありますので、そちらを見て頂ければと思います。
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String helloResponse() throws Exception {
return "Hello World!! (GET METHOD)";
}
}
CPU boost 機能なしの結果
作成した Cloud Run が、コールドスタートになるようにリクエストタイミングを調整し、レスポンスタイムを 3 回計りました。結果は、次の通りで、レスポンスタイムの平均は、11.22 秒となりました。
CPU boost 機能ありの結果
次に、CPU boost 機能を使って、レスポンスタイムを計ります。CPU boost 機能の設定も簡単で、Cloud Run の設定画面で、次のオプションにチェックを入れるだけ。非常に簡単です。
この状態で、CPU boost なしと同じ環境、タイミングでレスポンスタイムを計りました。結果は、次の通りで、レスポンスタイム平均は、5.53 秒となりました。
料金について
CPU boost 機能を使うと、起動時に CPU の割り当てが 1 ~ 4 では 2 倍に、6 だと 8 になり、その起動時間に応じて課金が発生するようです。
参考:https://cloud.google.com/run/docs/configuring/cpu?&_ga=2.48985313.-635310204.1642555300#startup-boost
今回のような REST API アプリケーションだと、起動時間は 約 0.2 秒でした。アプリケーションの規模や利用するライブラリの数にもよりますが、CPU boost を使用した料金は、使用しない場合と、ほぼ変わらないと思います。
まとめ
Spring Boot アプリケーションで、CPU boost を利用すると、レスポンスタイムが、約 49% 改善しました。CPU boost を利用しても、約 5 秒ほどかかるので、高いレスポンスタイムが要求されるシステムでは、もう少しのスピード改善が必用かもしれません。ですが、レスポンスタイムがそれほど必要でないシステムでは、十分な結果だと思います。Java で作成したアプリケーションがあるのであれば、リソースの再利用もできるため、CPU boost を利用したシステム構築を検討してみても良いかと思います。