翻译 Ruby 在 Basecamp 运营中的开销

wuhuaji0 · December 19, 2019 · Last by wangdidi372925 replied at June 17, 2020 · 13056 hits
Topic has been selected as the excellent topic by the admin.

翻译自 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)。

huacnlee mark as excellent topic. 19 Dec 22:13
2 Floor has deleted

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

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

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

说得好,elixir 玩家前来鼓掌

D 大神说的对!

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

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

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

Reply to tiseheaini

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

Reply to lithium4010

入门上手快,进阶门槛高

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

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

Reply to lithium4010

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

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

Reply to tiseheaini

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

Reply to 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左右

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

Reply to watsy0007

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

Elixir + Phoenix 😂

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

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

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

Reply to benzhang

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

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

Reply to Amosasas

部署简单?

学习了,不管怎么说,对我们团队需求来说,用 rails 就对了

博客鏈接是否已更新?新鏈接似乎帶了.md後綴。

另外挑個刺:建議統一用中文全角字符。

Reply to franklinyu

链接已更新。符号确实没太注意,多谢指出,之后会注意:)

You need to Sign in before reply, if you don't have an account, please Sign up first.