学堂 学堂 学堂公众号手机端

微软开源Citus企业版全部功能:提供分布式Postgres数据库功能

lewis 1年前 (2024-04-09) 阅读数 14 #技术

6 月份时,CitusData 推出了 Citus 11.0,并宣布将所有企业版的特性进行开源。Citus 是 PostgreSQL 的一个扩展,将 Postgres 转变为分布式数据库,用户可以在任何规模下实现高性能。

在公布该消息数月后,当地时间 9 月 12 日,微软的 Postgres 和 Citus 开发人员 Jelte Fennema 发文表示,团队已经完成了 Citus 的完全开源。“事后看来,Citus 的全面开源简直是势在必行,但实际操作中还是需要逐步让各利益相关方达成一致,团队最终同意了这项尝试。”

Citus 11.0 到底开源了什么?


实际上,Citus 的大部分代码在版本 11.0 之前就已经开源了。Citus 项目最早拆分自 Postgres,并在 2016 年以 Postgres 扩展的形式进行了开源。那么,这次到底全面开源了哪些功能?

Citus 11.0 中的完整开源功能列表:

​​https://www.citusdata.com/updates/v11-0/#enterprise-opensource​​

Fennema 介绍了几项 Citus 刚刚转向开源的重要功能:

非阻塞分片重新负载均衡器,允许用户在不停机的情况下横向扩展集群。在 Citus 10 当中,团队开源了分片重新负载均衡器,但当时在对分片进行重新负载均衡器,会暂时阻塞写入操作。而在 Citus 11.0 版本中,如果用户需要为集群添加更多计算容量、或者可用磁盘空间不足,则无需部分停机也能完成扩展。使用非阻塞分片重新负载均衡器,集群能够随时随地实现数据的重新均衡,而且始终保持在线。CREATE/ALTER/DROP ROLE 广播在多用户 Postgres 环境中属于常见操作。在 Citus 的开源版本中,设置一个包含多个 Postgres 用户的集群非常麻烦。用户需要在各个节点上创建各个角色,在添加新节点时再额外创建。现在问题终于得以解决,用于可以在协调器上创建或编辑角色,做出的变更将被自动广播到集群内的全部其他节点。GRANT 语句广播,能帮助用户轻松管理集群内的用户权限。现在,用户在分布式表上执行的 GRANT 语句将以完全符合预期的方式执行:向所有底层分片授权相同的权限。同样,当用户使用 GRANT 向整个 schemas 授予访问权限时,同样的权限现在也将被广播给所有 worker。pg_dist_authinfo 身份验证选项,能帮助用户轻松对节点间的身份验证方式做出配置。以往的开源版 Citus 需要使用.pgpass 文件才能配置各节点间的身份验证密码。随着 Citus 11.0 的全面开源,用户有了更易用、功能更强大的新选项:pg_dist_authinfo 表。在此表中,用户可以添加用于向其他节点进行身份验证的凭证,这些凭证可以是 Postgres 所支持的任何身份验证选项,例如密码或者 TLS 证书。pg_dist_authinfo 之所以特别易用,原因是可以为每个用户创建一条共享单行,借此对集群中的任意节点进行身份验证。反观以往的.pgpass 方法,需要为每个节点和用户组合添加单独的一行。行级安全(RLS)对大多数 Postgres 用户来说可能有点陌生,少数经常使用的朋友知道其重要意义。行级安全的作用就是精确配置谁能够读取哪些数据。在 Citus 11.0 中,团队在分布式表上开源了这一功能支持。因此,用户可以在分布式表上创建的任何 RLS 规则,现在也会自动被创建至所有分片。

“我们已经不再销售企业许可证”

根据 Fennema 的介绍,之所以把 Citus 11.0 中最后几项企业功能也开源,重要原因之一就是 Citus 的商业模式已经改变。

“在 2011 年 Citus 刚刚诞生时,我们的商业模式主要是向企业客户销售许可证,还有提供技术支持服务。2016 年,我们将 Citus 从 Postgres 中拆分了出来,并开源了其中大部分功能。之后,我们继续闭源一部分企业功能,借此将企业许可证跟开源版本区分开来。但随着时间推移,我们已经不再销售企业许可证,商业模式的变化自然改变了我们的开源思路。” Fennema 说道。

目前,Citus 的商业模式主要以托管服务为核心,即 Azure Database for PostgreSQL——Hyperscale(Citus),这本质上就是以 Citus 开源为基础添加“托管”选项,帮助用户打理数据库、节约时间。借助这项 Azure 服务,用户只需单击一个按钮即可创建和扩展 Postgres 集群:

用户使用的 Postgres 设置已经过调优,能够从硬件中挖掘出额外的性能。用户还能获得自动备份功能,轻松完成数据恢复。如果集群中某个节点发生崩溃,只要启用高可用性(HA)功能,系统就会自动故障转移至另一节点。用户还可以轻松与其他 Azure 云服务相集成,包括 ADF、Azure Stream Analytics、Azure Kubernetes Service、App Service 等等……而且无论遇到什么问题,用户都可以随时求助的 Azure 技术支持团队。

“伴随着商业模式的变化,我们也萌生出新的想法:如果客户主要为托管服务付费,那我们要不要让 Citus 完全开源?”Fennema 表示。显而易见,Citus 团队最终决定按照这个思路运行。那么,这条全面开源的路线,又会为 Citus 带来怎样的优势?

全面开源有什么好处?

“虽然开源本身肯定不会是坏事,但毕竟也对应着相当可观的工作量,所以自然要有相应的好处作为驱动力。”Fennema 表示,Citus 全面拥抱开源毫无疑问会带来诸多助益。

首先,开源功能越多,开源的用户也越多。Citus 全面开源的最大受益者就是那些已经在使用之前 Citus 开源版本的开发者,他们只需要升级至 Citus 11 .0 就能直接获得大量额外功能。但是借助在线分片重新负载均衡器和更好的用户管理功能,团队也希望能吸引到更多人来体验 Citus。

在 Fennema 看来,以往,Azure 上的 Citus 可能并不太适合相当一部分朋友的应用需求,或者 Citus 原本的开源版本缺少一些至关重要的功能。现在问题解决了,开源 Citus 就是完全体,可以吸引更多开发者使用。

另外,Fennema 认为,完全开源可以为 Citus 带来更多的客户。“这可能是最反直觉的,但从长远来看,预计全面开源反而会让更多客户在 Azure 上使用 Citus。比方说,您目前只是 Citus 开源版的用户,短期内还没有转向 Azure 的打算。但您可能会在闲聊时向朋友推荐 Citus,而对方正好想要上云,于是就选择了 Azure、选择了 Citus。这就是开源用户推广开源项目,帮助 Citus 托管服务占领市场的一种可能方式。”

其次,无论是个人设备还是在 Azure 云端,Citus 都将提供同等功能。Fennema 表示,对于开发者,Citus 的使用范围不会只局限在 Azure 上。开发者可能需要在开发设备上安装 Citus 开源版,用来开发和测试自己的应用程序。但过去,尚未全面开源的 Citus 会导致开发环境和生产环境间存在差异。在 Citus 11.0 将剩余的功能开源后,开发者现在可以在云端和开发设备之间获得完全对等的 Citus 功能。

最后,将有更多开发者投入精力,帮助改进 Citus。Fennema 表示,通过全面开源 Citus,团队显著提高了项目开发者的幸福感和生产效率,包括他自己。

“在 Citus 11.0 版本之前,我们其实维护着两套 git repo:一个是公共 GitHub repo,用于容纳 Citus 开源版本;另一个则是企业版,对应一套私有 Citus repo。所以在 Citus 11.0 发布之前,每次推出新版本时,开发者都需要承担起将公共 repo 中的变更合并至私有 repo 的重复性劳动。期间不单会出现种种烦人的合并冲突,而且最终成效还经常跟测试期间有所不同。没人愿意被这类工作定期折磨,纯属浪费时间。如今全面开源之后,我和同事们可以更多专注于真正热爱的工作:改进 Citus 与分布式 PostgreSQL。”

Citus 迎来全面开源

Citus 团队认为,Citus 11.0 版本明显是开源代码的好机会。Fennema 介绍,凭借着 git 的强大功能,代码的全面开源其实非常轻松,只使用了以下四行命令:

在完成之后,Citus 团队对提交内容进行了检查,确保代码注释等内容中不会引用到特定客户。在此期间,团队还创建出一份完整清单,列出了实际开源的所有功能。最后一步,就是在开源 repo 中使用上述提交创建一个 PR。至此,Citus 已经完全开源。

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门