Slide 1

Slide 1 text

Cloudflare Workflowsを 使い倒したい 社内LT 2025/1/31 @sugar235711

Slide 2

Slide 2 text

2 sugar cat(@sugar235711) 仕事: SRE(オブザーバビリティ、インフラ構築) 興味: セキュリティ、パフォーマンスチューニング @sugar235711 @sugar-cat7

Slide 3

Slide 3 text

3 世界中のエッジネットワーク(DC)で動くサーバーレスJavaScriptプラット フォーム ・Service Worker 風の API をサーバーサイドに持ち込んだ仕組み ・Chrome V8のIsolateを利用し実行環境の隔離を実現 速習Cloudflare Workers How Workers works https://developers.cloudflare.com/workers/reference/how-workers-works/

Slide 4

Slide 4 text

4 分散型のオブジェクトストレージ Cloudflare Workers 上のメモリ状態を永続化する機能を持つ (Workers KVとは異なり強整合を保証) 速習Durable Objects Zero-latency SQLite storage in every Durable Object https://blog.cloudflare.com/sqlite-in-durable-objects/

Slide 5

Slide 5 text

5 2024年4月のCloudflare Developer Weekで発表されたCloudflare Worker上で実行されるワークフロー機能(現在Public beta) 概要 Cloudflare Workflows Data Anywhere with Pipelines, Event Notifications, and Workflows https://blog.cloudflare.com/data-anywhere-events-pipelines-durable-execution-workflows/#durable-execution

Slide 6

Slide 6 text

6 従来のWorkersやQueueのみでは実装難度が高かったマルチステップでの 耐久性の問題を克服 ・ステップごとに 自動的にリトライを行い回復性を持たせたい ・独立したステップごとに依存関係を持たせ、実行順序を制御したい ・ステップごとに状態を永続し、冪等性を持たせでワークフローを再開し たい...etc 概要 Cloudflare Workflows ※厳密には全く別物だが、AWSのLambdaとStepFunctionsでステートマシンを組むイメージ に近い(あくまでイメージ)

Slide 7

Slide 7 text

7 マルチステップの実行状態の保持のためにDurable Objects+SQLiteが使 用されている 仕組み(簡易版) Cloudflare Workflows Build durable applications on Cloudflare Workers: you write the Workflows, we take care of the rest https://blog.cloudflare.com/building-workflows-durable-execution-on-workers/#durability

Slide 8

Slide 8 text

8 マルチステップの実行状態の保持のためにDurable Objects+SQLiteが使 用されている 仕組み(簡易版) Cloudflare Workflows Build durable applications on Cloudflare Workers: you write the Workflows, we take care of the rest https://blog.cloudflare.com/building-workflows-durable-execution-on-workers/#durability ワークフローが失敗すると DOのSQLiteに対してステップの実行 状態が記録される

Slide 9

Slide 9 text

9 マルチステップの実行状態の保持のためにDurable Objects+SQLiteが使 用されている 仕組み(簡易版) Cloudflare Workflows Build durable applications on Cloudflare Workers: you write the Workflows, we take care of the rest https://blog.cloudflare.com/building-workflows-durable-execution-on-workers/#durability 同じインスタンス ID(ワークフローの実行単位 )を指定し再度実行 すると前回成功したステップはキャッシュされている

Slide 10

Slide 10 text

10 マルチステップの実行状態の保持のためにDurable Objects+SQLiteが使 用されている 仕組み(簡易版) Cloudflare Workflows Build durable applications on Cloudflare Workers: you write the Workflows, we take care of the rest https://blog.cloudflare.com/building-workflows-durable-execution-on-workers/#durability 冪等性を保ったままワークフローの特定のステップの処理を再開 できる

Slide 11

Slide 11 text

11 ・ステップの実行順序制御 ・バックオフを指定したリトライ ・Cloudflareの各種リソースをBinding …etc Workflowsできること Cloudflare Workflows

Slide 12

Slide 12 text

12 ・ステップの実行順序制御 ・バックオフを指定したリトライ ・Cloudflareの各種リソースをBinding …etc Workflowsできること Cloudflare Workflows stepの実行結果 (stateは次のstepに引き継げる )

Slide 13

Slide 13 text

13 ・ステップの実行順序制御 ・バックオフを指定したリトライ ・Cloudflareの各種リソースをBinding …etc Workflowsできること Cloudflare Workflows リトライ、タイムアウトを柔軟に設定可能

Slide 14

Slide 14 text

14 ・ステップの実行順序制御 ・バックオフを指定したリトライ ・Cloudflareの各種リソースをBinding …etc Workflowsできること Cloudflare Workflows Binding経由でCloudflareのリソースを扱える

Slide 15

Slide 15 text

15 ワークフロー、各ステップごとの詳細な情報を確認可能 Workflows実行結果(例) Cloudflare Workflows

Slide 16

Slide 16 text

16 脱線: Bindingsについて Cloudflare Workflows Cloudflare Workersから他のCloudflarのリソース(D1, Queue… etc)へ のアクセスはBinding経由で行うことができる wrangler.tomlに設定を記載するのみで、同一ゾーンであれば認証等の設 定なし環境変数経由でアクセスが可能(Cloudflare 内部のネットワークを 通るので公衆インターネット網は通らない)

Slide 17

Slide 17 text

17 脱線: Service Bindingsについて Cloudflare Workflows Workersの別のWorkersの呼び出しの際に使用できるService Bindingsと いう仕組みがある RPC機能を使用することで実体としてはリモートのWorkersにアクセスし ているが、シリアライズ等不要でローカルに定義された関数と同等に扱う ことができる(!?) Introducing Services: Build Composable, Distributed Applications on Cloudflare Workers https://blog.cloudflare.com/introducing-worker-services/

Slide 18

Slide 18 text

18 Embeddingのプロセスをワークフロー化 非同期I/Oが多いためリトライ制御や耐久性を持たせた実行をできるのが嬉しい ユースケース①(公式) Cloudflare Workflows Data Anywhere with Pipelines, Event Notifications, and Workflows https://blog.cloudflare.com/data-anywhere-events-pipelines-durable-execution-workflows/#durable-execution

Slide 19

Slide 19 text

19 個人開発しているアプリ内でCloudflare WorkerflowsとCron Triggerを 利用しようとしている(鋭意リプレイス中) ・Youtube/Twitch/ツイキャス/(Niconico/Bilibili)等からの定期的な動 画、配信者情報の取得 ・動画情報の翻訳 ・Discordチャンネルに対しての一斉配信 …etc ユースケース②(動画情報取得/翻訳タスク/Discordへ配信) Cloudflare Workflows

Slide 20

Slide 20 text

20 すぽじゅーる:https://www.vspo-schedule.com ぶいすぽっ! (VTuberグループ)の配信予定を確認できるサイト &Bot 個人開発しているサイト

Slide 21

Slide 21 text

21 全体構成 サーバーサイドをCloudflareStackに (鋭意リプレイス中) ユースケース②(動画情報取得/翻訳タスク/Discordへ配信) Cloudflare Workflows

Slide 22

Slide 22 text

22 全体構成 サーバーサイドを CloudflareStackに ユースケース②(動画情報取得/翻訳タスク/Discordへ配信) Cloudflare Workflows バックグラウンドの Jobを全てWorkflows経由に リトライ制御をしたい独立した非同期 I/Oが多いので Promise.allSettledで複数 ステップを実行

Slide 23

Slide 23 text

23 全体構成 サーバーサイドを CloudflareStackに ユースケース②(動画情報取得/翻訳タスク/Discordへ配信) Cloudflare Workflows Workflowから利用する内部処理は Service Bindings RPCを利用し Internal Worker経由に集約

Slide 24

Slide 24 text

24 全体構成 サーバーサイドを CloudflareStackに ユースケース②(動画情報取得/翻訳タスク/Discordへ配信) Cloudflare Workflows Internal WorkerのRead/Writeのオペレーションは分離 WriteはQueueを通してバッファリングし書き込み用の WorkerからDBへ 書き込む

Slide 25

Slide 25 text

25 Cloudflare Workflowsを利用してワークフローの処理を改善しよう! まとめ