GYAOのtsです。
我々のチームは、オールパブリッククラウドで、Microservice Architectureを採用した次期バックエンドを設計中です。
経緯
とあるPJでかなり抽象的なと言うか汎用的なデータベースが必要となった。
ずっと前から「やるやら」を繰り返している案件だが、
DMPも同時に推進していくということで、チーム内のモチベーションも高い。
オールパブリッククラウドということで、弊社にしてはかなりアグレッシブなデザインになった。。。
当然拡張性や高可用性が求められるわけだが、
チーム内で研鑽やピアレビュー、プロトタイピングを行っていく中である程度デザインのドラフトができた。
グランドデザイン
Gateway
Apigee or AmazonAPIGatewayを検討中。
すべてのサービスのエントリポイントとして使用する予定。
認証、ルーティングをここで管理したい。
Bus
今後の拡張性も考慮して、マイクロサービス同士をつなぐものとして
機能させたい。subscriberを増やすことで同じメッセージがブロードキャストされるのは恩恵が受けられるかと思う。
トピックは
- meta
- 永続化層に保存するデータ
- log
- DMP用に行動ログを放り込む
の予定
以前、社内で同じようなシステムを構築した際は、Apache kafkaを使用しました。
違いも含めてハンズオンしていきたい。
Dataflow
pub/sub のsubscriberとして機能させる。
以下のjobを作成
- MetaStoreJob
- Metaトピックから購読したメッセージ(meta)を永続化層(Datastore)に保存する。
- LogExportJob
- 購読したメッセージ(log)を永続化層(Datastore)に一時保存する。バッチモードで定期的にファイルにして、AzureMachineLearningに食わせる。
とりあえずDataflowでやってみようということで、決定ではない。
もしかしたらアプリケーションを構築してkubernetesクラスタという形になるかもしれません。
Storage
永続化層として使用。logも食わせるので、BigQueryの方がいいかもしれません。
metaはstorage、logはBigQueryにするとかかな。
次回
上記のプロトタイピングを進めていきたいと思います。