Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL Server on Edge

GraphQL Server on Edge

Workers Teck Tolks #1

chimame

July 19, 2023
Tweet

More Decks by chimame

Other Decks in Programming

Transcript

  1. (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の管理者は誰? ◦ バックエンド? ◦ フロントエンド?
  2. (GraphQL) API Server 私の場合は、初手は大体Cloud Run • サーバレスアーキテクチャにしてインフラコストを 極限まで下げる • 最終的にデータがBigQueryに行くことが多いの

    で、Google Cloudは結局使うことになる • アプリケーションが最終的にコンテナで動けば、他 に移行もそこまで難しくない
  3. ※管理画面 ユースケース Cloudflare Workers Durable Objects Authentication Cloud Messaging Crashlytics

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

    etc 認証 画像データ (R2) Socket通信 GraphQL PUSH Node.js処理サーバ GraphQL Server その他サービス 現在
  5. ユースケース ライブラリの変遷 • Fastify • Apollo Server • Prisma •

    Pothos • GraphQL Yoga • Kysely (Prisma) • Pothos 2.0からWeb Standard APIで動作するように再構築されている。 そのためCloudflare Workersでも動作する。 Prismaは通常のモードでは Cloudflare Workersで動作しない。代替に別ライブラリを使用する必要があ る。自分の場合はPrismaのマイグレーション機能および Kyselyのデータベースの型生成として使用してい る。
  6. ユースケース 移行に際した注意点(デメリット) • Node.jsが必要な場合は別途サーバを用意する必要がある ◦ Cloud Runで構築した場合はリクエスト時間に影響しないようにする (非同期処理にする、起動時間を早くする etc) •

    TCPの接続はリクエスト処理している間だけ接続可能である ◦ waitUntilに接続するような処理があるとうまくいかない場合がある ◦ DataLoaderも動作しない場合がある
  7. 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