Slide 1

Slide 1 text

© 2023 Cookpad Inc. みんなの経験から学ぶ、マイクロサービス LT大会 @Findy マイクロサービス化の功罪と レシピサービスのリアーキテクティング クックパッド株式会社 宮崎広夢(@hilinker)

Slide 2

Slide 2 text

© 2022 Cookpad Inc. 2 2021年新卒でクックパッドに入社。 現在は主にレシピサービスの基盤周りを見 ている。TypeScript が好き。 自己紹介 宮崎広夢(@hilinker)

Slide 3

Slide 3 text

© 2022 Cookpad Inc. 3 ● 超巨大モノリス時代のクックパッド ● クックパッドのマイクロサービス化 ● マイクロサービスにして良かったこと・悪かったこと ● クックパッドのマイクロサービス化は「成功」だったのか ● アーキテクチャの再考 今日話すこと

Slide 4

Slide 4 text

© 2022 Cookpad Inc. 4 ● 料理レシピサービス ● 複数プラットフォームで提供 ○ Web (PC・スマートフォン) ○ Android・iOS アプリ ● 歴史の長いサービス ● 技術的負債やレガシーも多い クックパッドのレシピサービス

Slide 5

Slide 5 text

© 2023 Cookpad Inc. 5 1,500,000

Slide 6

Slide 6 text

© 2023 Cookpad Inc. 6 2017年時点の cookpad_all レポジトリのコード行数

Slide 7

Slide 7 text

© 2022 Cookpad Inc. 7 cookpad_all に全てがあった時代(2017年ごろ)

Slide 8

Slide 8 text

© 2023 Cookpad Inc. 8 デカすぎて開発不可

Slide 9

Slide 9 text

© 2022 Cookpad Inc. 9 ● どこを触るとどこに影響があるか分からない ● 関わる人が多すぎる ○ 施策の衝突が多発 ○ 負債が増え続けて解消が間に合わない ● 保守運用(ライブラリの更新やリファクタリング)が超絶大変 デカすぎて開発不可

Slide 10

Slide 10 text

© 2023 Cookpad Inc. 10 そうだ! マイクロサービスに切り分けよう!

Slide 11

Slide 11 text

© 2022 Cookpad Inc. 11 マイクロサービス時代

Slide 12

Slide 12 text

© 2022 Cookpad Inc. 12 ● 巨大モノリスを複数の機能・モデル単位でマイクロサービスに分割 ● 新規開発もどんどんマイクロサービスを作ろう! ● BFF の導入 ○ Backend For Frontend ○ フロントエンドのため API を集約し、UI/UX 上のデータ整形を行うオーケスト レーション層の1種 マイクロサービス時代

Slide 13

Slide 13 text

© 2022 Cookpad Inc. 13 マイクロサービス時代

Slide 14

Slide 14 text

© 2022 Cookpad Inc. 14 ● 何を変更すると何に影響があるか全く見通しが立たない、 クソデカモノリスを触る必要性が減った ● 機能開発のスピードを出しやすくなった ● ライブラリやミドルウェアの更新などがしやすくなった ● 部署ごとに責任範囲が分割された ● 開発環境の進化が加速した ○ サービスメッシュ、分散トレーシング、耐障害性のある設計などなど マイクロサービス化して良かったこと

Slide 15

Slide 15 text

© 2023 Cookpad Inc. 15 マイクロサービス最高やん!

Slide 16

Slide 16 text

© 2023 Cookpad Inc. 16 現実

Slide 17

Slide 17 text

© 2022 Cookpad Inc. 17 ● 分割をミスって結合が密なデータが泣き別れる ● マイクロサービスが多いとそれだけ保守運用しなければいけないアプリケーションが 増える ○ たとえば、Rails の EOL 対応を全てのマイクロサービスについてやる ● BFF がロジック盛り盛りで肥大化 ● 組織改変でマイクロサービスのオーナーシップが破滅 ○ 1チームが 10 個も 20 個もマイクロサービスを持っていたり、 誰もオーナーシップを持っていない開発もされていないマイクロサービスが爆 誕 マイクロサービス、つらくね?

Slide 18

Slide 18 text

© 2023 Cookpad Inc. 18 つらい

Slide 19

Slide 19 text

© 2022 Cookpad Inc. 19 ● 失敗か成功かで言うと「失敗」だった ● 認証基盤、決済基盤などマイクロサービス化に成功したものもあった ● 開発環境の進化など、得たものもたくさんあった ● 失敗原因 ○ 組織の形にマイクロサービスのアーキテクチャを追従できなかった ○ 必要以上にマイクロサービスを分割しすぎた ○ モノリスの開発しにくさをマイクロサービス化(だけ)で解決しようとした クックパッドのマイクロサービス化は……

Slide 20

Slide 20 text

© 2022 Cookpad Inc. 20 ● マイクロサービスは組織の構造とセット ○ コンウェイの法則 ○ ドメイン単位で組織(開発チーム)を分割し、組織単位で少数のマイクロサービ スを持つ ● 負債返済の手段としてマイクロサービス化をするのは待った方が良い ○ 機能を減らす、アプリケーション内の結合を疎にするなどの方が効果的な可能 性がある ○ メンテナンスコストの爆発を受容できるか 学び

Slide 21

Slide 21 text

© 2022 Cookpad Inc. 21 ● レシピサービス全体のリアーキテクティングをしている ● 重要度の低い機能・マイクロサービスの廃統合 ● マイクロサービスのオーナーシップの整理 ● アプリケーションの責務の整理 ● BFF の退役と GraphQL を採用した新しい API Gateway へのリプレイス クックパッドは今何をしているか

Slide 22

Slide 22 text

© 2023 Cookpad Inc. 22 マイクロサービスは 用量用法を守ろう

Slide 23

Slide 23 text

© 2022 Cookpad Inc. 23

Slide 24

Slide 24 text

© 2022 Cookpad Inc. 24 ● Cookpad TechConf 2022 発表資料『巨大なレシピサービスを最高にしたい』 ○ https://speakerdeck.com/hmiyazaki/cookpad-techconf-2022-about-pj-tak anawa-hiromu-miyazaki ● 『マイクロサービス宣言から8年 振り返りとこれから』 ○ https://speakerdeck.com/eisuke/eight-years-after-the-microservices-decla ration-a-look-back-and-a-look-ahead 参考資料