PostgreSQL原生分布式:Citus 完全开源的理由、功能与方式
几个月前,我们使 Citus 完全开源。对于 Citus 数据库引擎团队的所有人来说,这是一个非常激动人心的里程碑事件。与那些说 Postgres 整体是无法扩展的人相反,Postgres 实际上有一个完全开源的分布式扩展解决方案,它也是 Postgres 的原生解决方案。它叫Citus!这篇文章将更详细地介绍我们为什么开源 Citus 11 中的企业功能,我们究竟开源了什么,以及最终开源我们的代码需要什么。如果您对代码更感兴趣,可以在我们的GitHub 存储库中找到它(请随意给 Citus 项目一个星号。)
为什么现在将 Citus 的最后一部分开源?
我们开源 Citus 11 中最后几个企业功能的原因之一是我们的商业模式已经改变。当 Citus 在 2011 年首次启动时,商业模式包括销售企业许可证和技术支持。2016 年,我们从 Postgres 中分离出 Citus,并开源了大部分 Citus。之后,我们通过包含一些额外的闭源企业功能,将我们的企业许可软件与开源版本区分开来。但随着时间的推移,我们的商业模式已经不再销售企业许可证。
目前,我们的业务模型围绕我们的托管服务:Azure Database for PostgreSQL - Hyperscale (Citus)。正如您可能想象的那样,我们的托管服务通过添加“托管”功能构建在 Citus 开源之上,这些功能也可以节省您的时间并使您不再需要担心您的数据库。
使用 Azure 服务,您只需单击一个按钮即可创建和扩展 Postgres 集群;您的 Postgres 设置已经经过调整,可以从硬件中获得额外的性能;您可以获得自动备份,可以轻松地从中恢复;如果集群中的一个节点崩溃,假设您启用了高可用性 (HA),会自动故障转移到另一个节点。您还可以轻松与其他 Azure 云服务集成,例如 ADF、Azure 流分析、Azure Kubernetes 服务、应用服务等……如果遇到问题,您可以随时联系专业的 Azure 支持团队。
由于商业模式的变化,我们开始考虑:如果客户主要为托管服务付费,这是否意味着我们可以让 Citus 完全开源?而让 Citus 完全开源的优势是什么?
图 1:你们中的许多人和我们一样对开源 Citus Enterprise 的剩余功能感到兴奋。我在 GitHub 上对这些企业功能进行开源的提交是我唯一一次出现在Hacker News 头版的提交。
Citus 完全开源的优势
即使将所有东西都开源并没有太大的缺点,那么开源也需要有一些优势,我们才能花精力摆脱现状。
正如您可能想象的那样,使 Citus 完全开源有很多好处。
更多的开源功能意味着更多的开源用户
可能从完全开源的 Citus 中受益最明显的群体是那些已经使用开源版本的 Citus 的人。如果您是该组的一员,只需升级到 Citus 11,您就会突然获得额外的功能。谁不喜欢很多新功能?
但是,如果您还没有使用 Citus,那么这个版本也可能是一个转折点。借助在线分片重新平衡器和更好的用户管理等这些额外功能,我们希望更多人尝试 Citus。对于一些人来说,Azure 上的 Citus 可能还不适合,或者可能选择不使用 Citus,因为它缺少一些对您至关重要的功能。但是现在我们完全开源,已经消除了这个阻碍!
我们希望尽可能多的人使用 Citus 构建和部署应用程序——无论您使用的是 Azure 上的 Citus 还是开源Citus。主要由于以下原因:
更多人受益于 Citus:我们认为 Citus 很棒(或许有些偏爱),我们认为更多的人可以从使用中受益。对于像我这样的 Citus 工程师来说,让人们从我们正在构建的软件中受益本身就已经是一种回报。
更多贡献:作为用户,您很可能直接为 Citus 及其社区做出贡献。您可以在我们的Slack 频道或Stack Overflow上帮助其他人,可以报告遇到的错误,甚至可以贡献代码。所有这一切都会让 Citus 变得更好。当然,所有这些都是可选的。我们知道你们中的一些人已经极大地改进了 Citus 并使得社区人数也在增加和活跃。
更多客户:这可能是最违反直觉的原因,但从长远来看,我们预计更多的开源用户会导致更多客户在 Azure 上使用 Citus。也许您现在是开源 Citus 用户,但将来想迁移到 Azure,或者您告诉朋友 Citus 有多棒,这导致您的朋友在 Azure 上采用 Citus。因此,如果您是开源用户,您很可能最终会影响人们在未来使用 Citus 托管服务。
笔记本电脑和 Azure 之间的功能相同
如果您已经在 Azure 上使用 Citus 托管服务,那么您已经可以使用新的开源功能。但是,如果您是开发人员,Azure 可能不是您使用 Citus 的唯一地方。您可能还在您的开发机器上安装了 Citus 的开源版本,以开发和测试您的应用程序。因此,在过去,您的开发机器上的环境会与您的生产环境略有不同。这是不可取的,因为许多开发人员喜欢使开发环境尽可能接近生产环境,这样您就可以捕获最多的错误。
通过开源 Citus 11 中剩余的 Citus 功能,您现在可以在云中和笔记本电脑上的 Citus 之间实现完全的功能对等。
更多的开发人员时间花在改进 Citus 上
最后但并非不重要的是,通过开源所有 Citus,我们显著提高了我们开发人员(包括我自己)的幸福感和生产力。
在 Citus 11 之前,我们有两个 git 存储库。一个公共 GitHub 存储库,用于 Citus 的开源版本和一个包含“企业”版本 Citus 的私有存储库。
因此,在 Citus 11 之前,每个新的 Citus 版本都需要大量的开发人员和时间来完成将公共存储库中的更改合并到私有存储库的重复性任务。通常会导致烦人的合并冲突,或测试期间的行为略有不同。这不不是令人喜欢的工作部分。而且也很耗时。现在一切都是开源的,我们可以更多地专注于我们热爱的工作:改进 Citus 和分发 PostgreSQL!
我们表明我们热爱开源
虽然我的一些队友在为 PostgreSQL和Citus开发我们的 Azure 托管服务,但在Microsoft的相当多的工程同事将大部分时间都花在了 Postgres 开源项目的提交上。我们还维护 Postgres的其他开源扩展,例如pg_cron、hyperloglog和TopN。我们认为通过让 Citus 完全开源,可以更好地展示我们对开源的热爱。
那么,我们究竟在 Citus 11 中开源了什么?
Citus 的大部分代码在 Citus 11 之前就已经是开源的——我们已经从 Postgres 中分离出 Citus,并在 2016 年将 Citus作为 Postgres功能扩展的开源项目。那么,Citus 11 中究竟开源了哪些新功能?可以在我们的更新页面上找到新开源功能的完整列表,但我在下面强调了我认为您可能会从中受益最多的功能:
非阻塞分片重新平衡器:允许您在不停机的情况下扩展集群。在 Citus 10中,我们开源了 shard rebalancer,但它只允许您在阻止写入被移动的分片时进行重新平衡。使用 Citus 11,当您需要为集群添加更多计算能力或磁盘空间时,无需再进行部分停机。使用非阻塞分片重新平衡器,您的集群在您想要重新平衡集群中的数据的任何时候都是完全在线的。
CREATE/ALTER/DROP ROLE 的传播:在多用户Postgres环境中非常有用。在 Citus 的开源版本中,设置一个包含多个 Postgres 用户的集群非常麻烦。您必须在每个节点上创建每个角色,并且当您添加一个新节点时,您也必须在那里添加它。现在不是这种情况了!您现在可以在协调器上创建或编辑角色,您的更改也将自动出现在集群中的所有其他节点上。
GRANT语句的传播:允许您轻松管理集群中用户的权限。您在分布式表上执行的 GRANT 语句现在完全符合您的预期:它们向所有底层分片授予相同的权限。同样,当您授予对整个模式的访问权限时,这些相同的权限现在将传播给所有工作人员。
pg_dist_authinfo 的身份验证选项:允许您轻松配置节点应如何相互进行身份验证。以前,您需要使用.pgpass文件来配置在使用开源 Citus 时在节点之间进行身份验证的密码。随着 Citus 11 现在完全开源,您可以使用更容易且功能更强大的替代方案:pg_dist_authinfo表格。在此表中,您可以放置应用于向其他节点进行身份验证的凭据。这些凭据可以是 Postgres 支持的任何身份验证选项,例如密码或 TLS 证书。特别易于pg_dist_authinfo使用的是,您可以为每个用户创建一个共享的单行,用于对集群中的任何节点进行身份验证,同时使用.pgpass方法您需要为每个节点和用户组合使用一行。
行级安全性 (RLS):不是大多数 Postgres 用户使用的功能。但对于用户中的一些人来说,这是一项关键功能,可让您精确配置谁可以读取哪些数据。在 Citus 11 中,我们在分布式表上开源了对此功能的支持。您在分布式表上创建的任何 RLS 规则现在也会自动在所有分片上创建。因此,如果这阻碍了您迁移到 Citus,那就少了一个原因。
事后看来,上述论点和推理现在似乎很明显,但需要一些时间才能让利益相关者保持一致。但最终团队同意了,每个人都对这一巨大的进步感到非常兴奋。
剩下要做的唯一决定是何时开源代码:Citus 11.0 版本是显而易见的候选者。然后由于 git 的强大功能,实际上开源所有代码非常容易。它几乎就像以下四个命令一样简单:
# Create new branch based on open source code
git checkout -b open-source-master-merge-enterprise open-source/master# Copy all files tracked by git from the enterprise repo
git checkout enterprise/master .# Keep the open source license instead of the enterprise license
git checkout HEAD -- LICENSE# Create one big commit
git commit -m 'Make enterprise features open source'
在这样做之后,我们仍然需要仔细检查提交的内容。确保在代码注释或类似内容中没有对特定客户的引用。而且,我们可以创建一个完整的列表,列出我们正在开源的所有功能(其中一些甚至让我们感到惊讶)。
最后剩下的就是在我们的开源存储库中使用这个提交创建一个拉取请求,而 Citus 是完全开源的。
通过开源 Citus 11 中的所有代码,我们试图让 Citus 用户的生活变得更好,无论您是在本地、Azure 上的云中还是在笔记本电脑上使用它。因此,请尽情尝试 Citus 11 版本。如果您不知道从哪里开始,您应该查看我们的入门页面(https://www.citusdata.com/getting-started/)。如果您有任何问题,只需加入我们的Slack频道或在Stack Overflow上提问。
免责声明:
1、本站资源由自动抓取工具收集整理于网络。
2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。
3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。
4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。
5、如果您喜欢本资源,请您支持作者,购买正版内容。
6、资源失效,请下方留言,欢迎分享资源链接
文章评论