Cells ADR 001: Cloudflare Workers を用いたルーティング技術
背景
https://gitlab.com/groups/gitlab-org/-/epics/11002 において、最初に 複数のオプション をブレインストーミングし、上位 2 つの技術である Cloudflare Worker と Istio を調査しました。
私たちは Cloudflare Worker の PoC を支持し、複数のルーティングルールを持つように Cell 1.0 proposal で PoC を拡張しました。これらの PoC は、https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142397 で承認された routing service blueprint の検証に役立ち、また request buffering と routes learning を却下するに至りました。
決定
承認された routing service blueprint に従い、JavaScript/TypeScript で書かれた Cloudflare Workers を使用してリクエストを正しい cell にルーティングします。
Cloudflare Workers は、優先度の低い要件である self-managed を除き、私たちの requirements をすべて満たします。
Cloudflare Workers の詳細な分析は https://gitlab.com/gitlab-org/gitlab/-/issues/433471#results で読むことができます。
結果
- すべての self-managed 顧客をサポートしないことを承知の上で技術スタックを選択することになります。
- Cloudflare へのベンダーロックインがより強くなりますが、私たちはすでに彼らに大きく依存しています。
- GCP の外、新しいプラットフォーム上でコンピュートを実行することになりますが、私たちはすでに Cloudflare を使用しています。
- 決定が変わった場合に Routing Service を書き直す必要があるかもしれません。 Routing Service は非常に小さくシンプル(最大 1000 行のコード)になると見込まれているため、これは大きなリスクではないと考えています。
代替案
- Istio を検討しましたが、適切ではないと結論づけました。
- Request Buffering を検討しました。
- Routes Learning を検討しました。
- Cloudflare Workers に対して WASM を使用することは、誤った選択です: https://blog.cloudflare.com/webassembly-on-cloudflare-workers/#whentousewebassembly
