巨大なモノリシック Rails アプリケーションのマイクロサービス化戦略Rails Developers Meetup 2019@hokaccha
View Slide
•Kazuhito Hokamura• @hokaccha• Cookpad Inc.• Lead of service infra team• Nodebrew, Adventar
αʔϏε։͔࢝ΒҎ্3BJMTԽͯ͠Ҏ্
$ cloc .--------------------------------------------------------------------------------Language files blank comment code--------------------------------------------------------------------------------Ruby 7499 96381 16074 507178Haml 4494 14510 592 129029Sass 1010 19237 543 120166Markdown 223 6888 0 65316XML 88 25 30 59334JavaScript 269 8097 10565 51189YAML 75 878 668 36879ERB 911 3927 83 25839CoffeeScript 409 2860 405 16211CSS 10 175 64 5992...--------------------------------------------------------------------------------SUM: 15200 154731 31233 1025936--------------------------------------------------------------------------------
0EBJCB1SPKFDU
取り組み•コード削除•コンテナ化•システム分離
コンテナ化
DPPLQBE@BMMDPPLQBE 8FC3&45"1*QBQBʢཧը໘ʣLVSPLPʢόονδϣϒʣNPCJMFʢΨϥέʔʣ
DPPLQBE 8FC3&45"1*QBQBʢཧը໘ʣLVSPLPʢόονδϣϒʣNPCJMFʢΨϥέʔʣDPPLQBE@BMMDPPLQBE 8FCQBQBʢཧը໘ʣLVSPLPʢόονδϣϒʣQBOUSZ 3&45"1*NPCJMFʢΨϥέʔʣDPPLQBE@BMM
システム分離
データの切れ目で分離する
•30以上の異なる DB への接続•10以上の異なる Redis への接続•他にも Solr, GDBM など
システム分離ケーススタディ
1. 検索システム
検索システム•クックパッドの検索を支えるシステム•Solr をバックエンドにしている•すごく複雑なドメインロジックの塊
2. 料理きろく
料理きろく•料理の写真だけを自動で判別して記録•クックパッドアプリの1機能•DB は別だがコードは cookpad_all に 含まれていた
移行前NBJODPPLJOH@MPH1BOUSZ
移行中NBJODPPLJOH@MPH1BOUSZDPPLJOHMPH
移行後NBJODPPLJOH@MPH1BOUSZDPPLJOHMPH
3. モバれぴ
モバれぴ•ガラケー向けのサイト•機能追加やメンテナンスはほぼしていない•アクティブなユーザは健在•cookpad_all から切り出してフリーズ させることを決断
最新の技術で動くガラケーサイトに...•Ruby 2.6•Rails 5.2•Docker / ECS•Service Mesh•gRPC
移行手順/FX0MEҰ୴ͯ͢ͷϦΫΤετΛ৽αʔόʔʹྲྀ͢
移行手順/FX0ME࣮͍ͯ͠ΔΤϯυϙΠϯτͦͷ··ॲཧͯ͠ϨεϙϯεΛฦ͢
移行手順/FX0MEະ࣮ͷΤϯυϙΠϯτΛฦ͢
移行手順/FX0ME/HJOY͕Λड͚औͬͨΒ چαʔόʔʹϑΥʔϧόοΫະ࣮ͷΤϯυϙΠϯτΛฦ͢
͜͜ΒΜͰΓସ͑
Webフロントエンド
レガシーな開発環境•CoffeeScript•Zepto•Asset Pipeline•vendor/assets によるライブラリ管理
• クックパッドでは1ページに複数の機能が混在 するようなケースは少ない• コントローラー単位ぐらいで分けるのがいいのでは
"HHSJHBUJPO-BZFS FH(SBQI2-BFFで分割するパターン,JUDIFO#BDLFOE#BDLFOE'SPOUFOE4FBSDI#BDLFOE6TFS#BDLFOE3FDJQF#BDLFOE,JUDIFO'SPOUFOE4FBSDI'SPOUFOE3FDJQF'SPOUFOE
課題•ページ間でのUIの統一•共通コンポーネントの管理•ページをまたいだ施策はどうする•セッション、Cookie、ログ、etc...
まとめ
マイクロサービスは難しい
しかしサービスの成長のためには目を背けることができないのでやっていってます
ありがとうございました