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

ありがとうございました