エムスリーアンケートシステムの技術:マイクロサービス/認証 https://m3-engineer.connpass.com/event/200495/
BIRのアーキテクチャと技術選定
View Slide
自己紹介滝安純平(@juntaki)BIRエンジニアチームリーダー兼BIRカンパニー執行役員バックエンドとWebフロントエンドエンジニア、兼プロダクトマネージャをやっています。もともと組み込みLinuxのカーネル開発をしていました。最近はFlutterでなにか作っています。好きな言語はGoʕ◔ϖ◔ʔ2
今日話すこと● BIRのビジネスとシステムアーキテクチャ● 技術選定の経緯 Go / Google Cloud構成をシンプルにして、やりたいことに集中する3
BIRのビジネスとシステムアーキテクチャ4
BIR - ビジネスインテリジェンス&リサーチ医療従事者の会員向けアンケート(国内最大の医師パネル)をベースに、製薬会社へのマーケティング支援を提供する事業を行っています。5
アンケートページ
アンケートビジネスの流れ1. アンケートを作る2. 配信・督促をがんばる3. データを整理する4. データを可視化するアンケートを集めるデータを活用できるようにする7
アンケートシステムのアーキテクチャ責務を分割して、依存関係を シンプルにする8
アンケートシステムのアーキテクチャ1.アンケートを作る2.配信・督促をがんばる3.データを整理する4. データを可視化するアクセス量大督促ロジックにフォーカスアクセスは比較的少ないUI/UX、管理・運用にフォーカス9
もうすこし現実に近づけると…実際はアンケートシステムがたくさんある。配信と督促や認証を集約することで、アンケート全体を通しての回収状況の可視化・督促ロジックの設計が可能になる。当然、機能の重複もへる10
アンケートシステムがたくさんある理由いろいろなアンケート形式があり、まとめると複雑になりすぎる→部分的には類似機能の再実装になるが、それぞれで最適を目指しやすいアンケート形式の例:● 管理画面でアンケートを作れるふつうのアンケートシステム● M3会員情報を付与して他アンケートへリダイレクトするシステム● アンケートの回答に応じて他のアンケートが始まる● 月に1回配信される日記形式のアンケート11
システムアーキテクチャまとめ責務・アンケート形式ごとにシステムを分割し、依存関係をシンプルにする→最適な実装を目指しやすくする構成をシンプルにして、やりたいことに集中する12
技術選定の経緯Go / Google Cloud13
最近の歴史時期 できごと 技術要素2018年11月 集計システムリリース Racoon Go/App Engine(Go導入/App Engine導入)2019年8月 アンケート新管理画面リリース Tiger Kotlin,Spring/オンプレ(後にAWSへ移行)2019年9月 新アンケートシステムリリース Ibis Go/App Engine2019年12月 配信システムリリース Dolphin Go/App Engine2020年7月 新アンケートシステムリリース Coyote Go/Cloud Run(Cloud Run導入)2020年8月 配信システムバックエンド Spanner化 Cloud Spanner2020年12月 全アンケートシステムが配信システムへ統合 14
Goを導入した理由Javaが多い中で、下記の特徴・メリットがあったため受け入れられた● 静的型付+オブジェクト指向的な考えで作れる● いろんな書き方ができない(いい意味で)● コンパイル・起動が高速説明できればチームごと判断で柔軟に入る文化15
Webフレームワークは使わないnet/httpとコード自動生成の組み合わせ、Clean Architectureで整理フレームワークは言語よりも寿命が短い、習得ハードルも高くなる16https://speakerdeck.com/juntaki/godeapisabawohayakutukuru→ シンプルな構成で、キャッチアップや保守を効率化
Goを導入した結果その後のプロダクトは基本的にGoが多め※Go以外を使わないわけではない、適材適所チームの感想「言語仕様がとにかくシンプルなので参照しているライブラリの中までコードを追いたいときも追いやすい」「公式でSDKや実装サンプルが公開されていることが多い」17
Google Cloudを導入した理由エムスリーは全体的にAWSの利用が多かったが、BIRではサーバーレスなコンポーネント(App EngineとCloud Run)を中心に活用している当時は…● アンケートシステムの数よりもエンジニアが少ない● SREチームとの連携ポイントを減らしてスピードアップGoogle Cloudはコンポーネントを組み合わせなくてもWebサービスが成立する※コントロールできる要素が少ないことがメリットになるようにシステムを組む必要はある18
Google Cloudを導入した結果その後のプロダクトは基本的にGoogle Cloud(以下略)※オンプレサーバの移行など、サーバーレスのメリットを享受しにくい時などはAWSも使います。適材適所チームの感想「AWSと比べると一つ抽象化されている感じがする。Cloud Run便利」「設定項目がすくない分、考えることが少なくて済んでいる。App EngineやCloud Runの使い勝手が良い。」19
全体のまとめ責務・アンケート形式ごとにシステムを分割し、依存関係をシンプルにするさらにGo/Google Cloudの組み合わせで、Webサービスの機能開発にフォーカス構成をシンプルにして、やりたいことに集中する20
アンケートのご協力をお願いします※BIRで作っているアンケートシステム( Tiger)です! 医療従事者でない方はめったに触る機会がないので、ぜひこの機会にどうぞWe’re hiring! エムスリーのエンジニア採用サイトはこちらアンケートはこちら※現在は終了しています