コンテンツに移動
データベース

ShareChat が Google Cloud を使用してスケーラブルでデータドリブンなソーシャル メディアを構築した方法

2021年5月6日
https://storage.googleapis.com/gweb-cloudblog-publish/images/gcp_x_sharechat.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2021 年 4 月 20 日に、Google Cloud blog に投稿されたものの抄訳です。

編集者注: 本日の記事は、インドのソーシャル メディア プラットフォーム ShareChat による寄稿です。何百万人ものユーザーに地域別コンテンツを提供するために、ShareChat が Google Cloud を使用してパフォーマンス、アプリ開発、分析を改善した方法をご紹介します。

主要な公用語が 22 もあり、地域ごとに数多くの方言が使用されている国で、ソーシャル ネットワークを構築するにはどうしたらよいでしょうか。ShareChat は、1 か月に 1 億 6,000 万人以上のアクティブ ユーザーに対し、インド国内 15 の言語で、動画、画像、GIF、曲などの共有、視聴サービスを提供しています。2020 年にはショート動画のプラットフォーム Moj もリリースしました。これはすでに 1 か月あたり 8,000 万人以上のアクティブ ユーザーにご利用いただいています。

ユーザーの言語でのアクセスを可能にする

モバイルデータやスマートフォンが入手しやすい価格になったことで、インドでは新たに農村部でインターネットのユーザー層が拡大しています。しかし、コンテンツや情報へのアクセスには言語が重要な役割を果たすにもかかわらず、こうしたユーザーの多くは英語を話しません。この新しいインターネット ユーザーは、英語が幅を利かせるソーシャル サイトよりも、特定の言語や方言を使うことができる居心地のよい WhatsApp グループを利用していました。

そこで ShareChat は、ユーザーが意見を交わし、日々起こったことを伝え、友人を作るといったことをすべて母語で行えるプラットフォームの構築に着手しました。ShareChat は、カスタマイズされたコンテンツ ニュースフィードによってコンテンツやユーザーの検索を簡単にし、各言語固有のコンテンツをユーザーにお届けしています。

高負荷のデータ、大容量のコンテンツとトラフィックを扱うことから、IT インフラストラクチャへの依存度が非常に大きくなっています。それに加えて多くのユーザーが、投稿、高評価、閲覧、フォローなどのやり取りに 2G ネットワークを利用しています。ShareChat のプラットフォームは、さまざまなネットワークを使用する全国のユーザーに対し、パフォーマンスを低下させることなく、優れたサービスを提供しなければなりません。

将来の成長をサポートする最適なクラウド パートナー

クラウドから生まれた ShareChat は、既存のクラウド プロバイダを活用して、システムを拡張し、大規模な顧客ベースにサービスを提供する方法をすでに知っていました。しかし多くの企業と同様に、予測困難なトラフィックに対応し、ストレージの容量不足を防ぐ目的での、コンピューティングとストレージのオーバープロビジョニングが課題となっていました。ローカル言語のコンテンツの需要が高まり、COVID-19(新型コロナウイルス感染症)に対応してオンラインでのやり取りが増えたことから、必要に応じた動的なスケーリングとリソース割り当てが可能な、効率的な方法の必要性を感じていました。

Google Cloud を選択するのは自然な流れでした。当社が必要とするものを構築できる強力な技術ポートフォリオを簡単に(そして優れた費用対効果で)管理できる、テクノロジーを重視する会社とのパートナーシップを求めていたからです。Google は技術革新をリードする存在で、当社のアプリケーションの構築、運用、管理に必要なものをすべて備えていました(新しい機能の迅速な修正とリリースのための効率的な DevOps パイプラインの構築など)。

Google Cloud チームとの協議を始めた当初はいくつかの懸念もありましたが、情報やサポートを得るにつれて、最も難しい問題に取り組むうえで当社が求めていたパートナーが、まさに Google Cloud チームであることがわかりました。最終的に、当社のインフラストラクチャ全体を Google Cloud にすることを決定しました。

数百万人のユーザーをサポートするために、当社は Google Kubernetes Engine を使用してデプロイとスケーリングを行っています。また、マネージド データクラウド サービスを組み合わせてデータを分析しています。たとえば、Data Pipelines 用に Pub/Sub、アナリティクス用に BigQuery、リアルタイム アプリによるワークロード用に Cloud Spanner、インデックス登録が少ないデータベース用に Cloud Bigtable を使用しています。さらに Cloud CDN を使用して、高品質で信頼性の高いコンテンツを低レイテンシでユーザーに配信しています。

現在では、ShareChat の既存のワークロード運用に必要なコア消費の合計は、従来の環境の半分になっています。

Google Cloud によりすべてのレベルで望ましい成果を達成

Google Cloud に移行することで、重要ないくつかの領域で大きなメリットが得られました。

ユーザーに配慮したゼロ ダウンタイムでの移行

移行する時点では、220 のテーブルから成る 70 テラバイトを超えるデータを保有していました。500 億近い行を含む 14 テラバイトにのぼるデータもありました。データには相互依存関係があったため、サービスを 1 つずつ移行することはできませんでした。

移行するデータは大量であっても、お客様に影響が及ぶことは回避しなければなりません。しかし同期していないデータのレイテンシが急増すると、メッセージ配信に影響する可能性がありました。たとえばメッセージや通知が遅延した場合に、ユーザー エクスペリエンスが低下して、ユーザーが ShareChat の使用を止めるような事態を防ぐ必要がありました。

移行の準備のため、4 か月以上にわたって概念実証クラスタを運用して、100 万以上の秒間クエリ数を処理する実際のシナリオでデータベースのパフォーマンスをテストしました。オープンソース API ゲートウェイを使用して、移行元のデータ環境を Google Cloud に複製して、パフォーマンス テストと容量分析を行いました。Google Cloud が移行元のクラウド環境と同等のトラフィックを処理できると確証を得た時点で、移行の準備は完了しました。

ラッパーを使用した結果、既存のアプリケーション コードを変更することなく移行できました。6,000 万人のユーザーを Google Cloud に完全に移行するには 5 時間を要しましたが、データの消失やダウンタイムは発生しませんでした。現在 ShareChat は 1 億 6,000 万人のユーザーを擁するまでになりましたが、Google Cloud は引き続き必要なサポートを提供してくれています。

グローバルなスケーリングによって予期しない需要に対応

当社は ShareChat 上のすべてのサービスにリアルタイム データを利用しています。メッセージから新しいグループ作成、高く評価したコンテンツ、フォローしたアカウントに至るまで、ユーザーがアプリ上で行うすべての動作をトラッキングしています。ShareChat では 1 日あたり 100 万以上の投稿が行われるため、大量のデータを効率的に処理するシステムが不可欠です。

そのため、グローバルな整合性とセカンダリ インデックスを有する Spanner への移行を選択しました。従来の NoSQL データベースとは異なり、既存のテーブル定義やスキーマ定義を再検討することなくスケーリングし、複数のロケーションにわたってデータシステムの同期を保持することが可能になりました。また、コストの効率化にも役立ちました。17 のインデックスがある 120 以上のテーブルを Cloud Spanner に移行することで、30% の費用削減に成功しました。

また Spanner では、リアルタイムで複数のロケーションでシームレスにデータを複製しているため、1 つのリージョンで障害が起きてもドキュメントの取得が可能です。たとえば、トラフィックがわずか数日で予期せず 500% 急増したときも、コードをまったく変更することなく水平方向にスケールすることができました。また、動画アプリの Moj を同時にリリースしましたが、まったく問題なく別のリージョンに移行することができました。

開発とデプロイの簡略化

平均では、1 秒あたりのリクエスト数(RPS)は 80,000 であり、1 日では 70 億 RPS 近くになります。すべてのユーザーに注目のトピックが毎日プッシュ通知されていますが、数秒で 130,000 RPS まで急増することもしばしばです。

Google Kubernetes Engine(GKE)を使用すれば、オーバープロビジョニングすることなく、スケジュールされたイベントでのトラフィック急増をプリスケーリングできます。インドで数百万人がお祝いメッセージを送り合うディーワーリーのような祝日でも対応できます。

また GKE に移行することで、デプロイの自動化、スクリプト記述の時間短縮など、業務の迅速化が可能となりました。当社はコンテナベースのソリューションをすでに使用していましたが、デプロイ ファネル全体について透明性と対応範囲に欠けるところがありました。

サイドカー プロキシなどの Kubernetes 機能により、コードを変更することなく、ロギングなどの周辺タスクをアプリケーションに接続できるようになりました。Kubernetes のアップグレードはデフォルトで管理されているため、メンテナンスの心配をする必要がなく、価値の高い業務に集中できます。クラスタとノードは最新のバージョンに自動的にアップグレードされるため、セキュリティ リスクが最小限に抑えられ、最新の機能にいつでもアクセスできるようになっています。

低レイテンシでリアルタイムな ML 予測

ShareChat には都市部以外からも多数のユーザーがアクセスしていますが、アプリの読み込みやメッセージの遅延に対してそうしたユーザーが寛容なわけではありません。当社は、居住地を問わず、どのユーザーにも質の高いサービスを提供するべく努力しています。

Cloud CDN を使用して、インドでの 5 か所の Google Cloud エッジ拠点(PoP)内にデータをキャッシュ保存することで、ユーザーとコンテンツの保存場所との距離を可能な限り縮めることができ、読み込み時間が短縮されました。Cloud CDN に移行して以来、キャッシュ ヒット率は 90% から 98.5% に改善されました。コンテンツ リクエストの 98.5% をキャッシュで処理できるようになったわけです。

今後グローバルに拡大していくにあたり、当社は機械学習を活用して、さまざまな言語でコンテンツを提供することを計画しています。そのために、各地域の言語でリアルタイム データセットを処理する新しいアルゴリズムを構築し、ユーザーの要望を正確に予測したいと考えています。Google Cloud によって、コンピューティング負荷の高いワークロードの処理に最適化されたインフラストラクチャが得られます。これは現在の当社にとって、そしておそらくは未来の当社にとっても、有益な環境です。

最適なプラットフォームを構築できるという確信

最新の ShareChat システムは、移行前よりもパフォーマンスが改善されましたが、現在も新しい機能を追加し続けています。Google のデータクラウドによって洗練されたサービス エコシステムが得られたことで、これまでになく簡単かつ迅速に、必要な機能を構築できるようになりました。

Google Cloud との連携による最大のメリットはおそらく、Google のエンジニア チームとの関係を築けたことです。特定の問題の解決に取り組んでいる場合でも、ライブラリ内の特定のソリューションや数行のコードを探している場合でも、担当の Google チームにすぐに相談できます。

そのため、自信を持ってさまざまな取り組みを行えるようになりました。当社は、最適なプラットフォームを構築できると確信しています。問題解決のための適切なプロセスが備わっているだけでなく、必要なときにはいつでも適切なサポートを得られるからです。

-ShareChat 共同創業者兼 CTO、Bhanu Singh 氏

投稿先