メルカリのGCPでStreamなデータパイプライン始めました等を参考にして分析基盤を開発したので軽く振り返り。
- 社内の全サービスである程度簡単に使える
- 基本的にあるサービスの変更が他のサービスに影響を与えない
- どのようなデータも入れられる
- すぐに分析できる
- あまり頑張らなくてもスケールする
を念頭において設計しました。
アクセスログだけで月間2.5億以上になりそうなシステムなので、 ログを受け付けるサーバーは、App Engine + Goで高速なスケーリングができる構成にしました。裏側はDataflowを活用することであまり頑張らずにさばけるようにしました。
一応下記のような構成を一人で黙々と開発してました。社内の全サービスが使用するため、IAM等含めてすべてTerraform(Terragrunt)で管理するようにしました。
新規サービス立ち上げ時のフェーズ等のことを考えて、Cloud Storageを利用したData Lakeや、Structured Data Lakeはオプショナルにしておき、サービスが必要に応じて利用できるようにしました。
非構造化データを収集しない限りはBigQueryに入るデータは構造化データだけとなるので、Cloud Storageに上げるものと同じになってしまい、正直あまり意味がないためCloud Storageははずせるようにしました。
Data Lake(Cloud Storage)やStructured Data Lake(Cloud Storage)を使用しない場合には、Dataflowも起動しない作りとすることでコストを抑えています。Data Warehouseと記載してあるBigQueryの部分はどのサービスでも使用するので自動的にDataflowが立ち上がりスキーマさえ定義すればBigQueryにログデータを送れる作りにしました。
Pub/Sub以降(図におけるPub/Subより右側)はすべてサービスごとに立ち上がるので単一障害点となりうる部分は、App Engine部分のみとなっています。App Engineは、受け取ったデータ形式の妥当性の確認とPublishのみしか行っておらず変更が発生しないので一つのみ(単一障害点となることを現状では許容する)としました。
下記は、断片的なアウトプット一覧です。
正攻法でどうにもならずちょっと変わったこともやったりしていたので今後そのへんもアウトプットしていきたいと思います。