1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCI FunctionsのProvisioned Concurrencyを確認する

Last updated at Posted at 2023-08-14

はじめに

OCI Fuctionsの実行環境はコンテナです。
Functionsをキックすると、コンテナイメージがPullされてコンテナが起動し、コードが実行されますが、初回起動時にはこの実行環境の起動に時間がかかります。(コールドスタート)

これを回避するための機能としてProvisioned Concurrencyがあります。

Provisioned Concurrencyを活用することで、事前にコンテナを起動しておいて、初回起動時の遅延を少なくすることができます。(ホットスタート)

Provisioned Concurrencyなしの状態

今回はGoのサンプルアプリを使用して実行時間を比べます。
こちらと同じ手順でサンプルアプリをデプロイし、Functionsを実行します。

$ time fn invoke app01 hello-func01
{"message":"Hello World"}

real    0m24.168s
user    0m0.081s
sys     0m0.012s

実行時間は約24秒でした。
なお、2回目以降はコンテナが保持されているので、約3秒となります。コンテナは一定時間が経過すると削除されます。

$ time fn invoke app01 hello-func01
{"message":"Hello World"}

real    0m3.664s
user    0m0.073s
sys     0m0.015s

Provisioned Concurrencyありの状態

OCIコンソールから新しいアプリケーションを作成し、関数を作成します。
その際、使用するコンテナイメージは同じイメージを指定します。

スクリーンショット 2023-08-14 12.57.49.png

Functionsを実行します。

$ time fn invoke app02 hello-func02-pc
{"message":"Hello World"}

real    0m3.591s
user    0m0.076s
sys     0m0.010s

約3秒となり、Provisioned Concurrencyを活用したホットスタートの効果がわかります。

補足

実は、最初に実行したProvisioned Concurrency「なし」と同じコンテナが使われてるから早いのではないかと思ったので、念のためさらに別のアプリケーションを作成して、Provisioned Concurrency「なし」の状態でFunctionsを実行したところ、20秒以上かかりました。
これでProvisioned Concurrencyの効果が確認できたと思います。

$ time fn invoke app03 hello-func03
{"message":"Hello World"}

real    0m21.789s
user    0m0.077s
sys     0m0.009s
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?