巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
by
Kazuhito Hokamura
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 Rails Developers Meetup 2019 @hokaccha
Slide 2
Slide 2 text
•Kazuhito Hokamura • @hokaccha • Cookpad Inc. • Lead of service infra team • Nodebrew, Adventar
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
αʔϏε։͔࢝ΒҎ্ 3BJMTԽͯ͠Ҏ্
Slide 5
Slide 5 text
$ 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 --------------------------------------------------------------------------------
Slide 6
Slide 6 text
0EBJCB1SPKFDU
Slide 7
Slide 7 text
取り組み •コード削除 •コンテナ化 •システム分離
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
コンテナ化
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
DPPLQBE@BMM DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ
Slide 12
Slide 12 text
DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
Slide 13
Slide 13 text
DPPLQBE 8FC3&45"1* QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢཧը໘ʣ LVSPLPʢόονδϣϒʣ QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
Slide 14
Slide 14 text
システム分離
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
データの切れ目で分離する
Slide 17
Slide 17 text
•30以上の異なる DB への接続 •10以上の異なる Redis への接続 •他にも Solr, GDBM など
Slide 18
Slide 18 text
システム分離ケーススタディ
Slide 19
Slide 19 text
1. 検索システム
Slide 20
Slide 20 text
検索システム •クックパッドの検索を支えるシステム •Solr をバックエンドにしている •すごく複雑なドメインロジックの塊
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
2. 料理きろく
Slide 23
Slide 23 text
料理きろく •料理の写真だけを自動で判別して記録 •クックパッドアプリの1機能 •DB は別だがコードは cookpad_all に 含まれていた
Slide 24
Slide 24 text
移行前 NBJO DPPLJOH@MPH 1BOUSZ
Slide 25
Slide 25 text
移行中 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH
Slide 26
Slide 26 text
移行後 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH
Slide 27
Slide 27 text
3. モバれぴ
Slide 28
Slide 28 text
モバれぴ •ガラケー向けのサイト •機能追加やメンテナンスはほぼしていない •アクティブなユーザは健在 •cookpad_all から切り出してフリーズ させることを決断
Slide 29
Slide 29 text
最新の技術で動くガラケーサイトに... •Ruby 2.6 •Rails 5.2 •Docker / ECS •Service Mesh •gRPC
Slide 30
Slide 30 text
移行手順 /FX 0ME Ұ୴ͯ͢ͷϦΫΤετΛ৽αʔόʔʹྲྀ͢
Slide 31
Slide 31 text
移行手順 /FX 0ME ࣮͍ͯ͠ΔΤϯυϙΠϯτ ͦͷ··ॲཧͯ͠ϨεϙϯεΛฦ͢
Slide 32
Slide 32 text
移行手順 /FX 0ME ະ࣮ͷΤϯυϙΠϯτΛฦ͢
Slide 33
Slide 33 text
移行手順 /FX 0ME /HJOY͕Λड͚औͬͨΒ چαʔόʔʹϑΥʔϧόοΫ ະ࣮ͷΤϯυϙΠϯτΛฦ͢
Slide 34
Slide 34 text
͜͜ΒΜͰΓସ͑
Slide 35
Slide 35 text
Webフロントエンド
Slide 36
Slide 36 text
$ 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 --------------------------------------------------------------------------------
Slide 37
Slide 37 text
$ 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 --------------------------------------------------------------------------------
Slide 38
Slide 38 text
レガシーな開発環境 •CoffeeScript •Zepto •Asset Pipeline •vendor/assets によるライブラリ管理
Slide 39
Slide 39 text
$ 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 --------------------------------------------------------------------------------
Slide 40
Slide 40 text
$ 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 --------------------------------------------------------------------------------
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
No content
Slide 43
Slide 43 text
No content
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
• クックパッドでは1ページに複数の機能が混在 するようなケースは少ない • コントローラー単位ぐらいで分けるのがいいのでは
Slide 46
Slide 46 text
"HHSJHBUJPO-BZFS FH(SBQI2- BFFで分割するパターン ,JUDIFO #BDLFOE #BDLFOE 'SPOUFOE 4FBSDI #BDLFOE 6TFS #BDLFOE 3FDJQF #BDLFOE ,JUDIFO 'SPOUFOE 4FBSDI 'SPOUFOE 3FDJQF 'SPOUFOE
Slide 47
Slide 47 text
課題 •ページ間でのUIの統一 •共通コンポーネントの管理 •ページをまたいだ施策はどうする •セッション、Cookie、ログ、etc...
Slide 48
Slide 48 text
まとめ
Slide 49
Slide 49 text
マイクロサービスは難しい
Slide 50
Slide 50 text
しかしサービスの成長のためには目を背けることが できないのでやっていってます
Slide 51
Slide 51 text
ありがとうございました