前々から感じてはいたけど、誰も触れてない気がするのは、まあ1/Nなんか問題にならないからってことなんやろうけど。
とりあえず備忘録として書いておく。
0コールドスタート
Eliminating cold starts with Cloudflare Workers https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/
FaaSでありながら0コールドスタート!と謳っているそのわけは、
- TLSのClientHelloがきたときにあっためはじめるので
- HTTPが飛んでくる頃にはもうホカホカですよ
ってことらしい。
コンテナベースのFaaSよりかはそもそも速いけど、それをさらに短縮することで実質は0!っていう。
しかし実際は
export default {
fetch: () => new Response("Hello"),
}
これだけのWorkerをwrangler deploy
して、それに対してautocannon
で計測してみる。
引数なしのデフォルトの状態で、3回に分けて実行してみて、これは上から順にその結果。
# 1回目
┌─────────┬──────┬──────┬───────┬───────┬──────────┬─────────┬────────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼───────┼──────────┼─────────┼────────┤
│ Latency │ 7 ms │ 9 ms │ 18 ms │ 22 ms │ 10.18 ms │ 4.74 ms │ 290 ms │
└─────────┴──────┴──────┴───────┴───────┴──────────┴─────────┴────────┘
# 2回目
┌─────────┬──────┬──────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 7 ms │ 9 ms │ 17 ms │ 22 ms │ 10.15 ms │ 3.47 ms │ 86 ms │
└─────────┴──────┴──────┴───────┴───────┴──────────┴─────────┴───────┘
# 3回目
┌─────────┬──────┬──────┬───────┬───────┬─────────┬────────┬───────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼───────┼─────────┼────────┼───────┤
│ Latency │ 7 ms │ 9 ms │ 17 ms │ 20 ms │ 9.99 ms │ 3.4 ms │ 83 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴────────┴───────┘
1回目のMax: 290ms
ってなんなんっていう。
autocannon
を持ち出さなくても、curl
でやっても初回だけは微妙に遅く、少なくとも初回以降でそれより遅くなることはなかった。
- アカウント(課金プラン)の問題なのか
workers.dev
ドメインの問題なのか- 他になんか設定があるのか
- 設備側の問題なのか
さっぱりわからないので、誰か説明できる人いたら教えてください。
ちなみに、以前調べたときは、KVにも似たような初回ディレイがあった。
Cloudflare KV vs R2 参照系パフォーマンス比較 | Memory ice cubes https://leaysgur.github.io/posts/2023/09/05/095313/