Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
Kazuhito Hokamura
March 23, 2019
Technology
3
3.1k
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
Kazuhito Hokamura
March 23, 2019
Tweet
Share
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
RailsエンジニアのためのNext.js入門
hokaccha
6
8.9k
Cookpad Summer Internship 2021 Web Frontend
hokaccha
0
5.7k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
630
Web Frontend Improvement in Cookpad
hokaccha
1
620
cookpad summer internship 2018 - Git
hokaccha
1
9.1k
cookpad summer internship 2018 - JavaScript
hokaccha
0
9k
エンジニアのアウトプットと採用 / Engineer's output and recruiting
hokaccha
0
1.4k
ログを活用したサービス開発
hokaccha
2
6.5k
BdashにおけるFlux設計
hokaccha
4
5k
Other Decks in Technology
See All in Technology
失敗から学ぶAWSコスト管理入門 ~想定の50倍以上の請求がきた話~
msato
0
420
BFFとmicroservicesアーキテクチャ
hirac1220
0
110
Embedded SRE at Mercari
tcnksm
0
850
220521_SFN_品質文化試論と『LEADING QUALITY』/220521_SFN_Essay_of_Quality_Culture_and_LEADING_QUALITY
mkwrd
0
280
數據的多重宇宙 @ LINE Taiwan
line_developers_tw
PRO
0
690
ドキュメントの翻訳に必要なこと
mayukosawai
0
170
モダンデータスタックとかの話(データエンジニアのお仕事とは)
foursue
0
430
[SRE NEXT 2022]ヤプリのSREにおけるセキュリティ強化の取り組みを公開する
mmochi23
1
600
Stripe Search APIを利用した、LINEとStripeの顧客情報連携/line-dc-202205
stripehideokamoto
0
130
事業の成長と共に歩む、ABEMA SRE探求の歴史 / SRE-Next 2022
nagaa052
0
280
Spotify物理コントローラーがほしい
miso
0
170
LINEのData Platform室が実践する大規模分散環境のCapacity Planning
line_developers
PRO
0
560
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
272
32k
How STYLIGHT went responsive
nonsquared
85
3.9k
Visualization
eitanlees
124
11k
Building a Scalable Design System with Sketch
lauravandoore
447
30k
GraphQLの誤解/rethinking-graphql
sonatard
24
6.2k
The World Runs on Bad Software
bkeepers
PRO
56
5.2k
Scaling GitHub
holman
451
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
Optimizing for Happiness
mojombo
365
63k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
103
16k
Producing Creativity
orderedlist
PRO
333
37k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_i
21
14k
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...
まとめ
マイクロサービスは難しい
しかしサービスの成長のためには目を背けることが できないのでやっていってます
ありがとうございました