この記事はエムスリー Advent Calendar 2019の12日目の記事です。 エムスリーエンジニアリンググループの滝安(@juntaki)です。BIRというチームでエンジニアやらプロダクトマネージャー的なことをしています。 BIRはビジネスインテリジェンス&リサーチの略で、そこでは医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供する事業を行っています。そんなこともあり、最近では新しいアンケートシステムを作っていました。
記事でもGoやApp Engineを利用していますが、チーム全体としてもGoをメイン言語として採用し、クラウドの活用はAWSよりGCPの利用がメインです(エムスリー全体の技術スタックはこの辺をご参照ください)。現在開発中のものも含め、近い未来に実現するシステムのアーキテクチャと、採用している技術スタックについて紹介します。
BIRのシステム概要
アンケートと一口に言っても、その裏では色々なことをやっています。
会員向けには当然ながらアンケート回答画面があるのですが、その裏ではそれを作るためのアンケート管理画面が必要です。そして、アンケートデータをレポート向けに分析するための集計システムが社内で利用されています。
さらに、最近ではより活用に繋がりやすい形式かつリアルタイムな情報提供のために可視化システムとデータウェアハウス(DWH)を整備しています。
そして、ただアンケートの回答ページを作るだけでは、誰も訪れてくれません。なので、メルマガや、m3.com内にあるさまざまなチャネルからユーザに気づいてもらうための配信機能を統合した配信システムを現在開発中です。
技術スタックと全体のアーキテクチャ
つぎにどんな技術スタックを利用しているのかと、全体のアーキテクチャの概要を紹介します。
各システムはAPI呼び出しか、Pub/SubのTopicをインタフェースとしたマイクロサービスになっています。 データの流れに沿って左側から説明していきます。
- アンケートに回答が入るとPub/Subに回答イベントが登録され、回答データがアンケートシステム上に保存されます。
- 配信システムは回答イベントを拾い、該当アンケートの配信状態に変更を加えます。 配信システムは複数あるアンケートシステム(ここに書いたもの以外も実はあります)のイベントを全部まとめて、現在の全配信状態を把握できるため、チャネル利用の最適化やモニタリングが行えるようになっています。
- バッチ処理により、回答データはBigQueryのDWHに同期され、Tableauからはそのデータが閲覧できる状態になります。
上記の流れとは別に集計システムはアンケートの配信が始まった瞬間から集計のための計算式を設定できるようになります。 回答の回収が完了した後、集計データをダウンロードし、レポートとして納品します。
まとめ
BIRシステム全体の概要・アーキテクチャと、それぞれのサービスで利用されている技術スタックについて説明しました。 各システムについては、関連記事に詳細な解説があるので、そちらもぜひ見てみてください。
We are hiring!
エムスリー、とくにBIRではGo/Reactエンジニアや、データ基盤開発に興味があるエンジニアを募集しています。社員とカジュアルにお話することもできますので、興味を持たれた方は下記よりお問い合わせください。
関連記事
アンケートシステム(Ibis) www.m3tech.blog
アンケートシステム(Tiger) qiita.com
集計システム