💬

Direct VPC egress と Severless VPC Access のパフォーマンスを簡単に比較してみた

2023/08/18に公開

はじめに

こんにちは。クラウドエース株式会社で SRE をしている間瀬です。

今回は 2023年8月14日 に Preview となった Direct VPC egress for Cloud Run のパフォーマンスについて従来の Severless VPC Access と違いがあるのか比較したいと思います。
Direct VPC egress for Cloud Run については当社から別の記事にて説明しているので参照してください。

https://zenn.dev/cloud_ace/articles/cloudrun-direct-vpc-egress-preview

モチベーションは若干の Severless VPC Access の扱いづらさから

Cloud Run を当社にて採用する場合、Severless VPC Access を経由してプライベートに Firestore や Pub/Sub などの Google Cloud サービスと連携するというような構成とするケースが多いです。
その際に Severless VPC Access がパフォーマンスのネックになることが多く、インスタンス台数のチューニングを行っています。
もちろんインスタンス台数を確保することでパフォーマンスのネックは解消されますが、チューニングの手間や Severless VPC Access は一度スケールアウトすると自動でスケールインしない点、インスタンスの起動時間に対してコストがかかる点に扱いづらさを感じていました。
serverless

Direct VPC egress for Cloud Run はパフォーマンスを確保しつつ、上記の課題を解決してくれそうなので、今回はパフォーマンスにフォーカスを当てて検証してみたいと思います。

検証構成と条件

Severless VPC Access と Direct VPC egress 以外の差異は無い状態で検証を行います。
環境の構成としては以下のとおりです。

environment

パフォーマンスに関連するパラメータは以下のとおりです。

Cloud Run

  • CPU Limits: 1000m 、Memory Limits: 512MiB
  • コンテナあたりの同時接続数: 80
  • 最大コンテナインスタンススケール数: 100

Severless VPC Access

  • 最小インスタンス数: 2
  • 最大インスタンス数: 10
  • マシンタイプ: e2-micro

Direct VPC egress

  • 10.0.2.0/24 のサブネットを割り当て

試験実施方法

  • k6 をインストールした GCE から Cloud Run に対して 6min 負荷をかけ続ける。
  • 上記構成別に同時実行ユーザ数を 10, 100, 300, 500 のパターンで実施する。
  • k6 から見たレイテンシ p(95) を比較する。

検証結果

横軸が同時実行ユーザ数、縦軸が ms 単位でのレイテンシなので、グラフが低いほど良いということになります。
result1

パッと見、Direct VPC egress の方がレイテンシが低く見えますが、500同時実行ユーザのシナリオにおいては Serverless VPC Access の方がレイテンシが低いという結果になりました。
300 同時実行ユーザのシナリオで Severless VPC Access のインスタンスがスケールアウトし、ボトルネックが解消された状態で 500 同時実行ユーザのシナリオを実施したためと考えられます。

Severless VPC Access が スケールアウトした状態で再度、100同時実行ユーザ、300同時実行ユーザのシナリオを再実施した結果は以下の通りです。
Severless VPC Access における 100 同時実行ユーザの結果が 300 同時実行ユーザのシナリオよりもレイテンシが高くなったのは誤差の範囲とすると、Direct VPC egress とのレイテンシの差はほとんどないように思えます。
result2

考察

Direct VPC egress は特にチューニングを行なわずともいずれのシナリオでも 200ms 以下の結果となり安定してパフォーマンスを確保できているように思えます。
これに対して、Serverless VPC Access は適切にスケールアウトさせればパフォーマンスを安定させられる結果となりました。

以上から、Direct VPC egress はチューニングなしでパフォーマンスを確保することができる点において優れていることが分かりました。
Cloud Run から VPC 内のリソースや Google Cloud サービスへ連携したい場合は積極的に Direct VPC egress を利用すると良いでしょう。

一方で Direct VPC egress はインターネットへ接続することができないため、外部のサービスへ Cloud NAT 経由でアクセスしたいようなケースでは Serverless VPC Access を利用する必要があることに気をつけてください。
また、現時点ではコンテナインスタンス数は 100 個までとのことなのでこれ以上コンテナインスタンスが必要となる場合においても Serverless VPC Access を利用することになると思います。

まとめと注意

今回は Direct VPC egress と Severless VPC Access のパフォーマンスを比較して Direct VPC egress が効果的に利用できるユースケースについて考察しました。
尚、本検証の結果を保証するものでないことと、Direct VPC egress は記事執筆時点で Preview であることに注意してください。記事を閲覧いただきありがとうございました。

Discussion