[Day 2: A-19] 巨大なモノリシック Rails アプリケーションのマイクロサービス化戦略


yhirano55
yhirano55 commented 4 months

登壇者: クックパッド株式会社 外村 和仁

クックパッドの Rails アプリケーションは世界でも有数な巨大モノリシックアプリケーションです。その巨大さゆえに、機能の追加やメンテナンスがまともにできる状態ではありませんでした。その問題を解決するためにコード削減やシステム分割などの様々な施策を積み重ね、ようやく成果が出てきました。そのような施策で得られた知見や今後の展望について紹介します。


  • このセッションに関する質問を募集中です
  • 事前に聞きたいことがあれば、何でも書き込んでください。
  • 質問への回答はお約束できません。あらかじめご了承ください

Like(0)

Questions and feedbacks (14)

yuemori
yuemori commented 4 months

grpcはhttp2が必要だと思うのですが、railsでgrpcをやり取りする場合の実装はどうされているのでしょう? 内製のgrpc gemでカバーしているんでしょうか? (本題でないのでということであれば懇親会で聞きます)

Like(2)

kyanny
kyanny commented 4 months

ガラケー版は基本的にメンテナンスしてない、とのことですが、アクティブに開発されているアプリケーションに起因する変更によってガラケー版が壊れたりすることはないのでしょうか?また、壊れたときは直すと思うのですが、そのメンテナンスコストは払えているのでしょうか?

Like(1)

ota42y
ota42y commented 4 months

Webのフロントエンドはマイクロ化できますが、iOS/Androidアプリの場合はどのように解決されているのでしょうか

Like(2)

ota42y
ota42y commented 4 months

デザインの統一やボタン配置といった、複数のチーム間で揃えないといけないユーザ体験はどのようにコントロールしているのでしょうか

Like(1)

yuemori
yuemori commented 4 months

Aggrigation LayerとしてのGraphQLという話が出ましたが、grpcやREST APIとの使い分けはどういう視点で考えられてるんでしょう?

Like(1)

8398a7
8398a7 commented 4 months

公式のgrpcジェネレータでは達成できなかった内容(主な内製理由)はどのようなものがありますか?

Like(1)

shinkufencer

Cookpad社ではEnvoyを使っている話が昨日あがりましたが、nginxとの組み合わせはどのようにやっているのでしょうか?

Like(1)

hokaccha
hokaccha commented 4 months

公式のgrpcジェネレータでは達成できなかった内容(主な内製理由)はどのようなものがありますか?

マルチプロセスの問題、Graceful Shutdown などの問題です。詳しくはこちらによくまとまっています。 https://speakerdeck.com/ganmacs/grpc-in-cookpad

Like(0)

hokaccha
hokaccha commented 4 months

Cookpad社ではEnvoyを使っている話が昨日あがりましたが、nginxとの組み合わせはどのようにやっているのでしょうか?

gRPCのフロントや service mesh の data plane には envoy、gRPC以外の reverse proxy には nginx という感じです。nginx のレイヤーが envoy に置き換わっていく可能性もあるかもせんが、今のところは未定です。詳しくはこちらを。 https://techlife.cookpad.com/entry/2018/05/08/080000

Like(0)

hokaccha
hokaccha commented 4 months

デザインの統一やボタン配置といった、複数のチーム間で揃えないといけないユーザ体験はどのようにコントロールしているのでしょうか

sara という UI フレームワークがあります。内製の Bootstrap のようなものです。昔の資料ですがこちらを参照ください。 http://cssnite.jp/lp/lp26/CSSNiteLP26-s9-ikeda.pdf

Like(0)

hokaccha
hokaccha commented 4 months

Aggrigation LayerとしてのGraphQLという話が出ましたが、grpcやREST APIとの使い分けはどういう視点で考えられてるんでしょう?

バックエンドのマイクロサービスは gRPC や REST などで機能単位で実装し、BFFやモバイルアプリなどは、裏にどういうサービスがいくつかるのかを意識せずに GraphQL だけにクエリする、ということができればいいのかなと考えています。もしからしたら GraphQL は必要なくて、フロントのほうも各サービスのgRPCを呼び出すのでも済むかもしれませんし、まだ構想中なのでたしかなことは言えないです。すいません。

Like(0)

hokaccha
hokaccha commented 4 months

ガラケー版は基本的にメンテナンスしてない、とのことですが、アクティブに開発されているアプリケーションに起因する変更によってガラケー版が壊れたりすることはないのでしょうか?また、壊れたときは直すと思うのですが、そのメンテナンスコストは払えているのでしょうか?

します!その場合はもちろん直しますし、そのメンテナンスコストが払えないのでサービスを分離したいと思っています。

Like(0)

hokaccha
hokaccha commented 4 months

Webのフロントエンドはマイクロ化できますが、iOS/Androidアプリの場合はどのように解決されているのでしょうか

こちらはまた別アプローチで、内部のモジュール単位ごとに分割していくという戦略です。詳しくはこちらをごらんください。 https://speakerdeck.com/giginet/cookpad-techconf-2019-xia-gaguan-kutukupatudoiosapurifalse-po-huai-tochuang-zao-sositewei-lai

Like(0)

hokaccha
hokaccha commented 4 months

grpcはhttp2が必要だと思うのですが、railsでgrpcをやり取りする場合の実装はどうされているのでしょう? 内製のgrpc gemでカバーしているんでしょうか? (本題でないのでということであれば懇親会で聞きます)

はい、そのあたりは以下のgemで実装されています。 https://github.com/cookpad/grpc_kit

http2の部分でいうと、上記gemが依存している以下のgemですね。 https://github.com/tenderlove/ds9

Like(0)

Create Comment

Please sign in to comment.

Sign in with GitHub
This software is available as open source under the terms of the MIT License.
Copyright © 2018 Yoshiyuki Hirano