はじめに
2024/9/4 に株式会社グッドスマイルカンパニー様における EC サイトのリニューアル事例、およびデータ分析基盤の導入事例が公開されました。
複数システムに跨っていた EC サイトをフルスクラッチ開発でリニューアル。一元管理を可能とした EC サイトのインフラ構築・開発・運用保守をワンストップで提供
売上データのリアルタイム分析・可視化を実現!Google Cloud Datastream を活用したデータ分析基盤構築
アイレットは開発、そしてインフラ構築・運用までをご支援させていただきました。
当該記事はインフラ構築の裏側について解説しています。
今回はデータ分析に関する内容となります。
解説記事の一覧はこちら:
グッドスマイルカンパニー様事例に関する技術解説(構成編)
グッドスマイルカンパニー様事例に関する技術解説(監視編)
グッドスマイルカンパニー様事例に関する技術解説(負荷テスト編)
概要
お客様の要望としてリアルタイムで売上を確認したい、という要望があり、それを実現するために、なるべくリアルタイムでのデータ連携、そのデータを可視化する必要がございました。
それを実現するために Datastream を導入することで、既存バッチ実行によるデータ連携から、ストリーミング通信でのデータ連携の方法へ変更しましたので、その詳細をご紹介します。
詳細
Datastream とは
こちらの自身の記事を引用して記載します。
Datastream は、Google Cloud が提供する完全マネージド型サーバーレスデータ統合サービスです。これにより、ソースデータベースから CDC(変更データキャプチャ)を取り込み、Cloud Storage や BigQuery に直接データを取り込むことができます。以前は、BigQuery へのデータ転送には Cloud Run Functions や Dataflow が必要でしたが、Datastream の導入により、プロセスが大幅に簡素化されます。
上記以外に、ソース、デスティネーションとして選択できる対象、選択可能な構成などを纏めていますので、詳細は記事内を参照ください。
選択の背景と選定理由
お客様の要望を満たすためには、以下の選択肢が考えられました。
- スケジュール実行間隔を狭めて実施
- ストリーミング通信が可能な Datastream
- ストリーミングが可能な Dataflow などのその他サービス
大きな決め手はマネージドで行えること、ストリーミング通信であること、ソースが RDB であることでの導入の容易性、以上の内容から Datastream を選択しました。
これにより、BigQuery に対応したデータ型の変換も意識せずに吸収でき、Cloud Run Functions のリソース状況を踏まえた、スケジュール実行間隔の調整が不要になるなど、運用でのメリットも大きくありました。
アーキテクチャ
構成の検討
Cloud SQL がもともとプライベート環境で構築されていたことから、GCE でプロキシを利用し、Datastream と通信するような構成も検討しましたが、以下の3点から追加で Cloud SQL を構築し、Datastream と直接連携する形としました。
- Cloud SQL の接続元IP をDatastream サービスのみとする
- クライアント証明書の暗号化通信を行いセキュリティを確保する
- 既存の提供サービスに影響させないよう、リードレプリカを構築する
設定のポイント
Cloud SQL
上記した通り、クライアント証明書認証を有効化し、接続元制限を行い、セキュリティを保っています。
Datastream
BigQuery への連携にあたり、連携する対象のテーブルを最小限とし、連携するデータの内容や運用性も配慮した設定としました。
連携にあたって、最小限の金額に抑えることを意識し、未更新に関する制限事項の設定を調整し、コストにも配慮しております。
運用
Datastream でもサポートされていない事項がいくつかあり、その制限に抵触すると、ストリーミングが失敗します(制限事項参照)。
例えば、列をドロップする、列のデータ型を変更する、並べ替えるなどが該当します。
それらのイベントが想定されることから、データ容量を踏まえて問題ないことから、Datastream で Backfill を行い、テーブルの再同期を行うことで回避しております。
可能であれば導入前にそういった運用ケースを想定して、どの場面でどうストリーミング通信を継続するか、検討及び検証することで、運用を安定させることが可能と思います。
まとめ
選定、事前の検証も含めて対応しましたが、RDB を使っていた場合の、BigQuery へのデータ同期に関して Datastream での優位性は大きいものと感じました。
制限事項についてはあるため、その点は完全に自動化できないところとなり、運用でカバーか、なんらか運用で想定される仕組みの構築が必要となりますので注意が必要です。
定期実行などでの要件にマッチすればサーバーレスでのもとの内容でも十分なケースは多くあるかと思います。そのため、その方法を否定するものではなく、リアルタイムでの閲覧が必要であり、ソースが RDB であった場合、マネージドサービスの Datastream を利用することで、運用を簡易にそして構成もシンプルにできることから、それらがマッチした結果、今回の構成で現在もトラブルなく運用できているものと思います。