🧊

Cloudflare Workersは、0コールドスタートかもしれないが、初回だけはなぜか遅い

前々から感じてはいたけど、誰も触れてない気がするのは、まあ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/