RethinkDB开源项目为什么会失败?

原文RethinkDB: why we failed
作者:Slava Akhmechet
翻译:雁惊寒

摘要:本文分析总结了RethinkDB开源项目失败的几个原因。以下是译文。

当我们宣布关闭RethinkDB项目时,我答应写一个事后总结报告。我花了一些时间来整理这段经历,现在可以清楚地写出来了。

HN讨论贴中,人们提出了很多关于RethinkDB为什么会失败的原因,从无法理解的人性和MongoDB营销人员的阴谋诡计,到没有建立起一支有经验的面向市场的队伍,再到缺乏支持超过64位float的数字类型……我将这些意见集中整理到了这里

其中有一些原因确实有点道理,但它们是结果而不是原因。例如,说我们没有赚到钱的是属于循环论证,它并没有说明我们失败的原因。

事后看来,有两个重要的原因导致了我们的失败:我们选择了一个糟糕的市场,并地按照错误的指标对产品进行优化。每个错误都可能使RethinkDB的估值降低一到两个数量级。因此,如果我们做对了其中一件事,那么RethinkDB将达到MongoDB的规模,如果我们同时做对了这两件事,我们最终可能会达到Red Hat那样的规模。

糟糕的市场

我们的想法是这样的:新公司并没有建立在Oracle之上,所以就有机会成立一个新的基础设施公司。数据库市场十分庞大,如果我们创造出一个能够俘获一部分市场的产品,我们的公司最终将会非常成功。

但是,很不幸,设想中的市场与实际的用户市场并不完全一致。用户认为我们是一个开源工具开发公司,其实我们就是这样的公司。这是非常不幸的,因为开源工具市场可能是最糟糕的市场之一,公司很可能就会死在这上面。成千上万的人在商业环境下使用RethinkDB,但是大部分人甚至都不愿意支付一笔比一杯星巴克咖啡还便宜的使用授权费用。

这不是因为产品好到不需要购买技术支持,或者是开发者没有控制住预算,或者资本主义的失败。答案是基本的微观经济学。开发人员喜欢创建开发者工具,并且通常是免费的。所以虽然有大量的需求,但供应却十分充足。这使得替代品的数量上升,价格下降到零。

看看其他公司是怎么样的:MongoDB(市值约为16亿美元,约700名员工)和Docker(市值约为10亿美元,约300名员工)。这两家公司在各自的市场上都占绝对优势。对于尚处在成长阶段的民营科技公司来说,有两个非常粗略的经验法则:估值是年收入的10倍,员工的收入大约为每年20万美元。这意味着MongoDB的年收入约为1.4到1.6亿美元,而Docker的年收入约为0.6到1亿美元。

这些数字看起来似乎还不错,但是如果你看看市场上那些不是专注于开发者工具的主要的B2B技术公司,像SalesForce、Palantir或Box公司,那么MongoDB和Docker简直是弱爆了。

这些公司都获得了巨大的成功。如果和现有的公司建立合作关系,分销基础设施软件和拜访大客户也存在着很多的麻烦,那么这对于一个处于萌芽阶段的初创公司来说又意味着什么呢?

对我们来说,这意味着难以解决的客户获得渠道。如果是在一个肥沃的B2B市场中创业,则必须联系一百个潜在客户才能获得十个机会,并最终完成一个销售任务。而对于一个开发工具的初创公司来说,机会增加了10倍。你可以接触到很多高质量的潜在客户,很多人正在下载你的产品并与你交流,但你必须花大量的时间精力才能得到一个订单。

这存在着灾难性的多米诺效应。它使得团队士气低落,难以吸引投资人和雇用顶尖的人才。紧接着,这又限制了你的资源,使你不能在产品和分销方面进一步投资。初创公司是死是活靠的是契机,过早的分配挑战几乎就是在宣判死亡。

错误的度量指标

好了,虽然市场不好,但其他开发工具公司仍然销售了很多产品。为什么RethinkDB不能呢?

虽然我们无法干预市场,但产品的决定权却始终掌握在我们手中。我们希望打造一个优雅、健壮、美观的产品,所以我们针对以下指标进行了优化:

  • 正确性。我们作出了非常严格的保证,并严格履行
  • 接口的简单性。我们承担了大部分的复杂工作,所以应用程序开发人员的工作将更为轻松。
  • 一致性。从查询语言、客户端驱动程序、群集配置、文档,到首页上的营销副本,都尽可能地一致。

你是不是觉得这些规则看起来很熟悉,他们摘自“worse is better”这篇文章。事实证明,正确性、接口的简单性以及一致性对于大多数用户来说是错误的衡量标准。大多数用户都希望是这三个原则:

  • 及时交付。他们希望产品在需要时就存在,而不是在三年后。
  • 高性能。人们希望RethinkDB能够快速实现他们想要的工作负载,而不是我们建议的“真实世界”工作负载。例如,他们会写一个脚本来测试插入但不回读一万个文档需要多长时间。我们输掉了市场学习这一仗时,MongoDB出色地掌握了这些工作负载。
  • 一个有用的东西。我们开始建立一个好的数据库系统,但用户想要一个好的办法来做成某件事(例如,一个存储来自hapi的JSON文档的好方法,一个存储和分析日志的好方法,一个创建报告的好方法,等等)

不是我们没有尝试着让RethinkDB快速交付、提高数据库性能、并建立其周边的生态系统,一次让有用的工作做起来更加容易。我们做到了这一点。但是正确、简单和一致的软件需要耗费很长的时间来构建。这使我们落后市场整整三年。

当我们觉得RethinkDB满足了我们原来的设计目标,我们有信心让它投入生产使用时,几乎每个人都在问“RethinkDB与MongoDB有什么不同?”我们努力向他们解释正确性、简单性和一致性更加重要的原因,但这些并不是大多数用户看重的评判标准。

老实说,我们受到了很大的打击。我们无法理解为什么人们会选择一个那样的系统,它几乎不做它自己应该做的事情(存储数据),有一个大的内核锁,随机丢弃错误,在分片的时候停止系统来实现单节点功能,有一个几乎无法正常工作的分片系统,基本上无法保证正确性,并且暴露了很多乱七八糟的没有可辨别的一致性或视觉一致性的接口。

每次MongoDB发布新版本,人们祝贺他们做出改进的时候,我都会感到忿忿不平。他们宣布修复了BKL,但事实上只是把粒度从数据库降到一个集合。他们会添加更多的操作,但只是简单地使用一次性命令,而不是一个适合系统其余部分的组合接口。他们会做分片改进,但很明显,他们不愿意或者没有能力保证数据的一致性。

但随着时间的推移,我学会了欣赏群众的智慧。在需要的时候,MongoDB能将普通开发者立刻变成英雄,而不是在几年后。它存储数据的速度很快,让人们能够快速交付产品。随着时间的推移,MongoDB长大了。他们解决了一个又一个架构上的问题,现在它已经成为了一个优秀的产品。虽然它可能不是我们想要的那么完美,但它把自己的工作做得很好。

到了2014年年中的时候,我们已经清楚地意识到自己无法在与MongoDB竞争了,我们需要走一条与MongoDB不同的路线。我们发现了一种非常优雅的方式来添加实时推送功能,希望能够帮助开发人员构建一个他们之前无法构建的应用程序。但这还不够。我们突然发现自己正与我们之前几乎忽略的Meteor和Firebase公司竞争,而他们已经致力于解决实时问题很多年了。我们再次落后了市场三年,我们再次发现自己无法与其他公司竞争。

云服务

有些人建议我们应该建立云服务。我们实际上是有这个产品的,所以我很愿意聊一下这个有意思的话题。

对于构建云服务的小型数据库公司来说,有一个显而易见的问题,就是:分裂焦点,这也是创业公司常见的失败模式。构建、部署和运营一个可靠的多租户云服务是相当困难的,这需要出色的专业知识和资源,所以如果你沿着这条路走下去,你会发现自己好像是同时运营两家创业公司。但我们面对的是一个生死抉择,而且可以做出抉择的时间越来越短,所以我们还是给了云服务一个机会。

我们的推理是这样的,云数据库可以提供以下三种服务:托管,数据库即服务(DBaaS)或增值平台即服务(PaaS)。让我们使用上面提到的每位员工的收入大约为每年20万美元的经验规则,快速回溯一下市场分析:

/托管主机DBaaSPaaS
公司Compose.io, mLabFaunaDBParse, Firebase, Meteor
员工数~30~30~30
收入(美元)< 一千万< 一千万< 一千万

可以看出,这些市场很小,甚至比数据库市场本身还小。但是,他们的其中之一会比别人更好吗?

托管主机本质上是为AWS上的人运行数据库。使用这个服务的替代方案是自己在AWS上设置数据库。这很痛苦,但实际上并不是很难。因此,托管数据库服务可以收取多少费用,这有一个非常严格的上限。考虑到Compose.io和mLab提供的MongoDB的用户数比RethinkDB多一到两个数量级,我们认为提供托管服务不会产生太大的影响。

数据库即服务是一个更为复杂的托管服务版本:DBaaS产品完全从用户角度对节点管理进行了摘取。你只需运行查询语句,系统就会为你处理。你无需知道有多少节点在底层运行。这个业务是非常具有挑战性的,部分原因是DBaaS的公司必须与巨型公司(例如DynamoDB和DocumentDB)竞争,部分原因是当客户有这么多的替代品时,他们很难完全将数据管理交给初创公司来做。所以,一个DBaaS产品出来了。

最后一个选择是使用增值平台即服务。我们认为这很有前途,因为在这方面我们有巨大的技术优势。 Firebase和Meteor必须在MongoDB之上构建应用程序级实时逻辑,从根本上限制了实时查询的能力和性能。另一方面,我们控制了技术专利,所以我们具备Firebase和Meteor所没有的显著的优势。

因此,我们创建了Horizon,并开始致力于搭建Horizon Cloud,这是用户部署和扩展RethinkDB/Horizon应用程序的一种方式。我们终于实现了让一个非常小的团队建立三个大型项目(RethinkDB,Horizon和Horizon Cloud)的挑战,我们从未打算在钱用完之前放弃云服务。把荣誉送给工程团队,他们离成功已经非常非常接近了。

最根本的问题

我们还可以做更多的根因分析。为什么我们选择了一个糟糕的市场,为什么我们会按照错误的指标优化产品?

当我还是个小孩子的时候,我想自己制作收音机。我用夹板做了一个盒子,里面放了一些金属垃圾,把盒子连接到电源上。我家里有电子类的书籍,但我从没想过自己需要他们。我坚信念自己可以做出来。最终,我做出了一个可以工作的收音机,但我花了很多年才意识到我需要学习基本的电子学。

早期的RethinkDB跟这个有点类似。我们对产品或市场没有第六感,所以,我们会在不了解我们在做什么的情况下成立了一家公司。更重要的是,我们过于乐观了(人类倾向于把未来估计得比实际情况要好)。我们盲目地相信我们会免受经济和经营业务数学法则的影响。数学,当然,最终让我们尝到了苦果。

为避免出现这些错误,我们可以做些什么呢?现在我已经不可能像一个小孩子那样去制作一台收音机了。不知不觉间,我们已经束手无策,而且这要在若干年之后才会被意识到。

一些人指出,如果我们建立了一支经验丰富的市场团队,我们会做得更好。这绝对是正确的,但我们个人发展的时机并不符合公司的需求。最初,我们不知道我们需要市场专业知识,所以我们并没有这样要求创业团队。当我们建立了一个能很好映射现实的心智模型时,我们发现自己缺乏现金,市场中充满了强劲的丢手,以及一个落后三年的产品。到那时,即使是世界上最好的市场营销团队也无法拯救我们。

离别的思念

许多人对开发工具市场有非常强烈的感觉。工程师喜欢创造开发工具,所以他们迫切希望开发工具公司茁壮成长。

我不愿意完全放弃市场,因为,我不想从这单单一次经历中得出结论;因为,我不喜欢说“它不能做”;因为,有很多例外。 GitHub、MongoDB和Docker已经建立起强大的公司。 GitLab和Unity似乎也发展的不错。

如果你打算成立一个开发人员工具公司,请一定要谨慎细心。市场中有很多不错的替代品。用户期望高,但价格低。请认真思考一下你能为客户提供的价值。记住,想要世界往某个方向发展,但不必一定要让它这样。

2009年,我们在YCombinator演示日把RethinkDB(我们还没有开发出软件)的早期想法展示给了投资者们。我们在幻灯片的最后上写了关键的三点,“如果你只记得RethinkDB的三个事情,请一定要记住这些”。最终,人们没有记住幻灯片的其他东西,但他们确实记住了这三点。

现在我给你们留下这三个要点,请一定要牢记:

  • 选择一个大的市场,但为特定用户制造产品。
  • 学会识别你曾经失去的人才,然后拼命工作,让他们加入你的团队。
  • 系统地学习经济学,它会让你更优秀。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RethinkDB 设计用来存储 JSON 文档的分布式数据库,可通过简单操作实现多机分布式存储。支持表的联合和分组查询。什么是RethinkDB?RethinkDB 是从头打造的第一个开源、可扩展的JSON数据库,用于搭建实时网页。全新的访问模型颠覆了传统的数据库结构:开发者只需告诉RethinkDB,实时连 续地将查询更新结果推送到应用就可以了,不用每次都去poll一遍。RethinkDB的实时推送结构为搭建可扩展实时应用节省了大量时间精力。除了为实时应用提供了全新的设计之外,RethinkDB 还提供了一种灵活的查询语言、直观的操作和监控API,安装学习起来也非常容易。你可以查看这篇 Advancing the realtime web 得到更多RethinkDB计划的技术细节。什么时候RethinkDB是一个好的选择?当你的应用很大程度上有赖于数据的实时反馈时,RethinkDB成为一个很棒的选择。“查询-响应”式的数据库访问模型在web上的确很有用,它可以直接映射到HTTP的“请求-响应”。而现代应用则需要将数据直接实时地传送到客户端。能够最大化得益于RethinkDB实时推送架构的例子包括:协作网站和移动应用数据流分析应用多人在线游戏实时交易场所设备联机举个例子:在协作设计一个app的时候,其中一个用户改变了某个按钮的位置,服务器就必须在第一时间通知所有在完成同一项目的其他用户。网页浏览器 能够通过WebSockets和http持久连接来支持这一功能,但数据库系统要迎合实时需求仍然是一个大的工程难题。而RethinkDB作为第一个开 源、可扩展的数据库,就是特别为实时推送数据到应用而设计的。哪些人在用 RethinkDBRethinkDB 的用户包括上百个科技创业公司、咨询工作室和世界五百强企业。这里是其中的一些:Jive Software 和 Mediafly 使用RethinkDB搭建强大的响应式网页和移动应用Pristine.io 和 Narrative Clip 使用RethinkDB搭建用于设备连接的云架构Platzi 和 Workshape.io 使用RethinkDB进行实时分析CMUNE 和 NodeCraft 使用RethinkDB构建大规模可扩展多人游戏RethinkDB 拥有超过十万开发者的活跃社区和上百个来自世界各地的代码贡献者。RethinkDB是基于现有技术的吗?高效实现实时推送架构需要重新设计绝大部分的数据库成分,包括查询执行引擎、分布式系统、超高速缓存子系统和存储引擎。因为架构影响到每一个数据库 组成部分,RethinkDB不得不从C 开始一步步写起来。RethinkDB 是由数据库专家组成的团队花了五年时间做出来的,还得到了来自世界各地上百个代码贡献者的帮助。RethinkDB和realtime sync不同在哪里?和Firebase, PubNub 或者Pusher 这类实时同步API相比,RethinkDB主要不同在以下三个方面:首先,实时同步API是云服务,而RethinkDB开源项目RethinkDB也有云端,可以通过我们的合作伙伴 Compose.io 和 Amazon AWS获得。它还可以部署在你自己的架构中,没有任何限制。其次,同步实时API只局限于同步文档,而RethinkDB是一个有着更普遍应用范围的数据库系统。 在RethinkDB中你可以运行任意query,包括table joins, subqueries, geospatial queries, aggregation, 还有map-reduce。实时同步服务有更多查询功能上的限制。最后,实时同步API的设计是直接从浏览器访问。这使得基本的app能够快速地跑起来,然而一旦app扩展了,灵活性就受到限制。 RethinkDB的设计是从应用服务器进行访问,这一点上更像是传统的数据库。可能要多花一点设置代码,但拥有足够的灵活性去适应应用的成熟。RethinkDB和MongoDB又不同在哪里?RethinkDB所基于的架构和MongoDB非常不同。开发者只需告诉RethinkDB,实时连续地将查询更新结果推送到应用就可以了,不用 每次都去poll一遍。你同样可以在RethinkDB上用传统的“查询-响应”范式来书写应用。然后在你开始为app添加实时功能时再去订阅实时数据 流。举个例子,这是你让RethinkDB查询一个文件时的命令:r.table('users').get('coffeemug').run()然后这是你从RethinkDB订阅更新流时用到的语句,在任何时候文档发生了变化就推送:r.table('users').get('coffeemug').changes().run()RethinkDB的实时架构可以和MongoDB的oplog相提并论,但前者提供了更高层次的抽象。RethinkDB的数据流与查询计算引擎无缝整合,并允许你订阅查询结果的变化,而不仅仅是把数据复制过来。这种架构大幅度地减少了搭建实时app所需的时间和精力。除了实时推送架构,RethinkDB 还有许多胜过 MongoDB的地方:一种高级的查询语言,能够支持table joins, subqueries 和大规模并行式分布计算。融合了查询语言的操作和监控API,大幅度降低了RethinkDB扩展的难度。简洁美观的UI 易于复制转发,拥有在线文档支持和查询语言建议。可以看看这篇 technical comparison of RethinkDB and MongoDB 里面的评论比较中立一些。想听听个人观点的,请看@coffeemug 的what makes RethinkDB different.什么时候RethinkDB是一个不好的选择?当你需要用到完整ACID支持或者更强大的架构实施,RethinkDB就不大好用了。在这种情况下你最好用一些传统的MySQL或者PostgreSQL数据库。如果你需要做深度、密集型计算分析的话,你最好用Hadoop或者类似于Verticaa的面向列的存储工具。在某些情况下RethinkDB在一定程度上牺牲书写可用性(write availability)来保证数据一致性(data consistency)。如果高要求的书写可用性对你来讲很重要,那你也不要纠结了,像Riak这样的Dynamo式系统可能更适合你。想要更多地学习RethinkDB?阅读 ten-minute guide 开始学习RethinkDB。对于熟悉分布式系统的程序员可以直接阅读 architecture overview 。走捷径用 cookbook,你可以看到许多常用的 RethinkDB查询例子。 标签:分布式数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值