エムスリーの医療Webサービス群
を支える基盤技術
2017/2/9 吉祥寺.pm #13
@progrhyme
自己紹介
➢ @progrhyme
○ https://github.com/progrhyme
○ https://twitter.com/progrhyme
➢ 職歴:
○ 〜2017 Oct. @DeNA
○ 〜現在 @M3
➢ 担当:
○ 電子カルテ
○ AIチーム
○ その他
➢ 主務はサーバインフラ, DevOps周り
2
今日のテーマ
➢ エムスリーの多様なWebサービスを構成するシステ
ムの要素技術や、サービス横断で開発や運用を支え
るツール・技術を紹介する。
3
アジェンダ
➢ サービス・インフラ概観
➢ 開発プロセス・ツール
➢ インフラツール
➢ まとめ
4
サービス・インフラ概観
M3のサービス構成
➢ 国内・海外合わせて30以上
➢ 対象ユーザ別:
○ 医療従事者(m3.com, ...)
○ 医療関連企業(MR君, ...)
○ 医療施設(m3.com CAREER, …)
○ 一般企業(広告, マーケティング等)
○ 一般ユーザ(AskDoctors, …)
➢ サブコンポーネントを含めると扱う
システムは100を超える
➢ 参考:
○ https://corporate.m3.com/service/m
edical-staff/
6
m3.com
MR君
m3.com CAREER
AskDoctors
インフラ構成概要
7
M3 本社
グループ各社
オフィスNW
DC (オンプレ)
GCP
クラウド
オンプレ vs クラウド
➢ 新しいサービスでは、クラウドの利用が増えている。
➢ 提供サービス数の比では、まだオンプレの方が多い。
➢ クラウドはAWSを使うケースが多い。
➢ 一部でGCPやその他のクラウドを利用。
8
典型的なWebサービスの構成
➢ Webサーバ
○ 古いものはApacheが多い
○ 新しいものは大体 Nginx
➢ Applicationサーバ
○ Java (含む Scala, Kotlin)
■ フレームワーク … Play, Spring Bootなど
■ Tomcat
○ Ruby
■ フレームワーク … ほとんど Rails
■ サーバ … passenger, unicorn, puma
➢ DB
○ PostgreSQLが多い
○ MySQLやOracleもある
9
OCTOPARTS
➢ API aggregator
○ Scala製。Netflix/Hystrix を利用
○ Microservicesのお伴に
○ 複数のバックエンドAPIに並列クエリ, レスポンスのキャッシング, タイ
ムアウト設定, サーキット・ブレーカー, 管理画面, アラート送信, … な
どの機能
➢ https://m3dev.github.io/octoparts/
10
開発プロセス・ツール
ロールアウト
➢ Jenkinsからサーバに対してコマンドをキックしている
パターンが多い
➢ kentaro/cinnamon や Capistrano を利用
12
web/app servers
Pipeline script
Cinammon
Jenkins
GitLab
➢ Community Edition (OSS版)をセルフホストして動か
している
➢ GitHubと機能的に遜色ないが、Community版ゆえ
の制限がたまにつらい
➢ GitLab CI便利
13
社内リポジトリ
➢ JFrog Artifactory as Maven Repository
➢ Sonatype Nexus as …
○ RubyGems
○ PyPI … New!
➢ 今後:
○ Nexus (v3)に統合していきたい
14
Nexus Repository Manager
➢ 以下に対応:
○ RubyGems, PyPI, Maven
○ npm, Bower
○ Docker Registry
○ YUM
○ NuGet
○ 他
○ ※DarkPANのサポートはな
い
➢ Java アプリケーション
➢ Nginx -> Jetty に reverse proxy
➢ ドキュメントも充実
○ https://help.sonatype.com/display/
NXRM3
15
AWS Gateway (内製ツール)
16
AWS Gateway (内製ツール)
➢ AWS IAM IDフェデレーション
○ 外部のIDプロバイダーと連携してユーザーのアクセス権限
を指定できる
○ OpenID Connect, SAML 2.0に対応
○ Cognitoでモバイルにも対応可能
➢ Ruby on RailsのWebアプリを作った
➢ Nginx -> Unicorn に reverse proxy
➢ DB は PostgreSQL
17
インフラツール
Infrastructure as Code
➢ kickstart … オンプレのOSインストール
➢ Ansible
○ サーバの構成管理
○ オンプレ、クラウド両方で利用
○ 参考: Ansible オレオレベストプラクティス - Qiita
➢ Terraform, Packer
○ クラウド環境の構成管理に利用
19
Monitoring
➢ Cacti … メトリクス
➢ Kibana … アクセスログ, response time等
➢ Prometheus … Docker Swarmクラスタ
➢ Zipkin … Microservicesの分散トレーシング
➢ その他
○ CloudWatch … AWS
○ Sentry … エラーログ監視
○ OCTOPARTS
○ 内製のE2E監視デーモン
○ etc.
20
その他の基盤ツール・システム
➢ プロダクション環境で動作:
○ m3.com 会員認証
■ API
■ OpenID
○ ログイン攻撃検知API … ツールによるアクセスなどを遮断
○ メール送信API
➢ In-houseなもの:
○ LDAP … 社内システムの認証用
○ Gistub … Gistクローン。GitLabだとSnippets
21
まとめ
まとめ〜入社3ヶ月を経て〜
➢ レガシー化したシステムもあるが、新しい技術も積極
的に取り入れている
○ リニューアル案件も複数走っている
■ 例: 10年前のレガシーシステムをサーバーサイドKotlinでフルリニューア
ルしている話
➢ 共通基盤が整っている
○ 基盤チームによる横断ツールの開発、メンテ、サポート
○ サービス側で車輪を再開発しなくていい
➢ SREが足りない!
○ 専任のSRE/インフラ要員は3人
○ SREチーム立ち上げ中
23
We are hiring!
➢ https://corporate.m3.com/recruit/job/engineering/
➢ Tech Talk (月2回)やカジュアル面談にぜひお越し下さい!!
24
ご清聴ありがとうございました。

M3の医療webサービス群を支える基盤技術