翻译 Ruby 在 Basecamp 运营中的开销

wuhuaji0 · 2019年12月19日 · 最后由 piecehealth 回复于 2020年01月08日 · 2901 次阅读
本帖已被设为精华帖!

翻译自 DHH 的文章 《Only 15% of the Basecamp operations budget is spent on Ruby》。主要表达,相比于开发效率和程序员的开发体验,语言和 Web 框架性能几乎不值一提。很有意思,试着翻译一下。

原译文发布在我的博客, 分享到社区 :)

由于我本人水平有限,本文不免存在遗漏或错误之处。如有疑问,请查阅原文。原文链接

以下为译文:

我们每年花费 3 百万刀来运营所有版本的 Basecamp 和 一些老应用。这 3 百万包括本地数据中心 (on-premise data centers) 和云服务。不包含我们超强的 7 人运维团队,只是网络 (connectivity)、机器、电费 等等。

这包含很多支出项目。最大的一项是存储 (价值连城的) 4.5PB 文件每年所需的百万美元。过去我们自己存储,为了冗余和可用性,放在三个物理数据中心(physical data centers),但是操作麻烦。现在我们放在 Amazon S3 上,并且也是用了多区域冗余。

除此之外还有不少支出。我们花了不少钱在数据库上,都是运行的 MySQL;使用 ElasticSearch 提供搜索;使用 Redis 集群提供缓存;使用 Kafka 和 Big Query 进行数据分析;在数据中心和云服务器之间我们有自己的直连网络。

上面我说到的所有东西都是我们的基础服务,和语言或者 Web 框架无关。不管我们是用 PHP、Python、Rust 、Go、C++ 还是别的,都需要数据库、搜索、文件存储。

现在来说说语言和框架的开销,大约是 15%。这 15% 包含了我们所有的应用和任务开销(app and job server),这些机器都运行这 Ruby on Rails 。所以来算下,3 百万的 15%,大约是 45 万刀。

想想一下,有个牛逼的技术,能做我们用 Rails 做的所有工作,并且速度是 Rails 的两倍,那我们每年可节省约 22.5 万 。省下的这点钱还比不上我们每年圣诞节给员工的礼物开销。而且要找到两倍快的技术,省一半的机器可不容易,各种性能测试数据会迷惑你。

就算我们找到了真的银弹,能节省一个数量级的服务器资源,开销每年省 40 万,我们的应用和任务(app and job server)每年只需付超低价 4.5 万。省下来的 40 万 还不够我们两个程序员的平均工资。

我们考虑下 Rails 花出去的 45 万能省下来什么。我们超强的 15 人的开发团队一年的开销就比所有运维开销(300 万)还要多。如果团队效率下降 15%,多花的钱就比运行整个 Rails 花的多了(意为:如果不用 Rails,带来的效率损失更大)。

是的,使用 Rails 是奢侈的。不是每个公司都像 Basecamp 一样付员工这么多钱,所以别的公司的的费用可能不一样。也许有的公司他们的应用是计算密集型的。但对于大多数 SaaS 公司,都和我们一样,在运行语言和 Web 框架上的开销只占全部开销中的一小部分。

对于像 Basecamp 这样的公司,在编程语言和 web 框架上,你最好果断选择让程序员最富有激情、最快乐、效率最高的技术。无论花费多少,都值得。就算单纯从 开销/收益 上来看,都是值得的。更重要的是,给人带来更多的幸福和潜力。

这是为什么我们使用 Ruby 、Rails。这是一个取舍(It's a complete bargain)。

共收到 23 条回复
huacnlee 将本帖设为了精华贴 12月19日 22:13

应用大体分为两种,IO 密集型 和 CPU 密集型。多数 APP 都是 IO 密集型。

好的架构,要把应用层的压力,尽可能的转移到 IO 上。

高端的玩家甚至会根据应用场景设计存储,比如 Cassandra。

Rails 的入门门槛有些高,对于新手不太友好。虽然质量提高了,但是新鲜血液少了。

哈哈 ,第一次发帖收获精华认证 :)

几年前早就在社区注册了,只是从未发言,因为我没写过 Ruby 代码……

说得好, elixir 玩家前来鼓掌

D 大神说的对!

有股拍馬屁的感覺。但是爽

DHH 说的没错,但是只限于他们的场景。想想这么两个问题, 1、Rails 的掌控能力 (工程能力) 2、业务跑通了,能赚钱 (业务能力)

这两点其实放在任何一个团队公司都是一样的。如果你的团队对自己用的工具有绝对的掌控能力,并且你们的业务也已经被证明是能生存的,那其他事情其实都不重要。

tiseheaini 回复

Rails 应该是以入门门槛低著称吧。。。

lithium4010 回复

入门上手快,进阶门槛高

这是跳出纯技术层面的更宏观角度对 Ruby 和 Rails 的赞美了,很有意思。

其实对创业公司来讲,rails 的确很爽,大多都做不到像 twitter 和 github 这么大规模,说不定有的在中途就 gg 了

lithium4010 回复

Rails 在 windows 上面开发会遇到很多问题,这阻挡了很多在校学生进入。 Rails 中 capistrano 部署很考验 Linux 的熟练度,没有 nodejs 和 php 部署便利,也阻挡了很多新手。 虽然学会了很觉得开发效率高,但能入门门槛相比其他语言很高。

对比一下中美程序员的工资和机器带宽的价格,就知道 ruby 为什么在国内火不起来了。

tiseheaini 回复

涉及到部署,虽然 rails 确实没有那么方便,但是 nodejs 跟 php 也没有方便到不需要管 linux。。。

tiseheaini 回复

如果对标最简单的部署方式,Rails 也就是在命令行跑 bin/rails server -d -e production 而已。

也许用 docker 会更简单?

@Amosasas 涉及到 docker 的话大家差异不大...也就回到了架构上谁拆分涉及的更好, 业务层面选顺手语言就好了.

@hging @Rei 大家说的意思我懂,入门门槛变高导致新人没办法快速入门。

basecamp 的应用服务每年需要 45 万美元,作为对比,Netflix 是 80-100 million,这样估算下来 basecamp 的市值大概是 Netflix 的 200 分之一,这样看来 Shopify 的数据会更有说服力

Basecamp 更多是商業模式考量 Basecamp 是商用應用,月費 $99 Netflix 面向大眾人均 $8 左右

兩者無論流量或者是用戶價值都差得很遠吧

watsy0007 回复

想想一下,有个牛逼的技术,能做我们用 Rails 做的所有工作,并且速度是 Rails 的两倍

Elixir + Phoenix 😂

以前也觉得这个问题无非是钱的问题,但根据这几年的经历,我觉得不光是钱的问题。

举个我们自己遇到的例子,我们的一个 API request,业务很复杂,如果不中缓存的话大概要 4 秒才能返回,光是服务端,还没算上网络传输啥的 overhead。中了缓存的话 200ms 就行了。加机器是能确保流量大了,服务不会挂掉,但是用户第一次 request 需要等上 6,7 秒才能看到数据对用户太不友好了。我们也花了不少时间去优化,从 NewRelic 上看瓶颈不在数据库,而是在 Rails 这边。当然我们可以把这个 API 拆分成几个小的 API 一步步的 load,但这样的话需要前端去配合 iOS,Android 还有 WebApp,这样的话 Rails 的开发效率优势又没那么明显了。

总的来说 Rails 的开发效率确实很高,但性能确实还是需要多去优化。

benzhang 回复

中了缓存还要 200ms 的话……优化空间很大😂

我写过查看 Rails 应用调用栈的工具,可能能帮你找一下瓶颈 (发现过我们应用一个请求调 8000 多次的方法) https://github.com/piecehealth/rails_watcher

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