巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad

巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad

18b12f8f7910445b2637f0f21f59d467?s=128

Kazuhito Hokamura

March 23, 2019
Tweet

Transcript

  1. 巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 Rails Developers Meetup 2019 @hokaccha

  2. •Kazuhito Hokamura • @hokaccha • Cookpad Inc. • Lead of

    service infra team • Nodebrew, Adventar
  3. None
  4. αʔϏε։͔࢝Β೥Ҏ্ 3BJMTԽͯ͠೥Ҏ্

  5. $ 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 --------------------------------------------------------------------------------
  6. 0EBJCB1SPKFDU

  7. 取り組み •コード削除 •コンテナ化 •システム分離

  8. None
  9. コンテナ化

  10. None
  11. DPPLQBE@BMM DPPLQBE 8FC3&45"1* QBQBʢ؅ཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ

  12. DPPLQBE 8FC3&45"1* QBQBʢ؅ཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢ؅ཧը໘ʣ LVSPLPʢόονδϣϒʣ

    QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
  13. DPPLQBE 8FC3&45"1* QBQBʢ؅ཧը໘ʣ LVSPLPʢόονδϣϒʣ NPCJMFʢΨϥέʔʣ DPPLQBE@BMM DPPLQBE 8FC QBQBʢ؅ཧը໘ʣ LVSPLPʢόονδϣϒʣ

    QBOUSZ 3&45"1* NPCJMFʢΨϥέʔʣ DPPLQBE@BMM
  14. システム分離

  15. None
  16. データの切れ目で分離する

  17. •30以上の異なる DB への接続 •10以上の異なる Redis への接続 •他にも Solr, GDBM など

  18. システム分離ケーススタディ

  19. 1. 検索システム

  20. 検索システム •クックパッドの検索を支えるシステム •Solr をバックエンドにしている •すごく複雑なドメインロジックの塊

  21. None
  22. 2. 料理きろく

  23. 料理きろく •料理の写真だけを自動で判別して記録 •クックパッドアプリの1機能 •DB は別だがコードは cookpad_all に
 含まれていた

  24. 移行前 NBJO DPPLJOH@MPH 1BOUSZ

  25. 移行中 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH

  26. 移行後 NBJO DPPLJOH@MPH 1BOUSZ DPPLJOHMPH

  27. 3. モバれぴ

  28. モバれぴ •ガラケー向けのサイト •機能追加やメンテナンスはほぼしていない •アクティブなユーザは健在 •cookpad_all から切り出してフリーズ
 させることを決断

  29. 最新の技術で動くガラケーサイトに... •Ruby 2.6 •Rails 5.2 •Docker / ECS •Service Mesh

    •gRPC
  30. 移行手順 /FX 0ME Ұ୴͢΂ͯͷϦΫΤετΛ৽αʔόʔʹྲྀ͢

  31. 移行手順 /FX 0ME ࣮૷͍ͯ͠ΔΤϯυϙΠϯτ͸ ͦͷ··ॲཧͯ͠ϨεϙϯεΛฦ͢

  32. 移行手順 /FX 0ME ະ࣮૷ͷΤϯυϙΠϯτ͸Λฦ͢

  33. 移行手順 /FX 0ME /HJOY͕Λड͚औͬͨΒ
 چαʔόʔʹϑΥʔϧόοΫ ະ࣮૷ͷΤϯυϙΠϯτ͸Λฦ͢

  34. ͜͜Β΁ΜͰ੾Γସ͑

  35. Webフロントエンド

  36. $ 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 --------------------------------------------------------------------------------
  37. $ 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 --------------------------------------------------------------------------------
  38. レガシーな開発環境 •CoffeeScript •Zepto •Asset Pipeline •vendor/assets によるライブラリ管理

  39. $ 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 --------------------------------------------------------------------------------
  40. $ 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 --------------------------------------------------------------------------------
  41. None
  42. None
  43. None
  44. None
  45. • クックパッドでは1ページに複数の機能が混在
 するようなケースは少ない • コントローラー単位ぐらいで分けるのがいいのでは

  46. "HHSJHBUJPO-BZFS FH(SBQI2- BFFで分割するパターン ,JUDIFO #BDLFOE #BDLFOE 'SPOUFOE 4FBSDI #BDLFOE 6TFS

    #BDLFOE 3FDJQF #BDLFOE ,JUDIFO 'SPOUFOE 4FBSDI 'SPOUFOE 3FDJQF 'SPOUFOE
  47. 課題 •ページ間でのUIの統一 •共通コンポーネントの管理 •ページをまたいだ施策はどうする •セッション、Cookie、ログ、etc...

  48. まとめ

  49. マイクロサービスは難しい

  50. しかしサービスの成長のためには目を背けることが できないのでやっていってます

  51. ありがとうございました