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

エンタメコミュニティを支える Google Cloud 基盤の裏側 ~Google Kuber...

エンタメコミュニティを支える Google Cloud 基盤の裏側 ~Google Kubernetes Engine / Spannerを添えて~

Google Cloud Next '24

Avatar for Ando Fumimasa

Ando Fumimasa

August 03, 2024
Tweet

More Decks by Ando Fumimasa

Other Decks in Programming

Transcript

  1. 010 Proprietary & Confidential コミュニティ機能 エンタメ IP 向けにファンコミュニティを立ち 上げられるサービス •

    ファン同士の交流 (SNS) • メディア (公式情報, CP) • 行動促進 (Mission/Incentive) • 商品販売 (デジタル/リアル)
  2. 011 Proprietary & Confidential Google Cloud Next Tokyo ’24 エンタメ体験

    IP コンテンツと先端テクノロジーを掛 け合わせた新しいファン体験 • NFT を活用したイベント • WebGL による Game/AR/MR • 生成 AI を活用した画像生成
  3. 013 Proprietary & Confidential Web3 型の ID•決済•金融システム • Crypto ウォレット

    (AA),SDK の 開発・提供 • 各種決済機能 (クレジット,クリプ ト)
  4. 016 Proprietary & Confidential Memory AI character agent service Vector

    Store Vertex AI Memory Spanner ・Reflection ・Context Summarize ・Semantic Search Agent ・Multi-step thinking ・Character Profile Monitoring 🦜🔗 LangSmith OpenAI
  5. 017 Proprietary & Confidential Blockchain NFT Mint • Secret Manager

    • GKE→Defender (Lambda) ◦ IDトークン認証 Secret Manager Alchemy NFT Service OpenZeppelin Defender Webhook Listening Mint Autotask Req (AWS Lambda) Get Autotask URL Smart Contract (AA Wallet) Mint
  6. 019 Proprietary & Confidential Google Cloud Next Tokyo ’24 基盤

    旧 : Cloud Run 👉 新 : GKE に移行 • Cloud Native な技術選択 ◦ kubernetes controller 使いたい ◦ CNCF Projects のコンテナ技術を採択したい • 機械学習に向けてマシンリソースを選びたい ◦ AI に注力していくため • Ops 起因で GKE でしかできなかった ◦ 機密情報のため理由は伏せます
  7. 020 Proprietary & Confidential Google Cloud Next Tokyo ’24 Gateway

    API Cloud Load Balancingを構築 GKE 構成 Private Cluster 堅牢なクラスタを作成 適切なマシンタイプ 機械学習サービスにハイメモリ Node を用意 Kubernetes private cluster Cloud Load Balancing Gateway API Cloud Pub/Sub Spanner 3rd party Standard Node High Memory Node Service B A Service proxy HTTPRoute BFF HTTPRoute
  8. 021 Proprietary & Confidential Google Cloud Next Tokyo ’24 VPC

    Private Cluster Private Cluster • ノードが外部 IP アドレスを持たない • 外部からのアクセスを遮断し、より堅牢なクラスタを作成 • Kube-apiserver には Tailscale Operator 経由で接続 ◦ 同じTailnetに所属するデバイスとOperator間でP2P通信 ◦ 権限管理も Tailscale の ACL で行う Cluster Node Control Plane Google Cloud Managed Pod Kubernetes API Server Tailscale Operator User Engineer Load Balancer Kubectl Peering P2P
  9. 022 Proprietary & Confidential Google Cloud Next Tokyo ’24 Deploy

    Artifact Registry ArgoCD Engineer Google Kubernetes Engine Application Repo Manifests Repo Watch Watch & Push Sync Action • ArgoCD による状態管理 • Manifest Repo と Application Repo は分かれている • Terraform による IaC Spanner Cloud Pub/Sub
  10. 023 Proprietary & Confidential Google Cloud Next Tokyo ’24 便利Tools

    Go-kit Go 共通ライブラリで抽象化 • DB Client • Logging • Pub/Sub • otel span 生成 • etc Gauctl MicroService 作成 CLI • アプリケーションコード • Kubernetes Manifests • Terraform (planning) Gaudiy-api gRPC schema repo • コード生成 ◦ Go ◦ Node ◦ Python • ESPv2 への反映
  11. 024 Proprietary & Confidential モニタリング • Datadog ◦ OpenTelemetry Collector

    経由 • BigQuery ◦ DD 保持期間外のデータは Cloud Storage にアーカイブ • Fluentd ◦ FEのログ保存 ◦ Sidecar にて実行 BigQuery Cloud Storage Service Service Engineer Archive Kubernetes cluster
  12. 026 Proprietary & Confidential Google Cloud Next Tokyo ’24 メッセージング

    • サービス開発においてよくあるパターン 「整合性を保ったまま DB 更新 & メッセージキューへの Publish を行う」 ◦ 例: 商品購入後、購入完了メールを送る ◦ どちらかが失敗するとシステム不整合の状態になってしまう DB とメッセージングキュー間でトランザクションを貼る必要がある
  13. 027 Proprietary & Confidential Google Cloud Next Tokyo ’24 Transactional

    Outbox Pattern • DB をメッセージキューとして使う方法 • DB 更新 Transaction と同時に Outbox Table へメッセージを挿入する • ローカルな ACID トランザクションにより整合性を保つ ref: microservices.io
  14. 028 Proprietary & Confidential Google Cloud Next Tokyo ’24 Outbox

    Message Broker (Pub/Sub) Spanner Message Relay (Pod) Polling Publish Pod が Outbox Table を見にいく Polling 形式 従来の実装
  15. 029 Proprietary & Confidential Google Cloud Next Tokyo ’24 Outbox

    Message Broker (Pub/Sub) Spanner Message Relay (Pod) Streaming Publish Spanner の Change streams を使った Stream 形式 現在の実装
  16. 030 Proprietary & Confidential Google Cloud Next Tokyo ’24 Polling/Stream

    の比較 Stream • Spanner からの変更を検知 • Spanner Stream による必要最低限な データの取得 ◦ スケールしやすい • ほぼリアルタイムでの検知 ◦ 1 秒かからない • Distributed locks が必要 Polling • Outbox Table を見にいく • Pod が多いほど、Polling による Spanner の Read の回数が増加 ◦ スケールしない • Polling 間隔ごとにメッセージ処理 を開始 • Exclusive locks が必要
  17. 031 Proprietary & Confidential Google Cloud Next Tokyo ’24 Stream

    実装 • 3 つの Worker で全ての Outbox Pattern のイベントを処理 • Spanner Change Streams ◦ Spanner のデータ変更をほぼリアルタイムでストリーミング ◦ データ変更内容,主キー,トランザクション ID,etc が送信される Read Worker Find Worker Publish Worker Spanner Change Streams のデータを 受け取る PK で Outbox Table を Find Pub/Sub に Publish Pub/Sub Spanner Streaming Publish Find
  18. 032 Proprietary & Confidential Google Cloud Next Tokyo ’24 Outbox

    Event Table • Data にパブリッシュするメッセージを詰める ◦ Spanner Protobuf Support により proto そのまま詰め込める • OutboxLock Table で Distributed Locks を実 装 ◦ Redis の Distributed Locks 等の既存ロ ジックを Spanner 上で実現 • OutboxEvent Table に抽象化することで、 Topic 毎に Outbox Table を作ることなく 1 つの Table で全てのイベント処理をしている
  19. 033 Proprietary & Confidential Google Cloud Next Tokyo ’24 Pub/Sub

    schema validation • Pub/Sub は protobuf で Message schema を定義できる ◦ 送信されるメッセージのValidateを行う • Pub/Sub 側に schema のバージョニング(リビジョン)機能 ◦ 安全な型変更が可能
  20. 034 Google Cloud Next Tokyo ’24 まとめ Gaudiy では Google

    Cloud を活用し先進的な 技術を用いてサービスを構築・運用しています。 今後もファン国家実現のため、様々なテクノロ ジーを導入・発信していきます。
  21. 035 Proprietary & Confidential Google Cloud Next Tokyo ’24 Join

    us! 他にも様々な分野のテックブログを発信しています。興味ある方はぜひ以下のQRコードか らアクセスしてみてください!採用も絶賛募集中。 採用ページ Zenn Techblog
  22. 036 Proprietary & Confidential Google Cloud Next Tokyo ’24 Ask

    the Speaker にぜひお越しください セッションに関する質問にスピーカーが直接お答えします! ※ Ask the Speaker の会場案内図が後日追加されます
  23. 039 Proprietary & Confidential Google Cloud Next Tokyo ’24 •

    Cloud EndpointsがAPIゲートウェイとして利用 ◦ Envoyベースの L7 Service Proxy 特徴 • Protobufでルーティングを管理 • GKE上でコンテナ動作可能 • 様々な認証 ◦ ID Token, Firebase Auth, Auth0, サービスアカウント ◦ GKE Cluster外からのアクセスが可能 ESPv2
  24. 040 Proprietary & Confidential Google Cloud Next Tokyo ’24 •

    HTTP から gRPC へのトランスコーディングが可能 ◦ Pub/Sub PublishのHTTPリクエスト ◦ 3rd partyからのWebhook ESPv2 Cloud Load Balancing Pub/Sub Kubernetes private cluster Service ESPv2 Alchemy gRPC HTTP