Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 mi...
Search
Kazuhito Hokamura
March 23, 2019
Technology
4.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
Kazuhito Hokamura
March 23, 2019
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
TypeScriptとGraphQLで実現する 型安全なAPI実装 / TSKaigi 2024
hokaccha
5
5.2k
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
hokaccha
0
3.8k
GraphQLの負債と向き合うためにやっていること
hokaccha
2
1.7k
ユビーのアーキテクチャに対する取り組み
hokaccha
1
500
RailsエンジニアのためのNext.js入門
hokaccha
7
22k
Cookpad Summer Internship 2021 Web Frontend
hokaccha
0
7.4k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
1.1k
Web Frontend Improvement in Cookpad
hokaccha
1
1.2k
cookpad summer internship 2018 - Git
hokaccha
1
9.8k
Other Decks in Technology
See All in Technology
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
140
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
300
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
250
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
2
450
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
110
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
270
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
580
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
250
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
620
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
330
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
3
1.4k
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
Believing is Seeing
oripsolob
1
210
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Code Reviewing Like a Champion
maltzj
528
40k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.7k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Mobile First: as difficult as doing things right
swwweet
225
10k
GitHub's CSS Performance
jonrohan
1033
470k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
690
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 Rails Developers Meetup 2019 @hokaccha
•Kazuhito Hokamura • @hokaccha • Cookpad Inc. • Lead of
service infra team • Nodebrew, Adventar
None
αʔϏε։͔࢝ΒҎ্ 3BJMTԽͯ͠Ҏ্
$ cloc . -------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------
Ruby 7499 96381 16074 507178 Haml 4494 14510 592 129029 Sass 1010 19237 543 120166 Markdown 223 6888 0 65316 XML 88 25 30 59334 JavaScript 269 8097 10565 51189 YAML 75 878 668 36879 ERB 911 3927 83 25839 CoffeeScript 409 2860 405 16211 CSS 10 175 64 5992 ... -------------------------------------------------------------------------------- SUM: 15200 154731 31233 1025936 --------------------------------------------------------------------------------
0EBJCB1SPKFDU
取り組み •コード削除 •コンテナ化 •システム分離
None
コンテナ化
None
DPPLQBE@BMM DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ
DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ
QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ
QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
システム分離
None
データの切れ目で分離する
•30以上の異なる DB への接続 •10以上の異なる Redis への接続 •他にも Solr, GDBM など
システム分離ケーススタディ
1. 検索システム
検索システム •クックパッドの検索を支えるシステム •Solr をバックエンドにしている •すごく複雑なドメインロジックの塊
None
2. 料理きろく
料理きろく •料理の写真だけを自動で判別して記録 •クックパッドアプリの1機能 •DB は別だがコードは cookpad_all に 含まれていた
移行前 NBJO DPPLJOH@MPH 1BOUSZ
移行中 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH
移行後 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH
3. モバれぴ
モバれぴ •ガラケー向けのサイト •機能追加やメンテナンスはほぼしていない •アクティブなユーザは健在 •cookpad_all から切り出してフリーズ させることを決断
最新の技術で動くガラケーサイトに... •Ruby 2.6 •Rails 5.2 •Docker / ECS •Service Mesh
•gRPC
移行手順 /FX 0ME Ұ୴ͯ͢ͷϦΫΤετΛ৽αʔόʔʹྲྀ͢
移行手順 /FX 0ME ࣮͍ͯ͠ΔΤϯυϙΠϯτ ͦͷ··ॲཧͯ͠ϨεϙϯεΛฦ͢
移行手順 /FX 0ME ະ࣮ͷΤϯυϙΠϯτΛฦ͢
移行手順 /FX 0ME /HJOY͕Λड͚औͬͨΒ چαʔόʔʹϑΥʔϧόοΫ ະ࣮ͷΤϯυϙΠϯτΛฦ͢
͜͜ΒΜͰΓସ͑
Webフロントエンド
$ cloc . -------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------
Ruby 7499 96381 16074 507178 Haml 4494 14510 592 129029 Sass 1010 19237 543 120166 Markdown 223 6888 0 65316 XML 88 25 30 59334 JavaScript 269 8097 10565 51189 YAML 75 878 668 36879 ERB 911 3927 83 25839 CoffeeScript 409 2860 405 16211 CSS 10 175 64 5992 ... -------------------------------------------------------------------------------- SUM: 15200 154731 31233 1025936 --------------------------------------------------------------------------------
$ cloc . -------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------
Ruby 7499 96381 16074 507178 Haml 4494 14510 592 129029 Sass 1010 19237 543 120166 Markdown 223 6888 0 65316 XML 88 25 30 59334 JavaScript 269 8097 10565 51189 YAML 75 878 668 36879 ERB 911 3927 83 25839 CoffeeScript 409 2860 405 16211 CSS 10 175 64 5992 ... -------------------------------------------------------------------------------- SUM: 15200 154731 31233 1025936 --------------------------------------------------------------------------------
レガシーな開発環境 •CoffeeScript •Zepto •Asset Pipeline •vendor/assets によるライブラリ管理
$ cloc . -------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------
Ruby 7499 96381 16074 507178 Haml 4494 14510 592 129029 Sass 1010 19237 543 120166 Markdown 223 6888 0 65316 XML 88 25 30 59334 JavaScript 269 8097 10565 51189 YAML 75 878 668 36879 ERB 911 3927 83 25839 CoffeeScript 409 2860 405 16211 CSS 10 175 64 5992 ... -------------------------------------------------------------------------------- SUM: 15200 154731 31233 1025936 --------------------------------------------------------------------------------
$ cloc . -------------------------------------------------------------------------------- Language files blank comment code --------------------------------------------------------------------------------
Ruby 7499 96381 16074 507178 Haml 4494 14510 592 129029 Sass 1010 19237 543 120166 Markdown 223 6888 0 65316 XML 88 25 30 59334 JavaScript 269 8097 10565 51189 YAML 75 878 668 36879 ERB 911 3927 83 25839 CoffeeScript 409 2860 405 16211 CSS 10 175 64 5992 ... -------------------------------------------------------------------------------- SUM: 15200 154731 31233 1025936 --------------------------------------------------------------------------------
None
None
None
None
• クックパッドでは1ページに複数の機能が混在 するようなケースは少ない • コントローラー単位ぐらいで分けるのがいいのでは
"HHSJHBUJPO-BZFS FH(SBQI2- BFFで分割するパターン ,JUDIFO #BDLFOE #BDLFOE 'SPOUFOE 4FBSDI #BDLFOE 6TFS
#BDLFOE 3FDJQF #BDLFOE ,JUDIFO 'SPOUFOE 4FBSDI 'SPOUFOE 3FDJQF 'SPOUFOE
課題 •ページ間でのUIの統一 •共通コンポーネントの管理 •ページをまたいだ施策はどうする •セッション、Cookie、ログ、etc...
まとめ
マイクロサービスは難しい
しかしサービスの成長のためには目を背けることが できないのでやっていってます
ありがとうございました