SlideShare a Scribd company logo
1 of 17
© Kakaku.com Inc. All Rights Reserved. 1
足場固めからやるマイクロサービス
株式会社カカクコム
食べログシステム本部 技術部 マイクロサービス化チーム
栗山友樹
2022年07月27日(水)
© Kakaku.com Inc. All Rights Reserved. 2
栗山 友樹 (Qiita@weakboson)
マイクロサービス化チームリーダー兼テックリード
食べログではサービス開発、DevOpsを経て2019年からマイクロサービス
化チーム
マイクロサービス化チームの最近の活動
• 食べログのレストラン検索を支える Debezium と Apache Kafka – Qiita
(Change Data Capture によるデータ同期改善)
• 食べログの内製Pub/Subメッセージング基盤をApache Kafkaにリプレ
イスした話 – Qiita
• 分散トレーシング導入
• 本番コード実行カバレッジの BigQuery + Tableau による可視化
© Kakaku.com Inc. All Rights Reserved. 3
目次 1. 食べログについて
2. 食べログマイクロサービス化の変遷
3. 大規模なレガシーシステムを段階的
に改善する取り組み
4. マイクロサービス基盤カタログ
5. 冒険者と武器屋型モデル
© Kakaku.com Inc. All Rights Reserved. 4
1. 食べログについて
日本最大級のレストラン検索・予約サイト
• 約8800万 MAU (2022年3月)
• レストランの口コミ、写真
• レストランのネット予約
• 飲食店DX (予約台帳、食べログオーダー、食べログ仕入)
• お取り寄せEC (食べログモール)
© Kakaku.com Inc. All Rights Reserved. 5
2. 食べログマイクロサービス化の変遷
• マイクロサービス化に振り回され期 – before 2019
• サービスのAPI化・システムの分割を目的としてしまった(あるある)
• ある程度成功したが、結果的に大きな失敗もあった
• 「分散されたモノリス」アンチパターンになった
• マイクロサービス化は手段と悟り期 – after 2019
• サービスのAPI化・システムの分割は手段と再認識した
• 現状課題の可視化・分析
• PoC と PDCA を繰り返して、失敗は小さく早めに済ませるようにした
© Kakaku.com Inc. All Rights Reserved. 6
「分散されたモノリス」アンチパターン
サービス間の過度な密結合が引き起こす問題は、コードの重複が起こす問題よりも悪質です。
分散されたモノリスになってしまうマイクロサービス - InfoQ
①ある機能が複数のリポジトリをまたいで成立している
• ドメイン境界が正しく切り分けられていないことで、
複数リポジトリのメンテナンスが必要になってしまった
②共有DBのメンテナンスが煩雑
• 過渡期限定の予定が長期化…
• テーブルの所有権が不明瞭で、ALTERで障害を起こ
すリスク
共有ライブラリの”機能α”をDBを共有するAPIとして切
り出したのだが、サブシステム業務Aは共有ライブラリ
からAPIに切り替えができず、分散されたモノリスに
なってしまった。
具体的に起こった課題
© Kakaku.com Inc. All Rights Reserved. 7
改善の過渡期は非常に長いので、レガシーなシス
テム基盤のままアプリケーション改善をはじめる
と、過渡期が苦しくなり失敗しやすい。
ビジネス案件の成功が至上命題である開発チームにとって、ビ
ジネスインパクトのない改善に、主体性を持って取り組むのは
難しいです。
食べログの大規模なエンジニア組織を段階的に改善していく取り組み - Qiita
© Kakaku.com Inc. All Rights Reserved. 8
マイクロサービス化は手段であって、
高凝集・疎結合で、少人数で自律的に開発・運用できるシステ
ムへのリファクタリングが目的。
ということで、現在はシステムの分割は一休み、積極的には推進してませ
ん。
では、何をしているのか?
© Kakaku.com Inc. All Rights Reserved.
大規模なレガシーシステムを段階的に改善する取り組み
食べログの大規模なレガシーシステムを段階的に改善していく取り組み - Qiita
© Kakaku.com Inc. All Rights Reserved.
STEP 1 - システムの変更容易性と変更安全性を高める
当時の姿 (As Is) 目指す姿 (To Be) 手段 (How) 遂行チーム
VMベースでインフラ変更
に弱いプラットフォーム
インフラ変更に強いイ
ミュータブルなインフラ
Kubernetes +
GitOps
SREチーム
5分ごとにしか収集されな
いメトリクス監視
秒単位で収集できるメト
リクス監視
Prometheus +
Thanos, NewRelic
SREチーム
レガシーな基盤技術 分散システムを運用でき
るモダンな基盤技術
マイクロサービス基盤
Apache Kafka,
Change Data
Capture, 分散ト
レーシング,
GraphQL
マイクロサービス化
チーム
などなど、課題解決のための技術スタックは似ているが、チームのスコープを決
めて集中して課題解決していく。
© Kakaku.com Inc. All Rights Reserved.
4. マイクロサービス基盤カタログ
書籍「マイクロサービスアーキテクチャ」や他社事例、現状の課題から食べロ
グに必要なシステム基盤をカタログ化する。
© Kakaku.com Inc. All Rights Reserved.
マイクロサービス基盤カタログ
小さく検証・運用をはじめて、うまくいったら導入を拡大していく。
© Kakaku.com Inc. All Rights Reserved.
マイクロサービス基盤の事例: データ同期基盤 before
当時の状況 目標
処理間隔 15分 リアルタイム
全件更新所要時間 16日 8時間
• 検索エンジンの仕様を変更するのが怖い
• 企画の要望に応えづらい
レガシーでパフォーマンスが悪い
© Kakaku.com Inc. All Rights Reserved.
マイクロサービス基盤の事例: データ同期基盤 after
当時の状況 目標 変更後 改善率
処理間隔 15分 リアルタイム リアルタイム
全件更新所要時間 16日 8時間 3.5時間 約110倍
• 検索エンジンの仕様変更がしやすくなる
• 企画の要望に応えやすくなる
モダンな基盤に刷新してパフォーマンスを暴上げ
© Kakaku.com Inc. All Rights Reserved. 15
システム基盤の改善からはじめると、過渡期にも
メリットが得られて嬉しい。
検索インデックス同期の改善は、開発チームがよくぼやいてい
たので、技術部から持ちかけて合同で進めました。
ビジネスインパクトのある基盤技術を提供すると、開発チーム
も主体性を持って、改善に取り組みやすくなります。
© Kakaku.com Inc. All Rights Reserved. 16
5. 冒険者と武器屋型モデル
食べログの大規模なエンジニア組織を段階的に改善していく取り組み - Qiita
技術部 (武器屋)
• SREチーム
• マイクロサービス化チーム
• Developer Productivityチーム
• Data Scientistチーム
基盤技術 (武器)
• Kubernetes
• Change Data Capture
• Pub/Subメッセージング
• 自動テスト基盤
開発エンジニア (冒険者)
• ウェブ開発部
• 飲食店システム開発部
事業開発を担う部門と技術開発を担う部門が、互いに主体性を持ちながら協調的に取り組む組織設計
© Kakaku.com Inc. All Rights Reserved.
締め - 足場固めからやるマイクロサービスとは?
「システム全体をモダンなインフラ基盤に刷新
することで、変更安全性と変更容易性を高め
る」ことからはじめるシステム改善

More Related Content

What's hot

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
JAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DBJAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DBDaiyu Hatakeyama
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 

What's hot (20)

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
JAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DBJAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DB
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 

Similar to Qiita Night 足場固めからやるマイクロサービス

[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonightAmazon Web Services Japan
 
Microsoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後についてMicrosoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後についてIIJ
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話Yuji Oshima
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとはKoto Shigeru
 
リクルートのビッグデータ活用基盤とデータ活用に向けた取組み
リクルートのビッグデータ活用基盤とデータ活用に向けた取組みリクルートのビッグデータ活用基盤とデータ活用に向けた取組み
リクルートのビッグデータ活用基盤とデータ活用に向けた取組みRecruit Technologies
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へCybozucommunity
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションオラクルエンジニア通信
 
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介LINE Corporation
 
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力![DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!オラクルエンジニア通信
 
Circle of Code with Cloud Foundry
Circle of Code with Cloud FoundryCircle of Code with Cloud Foundry
Circle of Code with Cloud FoundryTomohiro Ichimura
 
Azuredevopsakskeda
AzuredevopsakskedaAzuredevopsakskeda
AzuredevopsakskedaTsukasa Kato
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイiwata jaws-ug
 
API Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップAPI Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップCA Technologies
 
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析QlikPresalesJapan
 
20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回Keiji Kamebuchi
 
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!Masahiro Tomisugi
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発政雄 金森
 

Similar to Qiita Night 足場固めからやるマイクロサービス (20)

[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
 
Microsoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後についてMicrosoft MVP から見たクラウド サービスの現状と今後について
Microsoft MVP から見たクラウド サービスの現状と今後について
 
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
 
リクルートのビッグデータ活用基盤とデータ活用に向けた取組み
リクルートのビッグデータ活用基盤とデータ活用に向けた取組みリクルートのビッグデータ活用基盤とデータ活用に向けた取組み
リクルートのビッグデータ活用基盤とデータ活用に向けた取組み
 
インフラチームの歴史とこれから
インフラチームの歴史とこれからインフラチームの歴史とこれから
インフラチームの歴史とこれから
 
2018 07-19dist
2018 07-19dist2018 07-19dist
2018 07-19dist
 
クラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へクラウド鎖国からクラウド維新へ
クラウド鎖国からクラウド維新へ
 
Autonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーションAutonomous を支える技術、Oracle Database 18c デモンストレーション
Autonomous を支える技術、Oracle Database 18c デモンストレーション
 
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
 
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力![DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
 
Circle of Code with Cloud Foundry
Circle of Code with Cloud FoundryCircle of Code with Cloud Foundry
Circle of Code with Cloud Foundry
 
Katib
KatibKatib
Katib
 
Azuredevopsakskeda
AzuredevopsakskedaAzuredevopsakskeda
Azuredevopsakskeda
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
API Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップAPI Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップ
 
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
 
20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回20150704 MS Azure最新 - innovation egg 第4回
20150704 MS Azure最新 - innovation egg 第4回
 
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!
20150831 Couchbase Tokyo 2015 [Mobile] 端末の位置情報をフル活用でSFAはモバイルベースに!
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 

Qiita Night 足場固めからやるマイクロサービス

  • 1. © Kakaku.com Inc. All Rights Reserved. 1 足場固めからやるマイクロサービス 株式会社カカクコム 食べログシステム本部 技術部 マイクロサービス化チーム 栗山友樹 2022年07月27日(水)
  • 2. © Kakaku.com Inc. All Rights Reserved. 2 栗山 友樹 (Qiita@weakboson) マイクロサービス化チームリーダー兼テックリード 食べログではサービス開発、DevOpsを経て2019年からマイクロサービス 化チーム マイクロサービス化チームの最近の活動 • 食べログのレストラン検索を支える Debezium と Apache Kafka – Qiita (Change Data Capture によるデータ同期改善) • 食べログの内製Pub/Subメッセージング基盤をApache Kafkaにリプレ イスした話 – Qiita • 分散トレーシング導入 • 本番コード実行カバレッジの BigQuery + Tableau による可視化
  • 3. © Kakaku.com Inc. All Rights Reserved. 3 目次 1. 食べログについて 2. 食べログマイクロサービス化の変遷 3. 大規模なレガシーシステムを段階的 に改善する取り組み 4. マイクロサービス基盤カタログ 5. 冒険者と武器屋型モデル
  • 4. © Kakaku.com Inc. All Rights Reserved. 4 1. 食べログについて 日本最大級のレストラン検索・予約サイト • 約8800万 MAU (2022年3月) • レストランの口コミ、写真 • レストランのネット予約 • 飲食店DX (予約台帳、食べログオーダー、食べログ仕入) • お取り寄せEC (食べログモール)
  • 5. © Kakaku.com Inc. All Rights Reserved. 5 2. 食べログマイクロサービス化の変遷 • マイクロサービス化に振り回され期 – before 2019 • サービスのAPI化・システムの分割を目的としてしまった(あるある) • ある程度成功したが、結果的に大きな失敗もあった • 「分散されたモノリス」アンチパターンになった • マイクロサービス化は手段と悟り期 – after 2019 • サービスのAPI化・システムの分割は手段と再認識した • 現状課題の可視化・分析 • PoC と PDCA を繰り返して、失敗は小さく早めに済ませるようにした
  • 6. © Kakaku.com Inc. All Rights Reserved. 6 「分散されたモノリス」アンチパターン サービス間の過度な密結合が引き起こす問題は、コードの重複が起こす問題よりも悪質です。 分散されたモノリスになってしまうマイクロサービス - InfoQ ①ある機能が複数のリポジトリをまたいで成立している • ドメイン境界が正しく切り分けられていないことで、 複数リポジトリのメンテナンスが必要になってしまった ②共有DBのメンテナンスが煩雑 • 過渡期限定の予定が長期化… • テーブルの所有権が不明瞭で、ALTERで障害を起こ すリスク 共有ライブラリの”機能α”をDBを共有するAPIとして切 り出したのだが、サブシステム業務Aは共有ライブラリ からAPIに切り替えができず、分散されたモノリスに なってしまった。 具体的に起こった課題
  • 7. © Kakaku.com Inc. All Rights Reserved. 7 改善の過渡期は非常に長いので、レガシーなシス テム基盤のままアプリケーション改善をはじめる と、過渡期が苦しくなり失敗しやすい。 ビジネス案件の成功が至上命題である開発チームにとって、ビ ジネスインパクトのない改善に、主体性を持って取り組むのは 難しいです。 食べログの大規模なエンジニア組織を段階的に改善していく取り組み - Qiita
  • 8. © Kakaku.com Inc. All Rights Reserved. 8 マイクロサービス化は手段であって、 高凝集・疎結合で、少人数で自律的に開発・運用できるシステ ムへのリファクタリングが目的。 ということで、現在はシステムの分割は一休み、積極的には推進してませ ん。 では、何をしているのか?
  • 9. © Kakaku.com Inc. All Rights Reserved. 大規模なレガシーシステムを段階的に改善する取り組み 食べログの大規模なレガシーシステムを段階的に改善していく取り組み - Qiita
  • 10. © Kakaku.com Inc. All Rights Reserved. STEP 1 - システムの変更容易性と変更安全性を高める 当時の姿 (As Is) 目指す姿 (To Be) 手段 (How) 遂行チーム VMベースでインフラ変更 に弱いプラットフォーム インフラ変更に強いイ ミュータブルなインフラ Kubernetes + GitOps SREチーム 5分ごとにしか収集されな いメトリクス監視 秒単位で収集できるメト リクス監視 Prometheus + Thanos, NewRelic SREチーム レガシーな基盤技術 分散システムを運用でき るモダンな基盤技術 マイクロサービス基盤 Apache Kafka, Change Data Capture, 分散ト レーシング, GraphQL マイクロサービス化 チーム などなど、課題解決のための技術スタックは似ているが、チームのスコープを決 めて集中して課題解決していく。
  • 11. © Kakaku.com Inc. All Rights Reserved. 4. マイクロサービス基盤カタログ 書籍「マイクロサービスアーキテクチャ」や他社事例、現状の課題から食べロ グに必要なシステム基盤をカタログ化する。
  • 12. © Kakaku.com Inc. All Rights Reserved. マイクロサービス基盤カタログ 小さく検証・運用をはじめて、うまくいったら導入を拡大していく。
  • 13. © Kakaku.com Inc. All Rights Reserved. マイクロサービス基盤の事例: データ同期基盤 before 当時の状況 目標 処理間隔 15分 リアルタイム 全件更新所要時間 16日 8時間 • 検索エンジンの仕様を変更するのが怖い • 企画の要望に応えづらい レガシーでパフォーマンスが悪い
  • 14. © Kakaku.com Inc. All Rights Reserved. マイクロサービス基盤の事例: データ同期基盤 after 当時の状況 目標 変更後 改善率 処理間隔 15分 リアルタイム リアルタイム 全件更新所要時間 16日 8時間 3.5時間 約110倍 • 検索エンジンの仕様変更がしやすくなる • 企画の要望に応えやすくなる モダンな基盤に刷新してパフォーマンスを暴上げ
  • 15. © Kakaku.com Inc. All Rights Reserved. 15 システム基盤の改善からはじめると、過渡期にも メリットが得られて嬉しい。 検索インデックス同期の改善は、開発チームがよくぼやいてい たので、技術部から持ちかけて合同で進めました。 ビジネスインパクトのある基盤技術を提供すると、開発チーム も主体性を持って、改善に取り組みやすくなります。
  • 16. © Kakaku.com Inc. All Rights Reserved. 16 5. 冒険者と武器屋型モデル 食べログの大規模なエンジニア組織を段階的に改善していく取り組み - Qiita 技術部 (武器屋) • SREチーム • マイクロサービス化チーム • Developer Productivityチーム • Data Scientistチーム 基盤技術 (武器) • Kubernetes • Change Data Capture • Pub/Subメッセージング • 自動テスト基盤 開発エンジニア (冒険者) • ウェブ開発部 • 飲食店システム開発部 事業開発を担う部門と技術開発を担う部門が、互いに主体性を持ちながら協調的に取り組む組織設計
  • 17. © Kakaku.com Inc. All Rights Reserved. 締め - 足場固めからやるマイクロサービスとは? 「システム全体をモダンなインフラ基盤に刷新 することで、変更安全性と変更容易性を高め る」ことからはじめるシステム改善

Editor's Notes

  1. 株式会社カカクコムの栗山です。 よろしくお願いします。
  2. サクッと私の自己紹介です。 Qiita では id: weakboson として活動してます。 2019年からマイクロサービス化チームでやってます。 最近のお仕事は一部Qiitaで公開しています。 本日は個々の技術情報は触りの説明になるので、詳細にご興味ある方はQiita記事の方をご覧ください。
  3. 本日のお品書きでございます。 食べログの紹介、マイクロサービス化の変遷をお話した後、大規模なレガシーシステムを段階的改善する取り組みについて紹介します。 <目次の後半は食べログの独自ボキャブラリなので、この時点では話さない>
  4. 最初に食べログの紹介をさせてください。 食べログは日本最大級のレストラン検索・予約サイトで、レストランの口コミや予約の他に、現在は飲食店DX、モバイルオーダーや食材の仕入、それにお取り寄せECの食べログモールもやっておりまして、外食産業のインフラ、エコシステムのようなサービスになってきています。 飲食店DXはIoTもあったりして技術的にもサービス的にもおもしろいので、別の機会に紹介できたらなと思います。
  5. 食べログは2019年以前にシステム分割を試みたのですが、いわゆる「分散されたモノリス」アンチパターンに陥りまして、この路線で継続すると過渡期が辛いという理解に至りました。 各所でさんざん言われてますし、そうならないように気をつけてはいましたが、結果的にはマイクロサービス化を目的として取り違えていたのだと思います。 敢えて名付けるならマイクロサービス化に振り回され期でしょうか。 そこで2019年から方針転換しまして、マイクロサービス化は手段であると悟り、現状に至ります。
  6. 分散されたモノリスはドメインを整理する前にシステムを分割すると陥りやすいアンチパターンです。 <スライドのテキストそのまま話す>
  7. <スライドそのまま>
  8. <スライド内容そのまま>
  9. そんなわけでここからは食べログの現在のシステム改善の取り組み方、戦略のお話になります。 これ食べログシステム本部長の京和が2020年のアドベントカレンダーに投稿してなかなか好評を博した記事からの抜粋なんですが、 まずSTEP1、システムの変更容易性、変更安全性を高める、システムがアジリティを備えた状態にするというのが第一ですね。 アジャイル開発、アジャイルな計画と言われますが、レガシーなアプリケーションに対しては適用しづらいので、まずはシステム基盤をアジャイルにする戦略です。 例えばカナリアリリース、Blue/Greenデプロイができると障害があったときに影響を小さく短時間にできるので、調査しきれない未知のリスクに対してリスクテイクするという選択肢がとれます。 これが切り替えは全システム同時だとか、リバートに30分かかるとかだと、リスクをテイクするって選択肢はないわーということになっちゃいますよね。
  10. STEP1を詳しくいきますね。 レガシーな当時のシステムAs Is に対して目指す姿 To Be を定義し、解決する手段 How を考え、各チームがミッションとして遂行していきます。 イミュータブルインフラ、メトリクス監視・可視化といったところは弊社ではSREが、基盤技術の刷新についてはマイクロサービス化チームが担当しています。
  11. システム基盤の刷新をどうやって進めてきたかなんですが、 最初に必要そうな基盤をリストアップしてカタログ化するところからはじめました。 書籍マイクロサービスアーキテクチャとか他社事例、現状の課題から、必要な基盤技術の設計図を描き、それをリスト化してカタログにします。 右が2020年1月の、まずリストアップした状態です。
  12. そして小さく検証・運用をはじめて、うまくいったら導入を拡大していく。 左が2021年3月の状態でまだ PoC や運用前が多いのですが、右の2022年3月になるとかなり運用中が増えてきてます。 その中で導入プロダクトも変わったものもあります。導入してみたけれど合わないときには、PoC や導入箇所が少ないうちに最適な別のものに変えます。 これが小さく失敗するということですかね。
  13. システム基盤としてかなりうまくいった事例の一つとしてデータ同期基盤を少しだけ深堀りして紹介します。 この改善の前、食べログのデータ同期基盤のパフォーマンスが悪くて、全件更新に概算で16日かかる問題がありました。 更新を駆動する仕組みもレガシーで15分間隔でスケジュールされたcronバッチでした。 たとえば食べログは昔口コミを200文字以上書かないとレビュアーページ以外に表示されなくて、 検索にもヒットしない仕様だったんですが、短い口コミも掲載したい、検索したいという企画が出てきても、なかなか「できます」と言いづらい状況でした。
  14. で、実際どういうアプローチをとったかというと、 DBの差分を低レイテンシ・低負荷で抽出できる Change Data Capture という技術で差分検出時間を短縮して、 イベント駆動にして Consumer の並列数を上げてスループットを向上させました。
  15. <スライド内容そのまま>
  16. これも弊社の京和が去年のアドベントカレンダーに投稿した記事からの抜粋なのですが、 技術部が武器として基盤技術を提供して、開発エンジニアが実際の改善を行う座組のことを、「冒険者と武器屋型モデル」と呼んでいます。 実際社内でもきちんと浸透してる概念で、マイクロサービス化チームはよく「武器屋の人」とか言われてます。
  17. というわけで締めなんですが、このLTのタイトル「足場固めからやるマイクロサービス」とは何か?というと、 いまの食べログシステム改善戦略のSTEP1、「システム全体をモダンなインフラ基盤に刷新することで、変更安全性と変更容易性を高める」ことからはじめるシステム改善ってことになります。