CockroachDB的灵感来自于对现有开源数据库和云DBaaS产品的失望。它从来没有被设想为任何东西,而是开放源码的软件。
2014年末,随着GitHub社区令人鼓舞的兴趣和一些前瞻性风险资本家的询问,是时候做出决定了:我们是否应该成立一家公司来加速CockroachDB的发展?一方面,雇佣一个由优秀人才组成的团队可以更快地开发出可行的产品。另一方面,我们的目标将不再仅仅是建立下一个伟大的开源数据库。它必然会扩大到包括对我们的员工和投资者的关注。
我们面临着如何围绕开源软件建立一个企业的难题。
围绕开源软件建立一个企业
自从RedHat开辟了第一条道路以来,开源软件的商业模式一直在不断演变。很少有人使用RedHat最初的以支持和服务为中心的模式获得成功。事实上,大多数投资者认为这种早期的开源商业模式是一个失败的主张。两个常见的开放源码商业模式的替代方案是。
- **开放核心。**这通常涉及到一个有能力的核心产品,它是免费和开源的,通常有APL、MIT或GPL许可。这就是核心。围绕着这个核心,一个商业实体提供一个专有软件群,增加或扩展其功能。这些专有插件作为商业软件出售,通常与支持和服务捆绑在一起。
- 使用开放源码软件的云托管服务。通常,这也涉及专有软件(如多租户、计费、服务仪表板),但最终产品是作为服务而不是软件出售。
这两种模式正在被许多公司成功追求。Cloudera、Elastic和Confluent是我喜欢的三个例子,它们都有不同的模式,处于将开源产品变成成功业务的不同阶段。
警示性的故事
景观中也有一些值得警惕的例子。一些开放源码公司对付费功能设置的标准太低,使核心的开放源码产品感到 "步履维艰"。在2017年,任何产品如果其核心功能不能在不需要商业许可的情况下进行扩展,就可能是将标准定得太低。也有一些公司在早期未能提供足够的专有价值的例子,而开放的核心正迅速成为基础设施的标准。大公司看到了核心产品的价值,而且在其他情况下,他们会很乐意为改进付费,但他们别无选择,只能建立自己的定制扩展。
有一些优秀的开源软件公司由于缺乏收入而停止开发其产品。有些是最近的,包括RethinkDB。以前对默认进入开放核心的功能比较自由的公司,为了生存的利益,决定变得更有眼光(见Paul Dix的InfluxDB帖子)。
这是一个微妙的平衡行为。为开源软件建立付费的 "企业 "功能会让人感觉很脏。付费功能降低了开源软件的吸引力,并可能导致社区的严重不安。另一方面,看到巨大的云服务提供商重新包装开放源码软件以获得巨大的收益,却没有找到促进开放源码生态系统的方法,或者看到价值千亿美元的跨国公司放弃对挣扎中的开放源码软件公司的支持许可,都是令人沮丧的。如果你真的想围绕开源软件建立一个公司,你必须走一条狭窄的道路:过早引入付费功能,就有可能减少采用。太晚引入付费功能,则有可能鼓励经济上的搭便车。在这两个方向上走得太远,你的努力最终只能作为无偿的开源贡献继续下去。
那么,CockroachDB将如何赚钱?
我相信最终我们会同时接受云托管模式和开放核心模式。对DBaaS的需求正在迅速发展,而且只写了第一章(剧透提醒:AWS正在获胜)。但就近期而言,我们的产品更适合那些打算自己运行数据库的公司,无论是在公有云还是私有云。换句话说,我们正在追求开放的核心模式,尽管有一些有趣的Cockroach Labs的特殊性。
首先,许可。许多接受开放核心模式的公司将其专有功能作为闭源扩展来实现。还有一些公司推出了两种或更多的产品,其中企业版包含封闭源代码,并以编译的二进制文件形式发布。这些模式有很大的缺点。它们很难升级,往往涉及到多个开发分支,管理起来很麻烦,而且在新功能方面,它们使开源的好处消失了:外部开发者无法调试或定制产品的专有部分。
CockroachDB社区许可(CCL)
我们将以不同的方式提供付费的企业功能。目前,我们GitHub中的所有内容都是根据Apache License 2(APL)的条款授权的。我们引入的企业功能将包含在一个新的许可证下的源文件中,称为CockroachDB社区许可证(CCL)。源代码仍然可以使用,但由于它不包括自由再分配的权利,所以从定义上讲它不是开源的。它的目的是为了确保企业功能的商业使用,在评估期之后,是要付费的。这些功能在默认情况下不会被打开,在文档、代码和帮助信息中会被清楚地标明,并且只由操作者或开发者选择启用。我们分发的二进制文件将包含这些功能,但因此不能在FLOSS许可证下分发。然而,一个 "纯粹的 "FLOSS发行版也可以为那些需要它的人提供,但没有企业功能。
因为CCL许可证所涵盖的所有功能的源代码都是可用的,我们希望其他人能从我们正在建造的东西中学习,并在将来建造更好的产品。我们希望我们的客户能够定制软件以适应他们自己的野心。
我们将如何决定哪些功能属于CCL许可证的范围?
这是一个困难的问题,最终也是平衡行为的关键所在。我们已经把选择提炼成一个试金石:**对于一个初创公司来说,成功所必需的功能将是APL,并且是开放核心的一部分;一个主要对已经成功的公司有用的功能将是CCL,并且是企业产品的一部分。**一个新功能选择哪种许可证,将由我们的直觉和社区反馈决定。
然而,由于这种决定是主观的,它们将随着时间的推移而演变。将一个企业功能从CCL转移到APL是很简单的,我们希望对于任何被证明是初创企业的高需求的功能来说,这将是一个理所当然的事情。
为了在2017年取得成功,初创企业需要从数据库中获得什么?
促使CockroachDB设计的每一项功能。
- 跨数据中心的部署和一致的复制,以克服故障灾难(如停机和丢失或不一致的数据)。
- 横向可扩展性和云原生设计,使数据架构面向未来。
- 具有分布式ACID事务和查询执行的SQL API,以提高开发人员的生产力。
虽然上述的一些功能在其他数据库中被认为是企业级的,但我们相信它们构成了构建产品和服务的一个适合一代人的基础,它们将在APL下保持免费和可用。毕竟,这些是定义CockroachDB的功能。
那么,有什么是初创公司不需要的,但一个成熟的公司会认为是重要的需求,甚至是改变游戏规则的新用例呢?
我们在2017年有两个这样的产品计划。
第一个是一个完全分布式的增量能力,使用可配置的存储汇(如S3或GCS)快速和一致地备份和恢复大型数据库。同样的功能,但非分布式的,将免费提供给所有用户。
第二个是地理分区,这是一种行级控制数据复制方式和地点的机制。地理分区允许一个单一的逻辑数据库为地理上不同的客户提供低延迟的访问,同时也能满足数据主权的要求。
建立CockroachDB已经花了两年多的时间,我们现在即将发布1.0版本。我们认识到建立一个具有这些功能的新数据库所固有的挑战,我们正在努力确保我们能够继续开发CockroachDB,只要有更好的产品可以在下一个版本中发布。