こんにちは、メグリ株式会社でデータ基盤の開発を担当している猿渡です。
今日はデータ基盤構成について記事を書きたいと思います。
メグリのデータ基盤はこれまでレガシーな仕組みで動作していました。
具体的には処理ステップ毎に実行時間を決めておいて、段階的に処理を進める(昔からよくある)形です。
- 1時にエクスポートファイルをGCPのCloudStorageへ転送
- 3時にマスタ同期ファイルをGCPのCloudStorageへ転送
- CloudStorage側ではファイルを定期的にポーリングして、並列度を上げすぎないように順次ETL処理
- 6時から集計処理
この形態ですと以下の欠点がありました。
- オーケストレーションの機能がないので、各ステップの関係性を可視化しにくい。またエラーが発生した場合に後続処理をどこまでやり直すべきか中身を知らないと判断できない
- 自動リトライの仕組みを入れるにしても、実装や判断基準が個別の処理毎に必要になる
- 並列処理数の管理も個別にやるしかない
- データが増えて処理時間が延びた場合にはスケジューラーの時間調整が必要になる
増え続けるデータに対して頑張って動いてくれてはいたのですが、特にリトライについては早朝に手作業での対応が発生しており、今回思い切って見直すことになりました。
で、幾つかサービスを検討した結果Workflowsを採用しています。
https://cloud.google.com/workflows
現在、開発環境で試験運用中ですが良かった点としては、
- Workflowsのコンソールから簡単にリトライできる
- 今まで使っていたFunctionsをほぼそのままコールできる(移行しやすい)
- 各ステップをオーケストレーションしてくれているので、関係性が分かりやすい
- ノーコード領域が増えて、コードのステップ数が減った
- 遅延再実行なども定義ファイルで全て解決できる
- イテレーション処理に柔軟性があり、並列度も容易に管理できる
とかなり満足しているのですが欠点がない訳ではなくて、
- 最初に少し学習時間が必要
- 定義ファイルが大きくなると見通しが悪くなる、異なる定義ファイルと設定を共通化しにくい
- Slackへエラー通知するオプションがない(ここは自前で実装しています)
- 定義ファイル変更時の自動テストがしにくい
といった課題がありました。
でも今のところメリットが十分に大きいです。
これが安価ですぐ使えるところが凄いですね...
AWSやGCPの発展スピードが速過ぎて、その他の競合ツールって今後厳しくなる一方なんじゃないかと、いらぬ心配をするくらいです。
どんどん進化していくサービスに遅れないように、今後もメグリのデータ基盤を成長させていきたいと思います!