🧊

CloudflareのPlatform Weekの発表まとめ

Platform Week - The Cloudflare Blog

この中から、個人的に気になったものたちをさっくりまとめ。つまりWorkersとかPagesとかに関連するものが多く、それ以外のStreamingとかWeb3系はスルーしてる。

The next chapter for Cloudflare Workers: open source

The next chapter for Cloudflare Workers: open source

コードとして公開されたとして、誰しもが簡単に扱えるものではないよなーとも思いつつ、各エッジランタイムの差分が減るといいですね。

10 things I love about Wrangler v2.0

10 things I love about Wrangler v2.0

  • CLI`wrangler`のメンテナより、`v2`のリリース記念記事
  • いくつかピックアップすると、
  • 4. `miniflare`が内包されたよ
    • `--local`フラグだけでローカルで開発できるよ
    • まぁそのために`wrangler`をRustからTypeScriptで書き直したようなもんやし
  • 8. バンドラ同梱になったよ

For CFWとしての`wrangler`は元からそんなに不満なかったので、いまだβなFor CFPとしての`wrangler pages`コマンドもこの勢いでいい感じにしてほし〜。

A Community Group for Web-interoperable JavaScript runtimes

A Community Group for Web-interoperable JavaScript runtimes

さすが御大やで!

Introducing Direct Uploads for Cloudflare Pages

Introducing Direct Uploads for Cloudflare Pages

  • Cloudflare Pagesが、Gitリポジトリ連携以外でも使えるようになったよ
  • `wrangler page publish`コマンドでもできるし
    • これによって、CIからデプロイしたりもできる
  • GUIからドラッグドロップもできる
    • Netlifyみたいに手軽に使える

これはいい改善やと思うし、Netlify並に敷居下がった感あるやね。

A new era for Cloudflare Pages builds

A new era for Cloudflare Pages builds

  • Cloudflare Pagesのビルドプロセスがアップデートされたよ
  • ビルド自体の高速化
    • 今まではびっくりするくらい遅かった(数ページの静的サイトが3分とか)けど、それが3秒くらいに
  • ログがストリームで見れるようになった
    • ビルド失敗して全部終わったことになってからエラー表示ではなく
  • プレビュー対象のブランチが指定できるようになった
  • CI skipができるように
    • 以下のいずれかを含めたメッセージでコミットすればよい
    • `[CISkip], [CI-Skip], [Skip CI], [Skip-CI] or [CF-Pages-Skip]`
  • これからの改善予定
    • インクリメンタルビルド(ご要望にお応えして)
    • 実行環境のアップデート(2021のままでNodeとかも古いので)
    • エラーメッセージの詳細化

自分で有効化しなくても速くなっていい感じ。個人的にはスキップできるのがうれしい。

Workers visibility: announcing Logpush for Worker’s Trace Events

Workers visibility: announcing Logpush for Worker’s Trace Events

ただし、エンタープライズプランからしか使えな〜い・・。

Service Bindings are generally available, with efficient pricing

Service Bindings are generally available, with efficient pricing

  • Worker同士をシームレスに連携できるアレが待望のGA
  • 通称、Service Bindings
  • サービスとして登録したWorker間の通信はノーコスト

While the interface among Service bindings is HTTP, the networking is not. Unlike the typical microservice architecture, where services communicate over a network and can suffer from latency or interruption, Service bindings are a zero-cost abstraction. When one Worker invokes another, there is no network delay and the request is executed immediately.
https://developers.cloudflare.com/workers/platform/bindings/about-service-bindings

ついに待望のやつが来てくれました!

Announcing Workers for Platforms: making every application on the Internet more programmable

Announcing Workers for Platforms: making every application on the Internet more programmable

  • 地味に説明が難しいやつ
  • CFWのテックリード氏の説明がわかりやすいのでそれを
    • https://twitter.com/KentonVarda/status/1524033314448891905
    • SaaS事業者の抱える課題として、自分たちのAPI(webhookとか)を使ってほしい気持ちがある
    • ただしそのためには、利用者がコードの実行環境を用意して、APIキーを管理して・・みたいな手間が必要
    • これが地味に面倒で、敷居が高い(いやほんどに面倒よ)
    • そこで、CFWと連携(間借りみたいな)すれば、コードだけアップロードすればいいようにできるよ
    • もちろん利用者はCFWのあれこれを意識する必要はない
  • 利用してみたい事業者はフォームから登録してね

どんどん便利な世の中になってほしいですね。

Durable Objects Alarms — a wake-up call for your applications

Durable Objects Alarms — a wake-up call for your applications

  • DOにいわゆるアラーム機能が追加された
  • DO内で`setAlarm(scheduledTime)`すると、その時がきたら`alarm()`ハンドラが呼ばれるようになる
  • これによって、Workerから呼びにいかなくても、DOが抱える値にアクセスできるように
    • DOの値を定期的に永続化するとか、集計してどっかに送るとか、レポートするとか
  • Workerでは3つしか設定できないCron Triggersの代わりにもなるとのこと

The alarm() handler has guaranteed at-least-once execution and will be retried upon failure using exponential backoff, starting at 2 seconds delay for up to 6 retries.
https://developers.cloudflare.com/workers/runtime-apis/durable-objects/#alarm-handler-method

やはりこれを期にDO再入門するかな〜。

Introducing Cache Reserve: massively extending Cloudflare’s cache

Introducing Cache Reserve: massively extending Cloudflare’s cache

  • Cache Reserveっていう機能が追加されて、ダッシュボードでONにするだけで使えるように
  • オリジンとCDNエッジキャッシュの"間"に新たに配置されるキャッシュレイヤー
    • もともとあるCDNのキャッシュは、各エッジロケーションごとでLRUになってる
    • なので人気のあるサイトのコンテンツは高キャッシュヒットになるけど、そうでないものはevictされがち
    • そうなるともちろんオリジンにアクセスが来るので、CDN使ってる意義とは・・ってなる
  • そこで、自分でCache Reserveを置くことでそれを回避できる
    • もちろんエッジにキャッシュがあればそれが返る
  • Cache ReserveはR2の上に実装されてる

なるほどそういう需要もあるのだなあ。

A New Hope for Object Storage: R2 enters open beta

A New Hope for Object Storage: R2 enters open beta

  • S3互換のR2がついにオープンβに
  • Workerからも呼べるし、署名付きURLによってRESTでも呼べる
  • S3互換なので、世のS3向けクライアント実装でもURLを変えれば動く
  • β中の制約としては、
    • バケットごとに、1,000 GET/秒、100 PUT/秒の呼び出し制限
    • 合計で約5TB、ファイルあたり5GBまでのサイズ制限
  • 無料で使えるのは、
    • 10GB/月
    • 1,000,000/月(put, list, write, delete)
    • 10,000,000/月(read)
  • 今後の改善予定
    • TTLのサポート(自動で消せる)
    • パブリックにできる設定
    • etc...

いやほんと全方位的やね・・・。

Announcing D1: our first SQL database

Announcing D1: our first SQL database

  • SQLite for Workers!
    • R2ときてD2ではなく、D1
  • `wrangler d1 execute`でローカルからSQLも流せる
  • WorkerからはBindingsとして登録して使う
    • `MY_DB.get("SELECT * FROM products")`みたいに書く
    • `MY_DB.exec(["UPDATE users SET ..."])`みたいにバッチも
  • DBの本体としては1つだが、同期したREAD用のレプリカに対してアクセスするイメージらしい
    • これ、つまりKVと一緒でラグありってこと・・?
    • かと思えば、本体インスタンス横のWorkerに処理を委譲できる的なことも書いてあるし・・?
  • 定期的にR2へスナップショットをバックアップしてくれる
  • 1クリックで復元もできるので、本番データをローカルでデバッグするとかも容易い
  • βの招待は6月にも

噂はあれど、整合性まわりの詳細がわからんとなんともなので、続報に期待。

Introducing Workers Analytics Engine

Introducing Workers Analytics Engine

  • Workersにメトリクスを取る機能が追加
  • Bindingsとして`analytics_engine`を登録して使う
  • それをWorkerから呼んで書き込み
    • `MY_AE.writeDataPoint({ labels: ["Seattle", "USA", "pro_sensor_9000"], metrics: [25, 0.5] });`
    • `labels: string`で`metrics: number`とのこと
    • ちなみにこれはNon-blockingなので`waitUntil()`しなくていいらしい
  • データの取得はSQLAPIかGraphQLのAPI
    • ダッシュボードでもいい感じに見れるようにしていく
  • パフォーマンスが特徴で

クローズドβではあるけど、これは気になるやつ。

Introducing Pages Plugins

Introducing Pages Plugins

別に自分で書けば今までもできたことを、あえてこういう形で提供するように表現するあたり、Pagesの利用者層を拡大しようとしてる感じかな?

Introducing Custom Domains for Workers

Introducing Custom Domains for Workers

オープンβ!

Send email using Workers with MailChannels

Send email using Workers with MailChannels

  • MailChannels社とパートナーシップを結んで、CFWからEメール送信できるようにしたよ
  • 制約があるとすれば、CloudflareのIPからしか送信できないようにしてあること
    • つまり実際のWorkerでしか送信できない
    • ローカルからは送信できない
  • より簡単に使うために、先日発表したPagesのプラグインにもラインナップしてあるよ

地味に嬉しいやつ。ただ、送信ログとかバウンスとかそういうの見たい場合はどうすればいいんやろう・・・?

Part 1: Rethinking Cache Purge, Fast and Scalable Global Cache Invalidation

Part 1: Rethinking Cache Purge, Fast and Scalable Global Cache Invalidation

  • CDNのキャッシュ管理とそのパージについて
  • 現状の構成では、中央のDCがコアとなり、世界中のDCに対してパージの司令を送るイメージ
  • この構成を変更して、もっと速く効率よくキャッシュをパージできるようにしていきたい
    • という進捗を定期的にお知らせしていくよ
  • その名も、Corelessパージ
    • 中央のDCがないということ
    • 代わりに、WorkerとDOを使って、それぞれのDCでコアの代わりをする

自分たちのプロダクトを使い倒す姿勢、すごい良いなって思った。

Network performance update: Platform Week

Network performance update: Platform Week

  • なんたらWeek恒例のパフォーマンス計測の記事
    • 前回よりも計測対象のネットワークを増やしたり、指標のアップデートなどを行った
  • Catchpointを使用
  • 3000ネットワークでTCPコネクションの速さを計測
    • インドとロシアはGoogle
    • 欧米とアフリカではCloudflare
    • 中国はCloudfront
  • エッジランタイムのパフォーマンスを計測
    • 対戦相手は例によってFastly Compute@Edge
    • 基本的にCloudflareが速い

またFastlyからのアンサーソングが出るんかな?

まとめ

俺得だった発表TOP5はこんな感じ。

  • Announcing D1: our first SQL database
  • Service Bindings are generally available, with efficient pricing
  • Introducing Workers Analytics Engine
  • A new era for Cloudflare Pages builds
  • A New Hope for Object Storage: R2 enters open beta

引き続きやっていき。