Workers Teck Tolks #1
GraphQL Server on EdgeWorkers Tech Talks #12023.07.19
View Slide
目次● (GraphQL) API Server 構築● サーバレスコンテナサービスの運用課題● Cloudflare Workersという選択肢● ユースケース● まとめ
今日話すことの細かい実装はこちら
(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)の設計になるとAPIServerの管理者は誰?○ バックエンド?○ フロントエンド?
(GraphQL) API Server私の場合は、初手は大体Cloud Run● サーバレスアーキテクチャにしてインフラコストを極限まで下げる● 最終的にデータがBigQueryに行くことが多いので、Google Cloudは結局使うことになる● アプリケーションが最終的にコンテナで動けば、他に移行もそこまで難しくない
サーバレス(コンテナ)サービスの運用課題Cloud Runに限らず、サーバレスも銀の弾丸ではない● コンテナのデプロイまでの時間がかかる● コールドスタートを短く抑えないといけない● コンピュータリソースあたりの単価は高め
さて、どうしよう??🤔
Cloudflare Workersという選択肢パブリッククラウドのサーバレスサービスと比較して異なるところ● ビルドしたファイルをデプロイする● V8エンジンをランタイムとして採用● 基本料金$5で、最低100万リクエストは処理できる
Cloudflare Workersという選択肢パブリッククラウドのサーバレスサービスと比較して異なるところ● ビルドしたファイルをデプロイする→ コンテナを入れ替えるより高速にデプロイが可能● V8エンジンをランタイムとして採用→ V8 isolateを使用することで高速に起動できる● 基本料金$5で、最低100万リクエストは処理できる→ 計算リソースあたりの単価が非常に安価
Cloudflare Workersという選択肢なんで今まで選択されてこなかった?● Cloudflareにロックインする● ランタイムがNode.jsではないのでNode.jsに依存する資産は使用できない● Cloudflare WorkersからRDBMSに接続するにはhttpで接続するしかなかった
Cloudflare Workersという選択肢なんで今まで選択されてこなかった?● Cloudflareにロックインする● ランタイムがNode.jsではないのでNode.jsに依存する資産は使用できない● Cloudflare WorkersからRDBMSに接続するにはhttpで接続するしかなかった許容すれば選択可TCPでの接続が行えるようになった
※管理画面ユースケースCloudflare WorkersDurable ObjectsAuthenticationCloud MessagingCrashlytics etc認証画像データSocket通信GraphQLPUSHその他サービスサービス初期
※管理画面ユースケースCloudflare WorkersDurable ObjectsAuthenticationCloud MessagingCrashlytics etc認証画像データ(R2)Socket通信GraphQLPUSHNode.js処理サーバGraphQL Serverその他サービス現在
ユースケースライブラリの変遷● Fastify● Apollo Server● Prisma● Pothos● GraphQL Yoga● Kysely (Prisma)● Pothos2.0からWeb Standard APIで動作するように再構築されている。そのためCloudflare Workersでも動作する。Prismaは通常のモードでは Cloudflare Workersで動作しない。代替に別ライブラリを使用する必要がある。自分の場合はPrismaのマイグレーション機能および Kyselyのデータベースの型生成として使用している。
ユースケース移行した効果(メリット)● コンテナのデプロイまでの時間がかかる→ デプロイ時間が8分前後が1分未満に短縮● コールドスタートを短く抑えないといけない→ 最大5秒前後が200ミリ秒程度まで高速化● コンピュータリソースあたりの単価は高め→ 数万円/月のAPIサーバ費が数千円/月に低下(約1/10)
ユースケース移行に際した注意点(デメリット)● Node.jsが必要な場合は別途サーバを用意する必要がある○ Cloud Runで構築した場合はリクエスト時間に影響しないようにする(非同期処理にする、起動時間を早くする etc)● TCPの接続はリクエスト処理している間だけ接続可能である○ waitUntilに接続するような処理があるとうまくいかない場合がある○ DataLoaderも動作しない場合がある
まとめ● Cloudflare WorkersでAPIサーバを構築するのは既に実用的な段階にある○ オリジンの”味付け”ではなく、単体でサーバとして機能する● Cloudflareにロックインはするが、それに見合ったメリットは十分にある
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