Slide 1

Slide 1 text

GraphQL Server on Edge Workers Tech Talks #1 2023.07.19

Slide 2

Slide 2 text

目次 ● (GraphQL) API Server 構築 ● サーバレスコンテナサービスの運用課題 ● Cloudflare Workersという選択肢 ● ユースケース ● まとめ

Slide 3

Slide 3 text

今日話すことの細かい実装はこちら

Slide 4

Slide 4 text

(GraphQL) API Server ● APIサーバはどこにどうやって建てますか? ○ Amazon Web Services(Fargate, App Runner, EKS) ○ Google Cloud(App Engine, Cloud Run, GKE) ○ Azure(Container Instances, Container Apps, AKS) ○ オンプレ ● Backend for frontend(BFF)の設計になるとAPI Serverの管理者は誰? ○ バックエンド? ○ フロントエンド?

Slide 5

Slide 5 text

(GraphQL) API Server 私の場合は、初手は大体Cloud Run ● サーバレスアーキテクチャにしてインフラコストを 極限まで下げる ● 最終的にデータがBigQueryに行くことが多いの で、Google Cloudは結局使うことになる ● アプリケーションが最終的にコンテナで動けば、他 に移行もそこまで難しくない

Slide 6

Slide 6 text

サーバレス(コンテナ)サービスの運用課題 Cloud Runに限らず、サーバレスも銀の弾丸ではない ● コンテナのデプロイまでの時間がかかる ● コールドスタートを短く抑えないといけない ● コンピュータリソースあたりの単価は高め

Slide 7

Slide 7 text

さて、どうしよう??🤔

Slide 8

Slide 8 text

Cloudflare Workersという選択肢 パブリッククラウドのサーバレスサービスと比較して異なるところ ● ビルドしたファイルをデプロイする ● V8エンジンをランタイムとして採用 ● 基本料金$5で、最低100万リクエストは処理できる

Slide 9

Slide 9 text

Cloudflare Workersという選択肢 パブリッククラウドのサーバレスサービスと比較して異なるところ ● ビルドしたファイルをデプロイする → コンテナを入れ替えるより高速にデプロイが可能 ● V8エンジンをランタイムとして採用 → V8 isolateを使用することで高速に起動できる ● 基本料金$5で、最低100万リクエストは処理できる → 計算リソースあたりの単価が非常に安価

Slide 10

Slide 10 text

Cloudflare Workersという選択肢 なんで今まで選択されてこなかった? ● Cloudflareにロックインする ● ランタイムがNode.jsではないのでNode.jsに依存する資産は使用できない ● Cloudflare WorkersからRDBMSに接続するにはhttpで接続するしかなかった

Slide 11

Slide 11 text

Cloudflare Workersという選択肢 なんで今まで選択されてこなかった? ● Cloudflareにロックインする ● ランタイムがNode.jsではないのでNode.jsに依存する資産は使用できない ● Cloudflare WorkersからRDBMSに接続するにはhttpで接続するしかなかった 許容すれば選択可 TCPでの接続が行えるようになった

Slide 12

Slide 12 text

※管理画面 ユースケース Cloudflare Workers Durable Objects Authentication Cloud Messaging Crashlytics etc 認証 画像データ Socket通信 GraphQL PUSH その他サービス サービス初期

Slide 13

Slide 13 text

※管理画面 ユースケース Cloudflare Workers Durable Objects Authentication Cloud Messaging Crashlytics etc 認証 画像データ (R2) Socket通信 GraphQL PUSH Node.js処理サーバ GraphQL Server その他サービス 現在

Slide 14

Slide 14 text

ユースケース ライブラリの変遷 ● Fastify ● Apollo Server ● Prisma ● Pothos ● GraphQL Yoga ● Kysely (Prisma) ● Pothos 2.0からWeb Standard APIで動作するように再構築されている。 そのためCloudflare Workersでも動作する。 Prismaは通常のモードでは Cloudflare Workersで動作しない。代替に別ライブラリを使用する必要があ る。自分の場合はPrismaのマイグレーション機能および Kyselyのデータベースの型生成として使用してい る。

Slide 15

Slide 15 text

ユースケース 移行した効果(メリット) ● コンテナのデプロイまでの時間がかかる → デプロイ時間が8分前後が1分未満に短縮 ● コールドスタートを短く抑えないといけない → 最大5秒前後が200ミリ秒程度まで高速化 ● コンピュータリソースあたりの単価は高め → 数万円/月のAPIサーバ費が数千円/月に低下(約1/10)

Slide 16

Slide 16 text

ユースケース 移行に際した注意点(デメリット) ● Node.jsが必要な場合は別途サーバを用意する必要がある ○ Cloud Runで構築した場合はリクエスト時間に影響しないようにする (非同期処理にする、起動時間を早くする etc) ● TCPの接続はリクエスト処理している間だけ接続可能である ○ waitUntilに接続するような処理があるとうまくいかない場合がある ○ DataLoaderも動作しない場合がある

Slide 17

Slide 17 text

まとめ ● Cloudflare WorkersでAPIサーバを構築する のは既に実用的な段階にある ○ オリジンの”味付け”ではなく、単体でサーバとして機 能する ● Cloudflareにロックインはするが、それに見 合ったメリットは十分にある

Slide 18

Slide 18 text

Thanks! ● name: chimame / rito ● job: Webエンジニア ● field: Cloudflare, GCP, AWS, Ruby, Node.js, TypeScript, React, Next.js, Remix, Docker etc ● company: Goens株式会社( https://about.goen-s.com ) ● twitter: @chimame_rt ● GitHub: chimame