メルマガ登録
XaaSユニット プロダクトエンジニアリング所属の岡です。
ブレインパッドは、企業のデータ活用・DXやデジタルマーケティングを支援するデータビジネス・プラットフォーム「Rtoaster(アールトースター)」を開発・提供しています。
Rtoaster insight+* では、データを抽出・加工するためのジョブ機能(以降ジョブ)を提供しています。
ジョブを実行している裏側のアーキテクチャは、Rtoaster insight+ のジョブ機能の開発初期から大きく変わっていません。
開発初期は主にコスト面を重視していたため、現在の開発・運用の点で最適化されてない部分があります。また、開発当時からGoogle Cloudのサービスがいくつかリリースされていることもあり、以前よりもアーキテクチャの選択肢が増えました。
このような課題背景から、現在のアーキテクチャをリアーキテクトするための検証をしたので、その事例について紹介します。
*Rtoasterは、お客様ひとり一人にパーソナライズした顧客体験を実現するため、「action+」「insight+」の機能を備えています。
Rtoaster insight+ は、多種多様な顧客データを一元管理し、顧客を軸としたデータ統合ができるCDP(カスタマーデータプラットフォーム)です。
ジョブの入出力に外部ストレージを指定することで、Rtoaster insight+(BigQuery)へのファイルの入力およびRtoaster insight+(BigQuery)に格納したデータのファイル出力を行うことができます。
また、Rtoaster insight+(BigQuery)に取り込み済みのデータに対して任意のクエリで別のデータを抽出することも可能です。
外部ストレージは、S3、GCS、SFTPに対応しています。対応しているファイル形式は、入力元はCSV、出力先はJSONとCSVです。稼働状況としては、1日に数千個のジョブが実行されています。
ジョブの現行アーキテクチャは以下のようになっています。図2のアーキテクチャは簡略化されたものであり、実際のアーキテクチャは図の構成より多少複雑になっています。
図の通り、ジョブのアーキテクチャは大きく分けると構成が2つになります。
構成1と構成2の主な違いはジョブの実行環境です。構成1ではApp Engine、構成2ではCompute Engine(以降GCE)をそれぞれ使用しています。
App Engineでは入力がクエリ、出力がBigQueryテーブルであるジョブの実行環境で、それ以外のGCSやS3、SFTPが入出力に指定されているジョブはGCE上で実行されます。また、GCE上で動作するジョブは、弊社が開発しているOSSであるcliboa*を利用しています。
*【参考】cliboa(GItHub)
新しいアーキテクチャを考えるために、現行アーキテクチャの問題点がどこにあるかを過去の障害記録を元に調査しました。
調査の結果、構成1より構成2の部分で障害が多いことが判明しました。いくつかある障害の中でも、GCEインスタンスの立ち上げに失敗するケースの割合が多く、失敗する理由としては以下のようなものがありました。
これらの問題は一時的なエラーであるものの、根本的に解決することは難しいです。また、エラーのリカバリーは弊社のSREチームに一部手動対応していただいていることもあり、運用コストも問題となります。
リアーキテクトする上で特に重要視するものとして以下がありました。
3つ目のワークフロー機能に関しては、Rtoaster insight+ ではジョブを複数繋げて実行できる「ワークフロー」という機能を提供しており、この機能にも対応できる実装・アーキテクチャでなければならないという前提がありました。
現行の仕様や先に述べた問題点、リアーキテクトする上での重要ポイントなどを踏まえ、2つのアーキテクチャを考えました。
どちらのアーキテクチャでも現行アーキテクチャの問題点をある程度解消できると思われますが、実装・コスト面のメリットから最終的に候補2のアーキテクチャを検証段階では採用しました。
1つ目はDataflowのストリーミングを用いた構成です。
Dataflowはバッチやストリーミングデータ処理を実行できるマネージドサービスです。Cloud SQLから実行対象のジョブ情報を取得し、Pub/Subにメッセージを送信してDataflow上で処理を実行します。
マネージドサービスを利用することで現行アーキテクチャの問題点はある程度解消される見込みですが、こちらのアーキテクチャだとジョブの状態管理が難しく、ワークフローの実装が複雑になるため不採用になりました。
2つ目はCloud Run Jobsを用いた構成です。
Cloud Run Jobsは特定のタスクを実行し、完了したら終了する短期間の処理を実行するためのサーバレスプラットフォームです。
こちらの構成では、Cloud Run Jobsでジョブを実行し、App Engineでジョブの状態を管理します。このような構成にすることで、ワークフローの実装も候補1より簡単になります。
また実装面のメリットとして、既存のcliboaを用いたコードをほぼそのまま利用することが可能になります。インフラコスト面に関しても、現行アーキテクチャと同程度のスペックでほぼ変わらない結果となりました。
これらの取り組みから現行アーキテクチャの問題点を明確にし、それを解消するアーキテクチャを考案し実装しました。
新しいアーキテクチャは、調査や実験の段階では現行アーキテクチャの問題点を解消すると思われますが、本番環境と同等の検証まで行うことはできていません。本番環境でも問題なく動かすことができるように引き続き検証を進めていきたいと思います。
あなたにオススメの記事
2023.12.01
生成AI(ジェネレーティブAI)とは?ChatGPTとの違いや仕組み・種類・活用事例
2023.09.21
DX(デジタルトランスフォーメーション)とは?今さら聞けない意味・定義を分かりやすく解説【2024年最新】
2023.11.24
【現役社員が解説】データサイエンティストとは?仕事内容やAI・DX時代に必要なスキル
2023.09.08
DX事例26選:6つの業界別に紹介~有名企業はどんなDXをやっている?~【2024年最新版】
2023.08.23
LLM(大規模言語モデル)とは?生成AIとの違いや活用事例・課題
2024.03.22
生成AIの評価指標・ベンチマークとそれらに関連する問題点や限界を解説