Slide 1

Slide 1 text

オンラインコミュニケーション開発ツー ル「SkyWay」 を支える技術 〜AlloyDB 活用例〜 門下 佳樹 NTT コミュニケーションズ株式会社 プラットフォームサービス本部 SkyWay 推進室 ソフトウェアエンジニア 池田 裕介 NTT コミュニケーションズ株式会社 プラットフォームサービス本部 SkyWay 推進室 ソフトウェアエンジニア

Slide 2

Slide 2 text

スピーカー自己紹介 2021 年に新卒で入社 リアルタイム コミュニケーション プラットフォーム 「SkyWay」の開発・運用に従事 バックエンド・フロントエンドの開発に加え、 インフラの構築・運用まで幅広く担当 門下 佳樹 NTT コミュニケーションズ株式会社 プラットフォームサービス本部 SkyWay 推進室 ソフトウェアエンジニア

Slide 3

Slide 3 text

SkyWay の紹介

Slide 4

Slide 4 text

SkyWay とは ● 映像・音声・データ通信機能をアプリケーションに簡単に 実装できる SDK & API ● 端末間の通信を仲介するサーバーと、 それを利用するための SDK を提供 ● SkyWay のシステムは、ほぼ全て Google Cloud 上で構築

Slide 5

Slide 5 text

SkyWay のこれまで ● 2013 年 提供開始 ● 2017 年 商用提供開始 ● 2022 年 2 月 新しい SkyWay β 版提供開始 ● 2023 年 1 月 31 日 新しい SkyWay 提供開始 ※1 2021 年度実績 万回/日 映像・音声通話回 数 % 稼働率 ※1 年以上 運用実績 99.96 10 40

Slide 6

Slide 6 text

Virtual Private Cloud AlloyDB Cluster Virtual Private Cloud 本セッションで説明する範囲 Firestore アカウント管理サー バー Compute Engine Internal Load Balancer Cloud Load Balancing 認証サーバー Compute Engine シグナリングサー バー Compute Engine HTTP WebSocket Cloud Load Balancing Cloud Armor Cloud Load Balancing Cloud Armor AlloyDB の活用例 スケールする リアルタイム双方向通信 Primary AlloyDB Read Pool AlloyDB 利用量集計バッチ Cloud Functions コネクタ Compute Engine マネージドサービスを用いたセ キュアなサービス提供 Identity-Aware Proxy SSH

Slide 7

Slide 7 text

Virtual Private Cloud AlloyDB Cluster Virtual Private Cloud 本セッションで説明する範囲 Firestore アカウント管理サー バー Compute Engine Internal Load Balancer Cloud Load Balancing 認証サーバー Compute Engine シグナリングサー バー Compute Engine HTTP WebSocket Cloud Load Balancing Cloud Armor Cloud Load Balancing Cloud Armor AlloyDB の活用例 スケールする リアルタイム双方向通信 Primary AlloyDB Read Pool AlloyDB 利用量集計バッチ Cloud Functions コネクタ Compute Engine マネージドサービスを用いたセ キュアなサービス提供 Identity-Aware Proxy SSH

Slide 8

Slide 8 text

Virtual Private Cloud AlloyDB Cluster Virtual Private Cloud 本セッションで説明する範囲 Firestore アカウント管理サー バー Compute Engine Internal Load Balancer Cloud Load Balancing 認証サーバー Compute Engine シグナリングサー バー Compute Engine HTTP WebSocket Cloud Load Balancing Cloud Armor Cloud Load Balancing Cloud Armor AlloyDB の活用例 スケールする リアルタイム双方向通信 Primary AlloyDB Read Pool AlloyDB 利用量集計バッチ Cloud Functions コネクタ Compute Engine マネージドサービスを用いたセ キュアなサービス提供 Identity-Aware Proxy SSH

Slide 9

Slide 9 text

SkyWay における AlloyDB の 活用例

Slide 10

Slide 10 text

AlloyDB とは ● PostgreSQL との完全な互換性を持ったマ ネージド データベース サービス ● 高いパフォーマンスと可用性が特徴 ● 2022 年 12 月に一般提供開始

Slide 11

Slide 11 text

SkyWay における AlloyDB の利用用途 ● アカウント情報の管理 ○ プロジェクト ○ アプリ ○ アカウント etc… Project Application Account Account Project Project Application Application Application Application

Slide 12

Slide 12 text

SkyWay における AlloyDB の利用用途 ● アカウント情報の管理 ● ユーザーの端末接続時の認証処理 Virtual Private Cloud AlloyDB Cluster Virtual Private Cloud Internal Load Balancer Cloud Load Balancing 認証サーバー Compute Engine シグナリングサー バー Compute Engine アカウント管理系 リアルタイム通信系 Read Pool AlloyDB

Slide 13

Slide 13 text

SkyWay における AlloyDB の利用用途 ● アカウント情報の管理 ● ユーザーの端末接続時の認証処理 ● 利用状況の可視化・分析 Virtual Private Cloud AlloyDB Cluster アカウント管理系 Primary AlloyDB Read Pool AlloyDB 利用量集計バッチ Cloud Functions コネクタ Compute Engine BI ツール Compute Engine BigQuery

Slide 14

Slide 14 text

なぜリリース 1 ヶ月前に AlloyDB に移行したのか 2023 / 01 / 31 新しい SkyWay リリース 2019 〜 従来の SkyWay では Cloud SQL を利用 2023 / 01 AlloyDB 移行作業開始 2022 / 12 AlloyDB 一般提供開始 2022 / 05 アカウント管理系開発スタート 当初は Cloud SQL を利用 ● 開発スタート時点で AlloyDB はプレビュー段階 ● リリース後の移行はダウンタイム・並行運用が必要 ● アプリケーション側のコードの変更は不要 ●  「移行するならリリース前の今しかない」

Slide 15

Slide 15 text

なぜ Cloud SQL から AlloyDB に移行したのか ● 可用性向上のため ○ オンライン診療や手話通訳など、重要度の高いサービスでも 利用されており、可用性が非常に重要 ○ Cloud SQL では、SLA 対象外のダウンタイムを伴う メンテナンスが定期的に発生 ※1 AlloyDB Cloud SQL SLA 99.99 % 99.95 % ※2 メンテナンスによるダウンタイム 〜 10 秒 平均 30 秒未満 ※1 メンテナンス拒否期間の設定により影響を軽減可能 ※2 定期メンテナンスに伴うダウンタイムは対象外

Slide 16

Slide 16 text

なぜ Cloud SQL から AlloyDB に移行したのか ● 従来の SkyWay では、メインのインスタンスと、メンテナンス時のみ 利用するバックアップのインスタンスを準備 ○ データ同期や接続先切り替えが必要となり、複雑になっていた メイン Cloud SQL バックアップ Cloud SQL Compute Engine 通常時(従来) 同期 メイン Cloud SQL バックアップ Cloud SQL Compute Engine メンテナンス時(従来) 切断を検知して 接続先を切り替え

Slide 17

Slide 17 text

移行時の作業 ● VPC の構成変更 ○ AlloyDB にはプライベート サービ ス アクセスを利用して接続 ○ 制限により別の VPC からは 接続できない ○ AlloyDB に接続する必要がある サーバーは同一 VPC 内に配置 Virtual Private Cloud Virtual Private Cloud Compute Engine AlloyDB Virtual Private Cloud Compute Engine VPC Network Peering VPC Network Peering

Slide 18

Slide 18 text

AlloyDB のメリットと今後に期待すること ● メリット ○ 容易に高い可用性を実現できる点 ■ 移行時にアプリケーション側のコード変更が不要 ■ PostgreSQL に対応しているツール・ライブラリをそのまま使える ● 今後に期待すること ○ VPC 外から AlloyDB Auth Proxy を用いて接続ができると嬉しい

Slide 19

Slide 19 text

スピーカー自己紹介 2017 年入社 入社後はソフトウェアエンジニアとして WebRTC PaaS である SkyWay の様々な開発を担当 JavaScript SDK や バックエンド、インフラ構築の 開発・設計などに広く携わる 池田 裕介 NTT コミュニケーションズ株式会社 プラットフォームサービス本部 SkyWay 推進室 ソフトウェアエンジニア

Slide 20

Slide 20 text

Firestore によるスケールするリ アルタイム双方向通信の 構成

Slide 21

Slide 21 text

SkyWay がスケールするのに必要なこと ● SkyWay は 1 日 40 万回以上の利用数 ● SkyWay でコミュニケーションするには 事前にクライアント間の情報交換を実施 ● 円滑な利用のためリアルタイム通信のスケーラビリティが必要 ● スケールアウトには複数サーバー間での状態管理が必須

Slide 22

Slide 22 text

状態管理してますか? ● 一時的な Key-Value を持ちたいことは多い ○ 特に小さいデータの場合を想定 ○ 比較的書き込み比率が高い場合を想定 ● サーバーがステートフルだと大変 ● ステートを外で管理するのが一般的 ○ Redis, memcached など ● マネージドなサービスも選択肢

Slide 23

Slide 23 text

SkyWay で選定した Key-Value ストア 〜 Firestore 〜 ● マネージドサービス ● 自動スケーリング ● SLA 99.99 % + 計画的ダウンタイム無しで高可用性 ● TTL ポリシーによる自動削除機能

Slide 24

Slide 24 text

Firestore と他のプロダクトとの比較 Firestore Memorystore Cloud SQL Cloud Spanner ● NoSQL DB ● 自動スケーリング ● SLA 99.99 % ● 計画的ダウンタイム無 ● 自動削除有 ● 安価※ ● インメモリ DB ● 手動スケーリング ● SLA 99.9 % ● 計画的ダウンタイム有 ● 自動削除可能 ● 安価 ● リレーショナル DB ● 手動スケーリング ● SLA 99.95 % ● 計画的ダウンタイム有 ● 自動削除無 ● Firestore の 15 倍 (今回のユースケースの 場合) ● リレーショナル DB ● 自動スケーリング ● SLA 99.99 % ● 計画的ダウンタイム無 ● 自動削除有 ● Firestore の 10 倍 (今回のユースケースの 場合) ※: 費用は SkyWay でのユースケースを用いて試算

Slide 25

Slide 25 text

Virtual Private Cloud AlloyDB Cluster Virtual Private Cloud Firestore の利用例 Identity-Aware Proxy Firestore アカウント管理サー バー Compute Engine Internal Load Balancer Cloud Load Balancing 認証サーバー Compute Engine シグナリングサー バー Compute Engine HTTP WebSocket SSH Cloud Load Balancing Cloud Armor Cloud Load Balancing Cloud Armor リアルタイム通信系 Primary AlloyDB Read Pool AlloyDB 利用量集計バッチ Cloud Functions コネクタ Compute Engine

Slide 26

Slide 26 text

シグナリング サーバーとは ● クライアント間で直接通信するには データ送信前に情報交換が必要 ○ クライアント間で IP アドレスなどを交換 ● サーバープッシュ対応が必要 ○ WebSocket が必要 ● リアルタイム双方向メッセージはスケールしづらい ○ SkyWay は WebSocket + Firestore で解決

Slide 27

Slide 27 text

Instance Group WebSocket 接続の構成 ● クライアントが接続中の サーバー情報を Firestore で一元管理 ● クライアントはサーバーを 経由してメッセージを送信 ○ サーバー間では HTTP で メッセージを転送 Cloud Load Balancing Firestore シグナリング サーバー Compute Engine メッセージの流れ 管理用データの流れ シグナリング サーバー Compute Engine 1 1 2 3 4

Slide 28

Slide 28 text

Firestore を採用したメリット 〜 TTL ポリシー機能 〜 ● 一時的な値を入れる用途のため 値の削除が必要 ○ 選定段階には無かったので 実装方法を検討中だった ○ 2022/10 に機能追加 ● GUI から 2 クリックで設定可能 ○ 実装や設計のコストを削減

Slide 29

Slide 29 text

Firestore で考慮したポイント 〜 ホットスポット対策 〜 ● ホットスポットとは ○ 狭い Key の範囲に書き込みが集中 ○ 書き込み性能が低下 ● SkyWay では UUID を接頭辞とした文字列を ハッシュ化した値をキーにして利用 ○ UUID の先頭の文字は 16 種類のため ハッシュ化した値をキーにして分散 ■ 例: 11764d0c-a66d-41f5-947b-f858fe6a8b28 => ZTU5YWE5ZjAxNDNlNmMzMjQ3OTY3OTBiYmZiNz ZjNGY1YWI5YzdlYw== 11764d0c-a66d-41f5-947b-f8 58fe6a8b28 11764d0c-a66d-41f5-947b-f8 58fe6a8b28/foo 11764d0c-a66d-41f5-947b-f8 58fe6a8b28/bar 7c039f8b-d7b6-441a-9118-6 2f11bf1e3f8 7b4f63e9-2c7e-4268-804c-4 e677d8253ee e2f95cb3-b279-498a-b0f1-f0f 9213f42d8

Slide 30

Slide 30 text

SkyWay で選定した Key-Value ストア 〜 Firestore 〜 ● Key-Value ストアとして便利 ○ TTL ポリシーで古い情報を自動削除 ○ ホットスポットには注意 ● 自動スケーリングで簡単 ● SLA 99.99 % + 計画的ダウンタイム無しで高可用性 ● Cloud SQL や Cloud Spanner より安価

Slide 31

Slide 31 text

マネージドサービスを用いたセ キュアなサービス提供の 実現

Slide 32

Slide 32 text

SkyWay で必要な セキュアなアクセス ● サーバーに SSH が 必要な場合がある ● 社内のみに公開したい ウェブツールも存在 ○ これらのアクセスを セキュアに行いたい ■ ユーザ認証が必要 Instance Group シグナリング サーバー Compute Engine シグナリング サーバー Compute Engine 踏み台サーバー Compute Engine 社内向けツール Compute Engine 踏み台サーバー Compute Engine SSH HTTP

Slide 33

Slide 33 text

従来の SkyWay の方式 ● プライベートなアクセスは 踏み台サーバー経由 ● 踏み台での アカウント管理が必要 ● 設定忘れ・漏れが発生 ○ 特に新規メンバー Instance Group シグナリング サーバー Compute Engine シグナリング サーバー Compute Engine 踏み台サーバー Compute Engine 社内向けツール Compute Engine 踏み台サーバー Compute Engine SSH HTTP

Slide 34

Slide 34 text

新しい SkyWay で 採用した方法 ● Identity-Aware Proxy (IAP) 経由で プライベートなアクセス ○ SSH, HTTP 両対応 ○ サーバーに Public IP は不要 ● Google アカウントで管理 Instance Group シグナリング サーバー Compute Engine シグナリング サーバー Compute Engine 社内向けツール Compute Engine Identity-Aware Proxy Identity-Aware Proxy Cloud Load Balancing SSH HTTP

Slide 35

Slide 35 text

Cloud Armor による攻撃対策 ● アプリケーションを保護するためのサービス ○ DDoS 対策や WAF 機能 ● 新しい脅威にも対応 ○ 2021 年の Log4Shell では 一週間ほどでルールが追加 ● POST リクエストで JSON が送られてくる場合、 JSON 解析の有効化が必要

Slide 36

Slide 36 text

まとめ ● AlloyDB で高い可用性を実現 ● Firestore でスケール可能な Key-Value ストアを安価に使用開始 ● Identity-Aware Proxy で 踏み台サーバーにお別れ ● Cloud Armor で脅威を軽減

Slide 37

Slide 37 text

Thank you.