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

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

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岁。。。。

共收到 38 条回复

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

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

Rubyist 都应该视删代码为乐。

Model 里有 1700 个 class...

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

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

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

: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 的提交频率也是瞎尿了 😝

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

它毁了我的世界观

300 servers

#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

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

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

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