Rails Cookpad - 可能是世界上最大的 Rails 单一应用

foxzool · 2015年03月06日 · 最后由 johny 回复于 2015年03月11日 · 4786 次阅读

https://speakerdeck.com/a_matsuda/the-recipe-for-the-worlds-largest-rails-monolith

http://cookpad.com/

  • 276+ gem
  • 50 million unique user / month
  • 15, 000 req / sec
  • 300 servers
  • database.yml 1141 lines
  • 30 database
  • 20000 + rspec example
  • 50 developers
  • deploy 10+ times / day

要点:

  • 根据访问量自动扩展服务器
  • 使用 Serf + Gossip 替代 Capistrano 部署代码
  • 数据库读/写分离
  • 远程分发 RSpec 测试
  • 测试时只清理相关的数据库
  • 数据迁移时不新建 mgiration 文件,自动根据 DB schema 进行迁移

Cookpad 的一位开发者 sorah 14 岁已经是 ruby committer 了,上个月才满 18 岁。。。。

“cookpad 的一位开发者 sorah 14 岁已经是 ruby committer 了,上个月才满 18 岁。。。。” 好羡慕…… 想起昨天看的《超能陆战队》里的小宏……

机构师够能坚持的,把这么多功能堆在一起还能不散架。还是说太多功能耦合的太紧,实在无法拆分。

Rubyist 都应该视删代码为乐。

Model 里有 1700 个 class...

啊... 518 个 controllers,1732 个 models,细思极恐!

看了一下 Slides, 好强大,好折腾,都自己定制啊

#6 楼 @peter 我也看了一遍 slides,觉得 Cookpad 就是任性!

匿名 #8 2015年03月06日

:plus1:

虽然很厉害,但是太大了。

#9 楼 @Rei 拆分了可能还是不好维护,关注点可能会分很散,开发人员可能也要分组,出问题后,组和组之前还要协调。

任性一点,能跑得动就行。

#10 楼 @peter 拆分了代码会更多,维护的人更多,但是可能好维护一点。

我的意思是,功能太多,代码量太大了,不明白一个菜谱社交网站为什么会有这么多功能。

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          |322602 |234269 |    1127 |   10704 |   9 |    19 |
| Helpers              | 14262 | 10353 |       0 |     460 |   0 |    20 |
| Models               | 89233 | 64359 |     357 |    3806 |  10 |    14 |
| Libraries            | 51388 | 36484 |     282 |    2470 |   8 |    12 |
| Components           |     0 |     0 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                |477485 |345465 |    1766 |   17440 |   9 |    17 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 345465     Test LOC: 0     Code to Test Ratio: 1:0.0

上不了图

看了 sorah 的提交频率也是瞎尿了 😝

介绍了不少工具,可以研究一下开拓思路

它毁了我的世界观

#17 楼 @small_fish__ 任性不行啊,一个 10 美元,一个月才 3000 美金,可能有一两个稍贵点,5000 美金到顶了。

人家还有 50 个程序员呢,哪个程序员不比服务器贵。

Cookpad 的一位开发者 sorah 14 岁已经是 ruby committer 了,上个月才满 18 岁。。。。

想知道他们的 redis 服务器是什么配置的

#20 楼 @ywjno http://www.inside.com.tw/2012/04/14/cookpad-recruiting 看样子只用了 Mysql 和 Memcached Keep it simple

#21 楼 @foxzool 那还不错,用了 redis 的话 32G 内存的云服务器不知道要多少钱

23 楼 已删除

看完全文,他们的确考虑拆分,但是觉得不适合他们的情况,所以作罢了。

#21 楼 @foxzool 不过看他们招聘 server-system-engineer 的职位的时候,却又是用到了 mongodb、redis 的说, 招聘链接点此

必要なスキルや経験

・1 年以上の Linux、ネットワークに関するスキル・経験
・MySQL や Redis 等、OSS データベースソフトウェア(RDB, KVS)に対する高度な理解と 1 年以上の運用経験
・Infrastructure as Code についての理解と運用経験
・OSS を公開、またはコントリビュートした経験

看着是个水果站,为何用这么多代码呢?比 sptree 还多... 代码质量如何? 表示不懂日语...

这种 monolith 项目不是谁都能驾驭得了的,看他们一堆 "We build our own XXX" ,也不是所有公司都有这种能力。

#7 楼 @lgn21st 这么说吧,Cookpad 里高手云集,但普通水平的开发人员也很多。厉害的几个人能 hold 住就行了。服务能保证 up and running 不出问题,就没必要乱动。

作者也提到他们有很多功能是以 unit 方式 mix 进去的,这不也挺像 microservice 的嘛,只不过没有完全分离吧了。

我有种感觉,那些不停鼓吹方法论和最佳实践的,很多是培训师或理论派写书的。这些东西每两年就会有一套新的出来,实际项目去跟要死人的。

一家公司里肯定会有很多小项目,这些都可以拿来尝试不同的东西。

sorah 08 年就用 github,也就是 11 岁开始用😱

sorah 是 ruby 的贡献者...

#28 楼 @ashchan 哦 好久不见啦

横向能拆独立 service 更好 纵向拆分 gem 就可以,搞一堆 microservice 是自杀

Cap 太慢,我们的解决方案是先 SSH 到服务器,在服务器上 Cap,比本机快了好多倍,没改一行代码。

正在堆一座和这个差不多大的大厦

#33 楼 @hooooopo mina 原理好像就是 本地生成 ssh 命令 在到服务器上去执行的 所以很快。

我的第一反应是:招个程序员,熟悉代码就要一年。。。

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |   LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          | 36217 | 26895 |     252 |    2774 |  11 |     7 |
| Helpers              | 10182 |  8085 |      17 |     664 |  39 |    10 |
| Models               | 38918 | 27998 |     561 |    1663 |   2 |    14 |
| Mailers              |     0 |     0 |       0 |       0 |   0 |     0 |
| Javascripts          | 19388 | 12690 |       0 |    1495 |   0 |     6 |
| Libraries            | 37712 | 20500 |       6 |    1453 | 242 |    12 |
| Model specs          |    20 |    16 |       0 |       0 |   0 |     0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 142437 | 96184 |     836 |    8049 |   9 |     9 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 96168     Test LOC: 16     Code to Test Ratio: 1:0.0

公司的一个项目,数值也是醉了

网站看着看着就饿了~~!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号