查看原文
其他

PG隆中对,一个PG三个核,一个好汉三百个帮

冯若航 非法加冯
2024-09-02

几个月前,我写了一篇《PostgreSQL正在吞噬数据库世界》,阐述了扩展对于 PG 生态的重要性,引发了 PostgreSQL 社区对 Extension 讨论的巨大热情。在六月温哥华举办的 PGCon.Dev 上,更是有一整个关于扩展的峰会专场,PG Hacker 们聚集在一起探讨 PG 生态的未来。

在七月中旬杭州举办的PG中文技术大会上,我进行了一个题为《数据库世界的未来:PostgreSQL,扩展,与服务》的主题分享,进一步讨论了这个主题 —— 我认为, PostgreSQL + 扩展,已经几乎没给其他数据库内核留下多少活路了,真正的竞争将发生在PG生态内部,扩展,服务与发行版。

PostgreSQL 将成为数据库世界的 Linux 内核”,已经成为了许多开发者的共识。但真正重要的不是仅仅 “认识数据库世界”,而是如何 “改变数据库世界”。在这一点上,我确实有一些思考与想法。经过三个月的打磨,Pigsty 终于决定发布其历史上第三个大版本 —— 势必要在 PostgreSQL 征服数据库世界这件事上推波助澜,添砖加瓦。


一个PG三个核

关系型数据库有四大天王:PostgreSQL,MySQL,SQL Server,Oracle。这四个数据库在 DB-Engine 上的热度与其他数据库拉开了数量级差距。最多再加上 MongoDB,就凑成了数据库市场上的主力玩家。

BTW,热度只适合作为纵向对比参考,根据 StackOverflow 2024 调研,PostgreSQL 已经连续三年成为专业开发者使用率最高的数据库了。

然而这五个数据库中,另外四个都完全暴露在 PostgreSQL 的威胁与挑战之中。例如:AWS 开源的 Babelfish 提供了对 MSSQL 线缆协议/SQL 级别的兼容性支持,允许 PG 扮演一个 SQL Server,而应用客户端什么都不改。

PG 上的 Oracle 兼容性,有 EnterpriseDB,瀚高的开源 IvorySQL,以及阿里过国测的 PolarDB O(一个 PolarPG 的分支)在做。PG 上的 MySQL 兼容性,国外有 NextGres,国内有Halo等数据库在做。MongoDB 的兼容性,则有 FerretDB 与 PongoDB,分别在中间件线缆协议与客户端驱动库侧,实现了基于 PG 的 MongoDB。

其他主要数据库上的存量应用也正在加速搬迁至 PostgreSQL 生态,从而孵化出了这种独一无二的奇观 —— 让一个 PostgreSQL ,仿真其他各种各样的数据库。但如何进一步推动这一趋势,让这种力量形成合力,是一个棘手的问题。这些数据库内核公司交付的东西,往往只是一个/几个PG内核 RPM 包,距离一个生产实用的完整数据库服务(RDS)仍然有相当远的距离。好在 PG 生态已经有足够优雅完美的解决方案了 —— Pigsty。

在 Pigsty v3 中,我们完美集成了 Babelfish,IvorySQL 与 PolarPG 三个开源的 PostgreSQL Fork ,允许您在使用本地优先 RDS 服务时,切换不同的 PG 内核。获得开箱即用的 SQL Server 兼容性, Oracle 兼容性,MongoDB 兼容性。与此同时,我们还会在商业版中进一步提供其他“PG系国产数据库”内核的植入能力。


一个好汉三百个帮

虽然提供其他数据库的兼容性有助于搬迁存量用户,但我必须说:这只是过渡时期的临时任务。数据库世界与 PostgreSQL 的未来重心依然会聚焦在开发者功能特性上。而实现这一点的正道绝不是分叉内核,而是通过功能扩展(Extension)的形式。

PostgreSQL 与其他数据库不同之处在于,它有着所有 DMBS 中首屈一指的可扩展性,无论是机制上的支持程度还是生态中的实际插件数量,都让其他所有竞争者难望其项背。因此,除非像上面那种要在 Protocol / SQL 语法机制上适配其他数据库的场景需要对内核进行轻微修改,其他绝大多数功能需求都可以在 PG 生态中通过插件的形式解决 —— 这一点对生态构建提供了极大的便利性。

根据 PGXN 的记录,PG 生态有 375 款登记在案的扩展插件。实际上根据这个列表,PG 生态的扩展已经有 1000+ 了。然而,如何将这么多的功能扩展整合到一起,交付给用户,成为了一个巨大的挑战,即使是 AWS 这样的云厂商,在这一点上依然力有不逮。PGXN 提供了一个从中心仓库下载源码现场编译的解决方案 —— 但这并不是总是能成功,也并没有覆盖所有的扩展。

在数据库世界,直接使用源码编译安装是 Hacker 们的习惯。但绝大多数的用户都不会在生产数据库服务器上安装编译工具链去 Build from Scratch,而是使用“官方仓库”预先针对不同操作系统打好的二进制软件包。

然而当我们审视 PGDG 官方提供的 Yum 与 Apt 仓库时,它们却只分别提供了 135 个与 109 个插件,而且,EL系统生态与Debian生态没有对齐 —— EL系有51 个扩展RPM没有对应的 Deb,Deb系有 25 个扩展Deb 没有对应的 RPM,两者只有 84 个共有扩展。

这确实带来了一个巨大的烦恼,我并不是批评 Devrim 的 YUM 仓库和 Christoph Berg 的 APT ,实际上他们做了非常杰出的工作,但我认为在这里可以有不少改善用户体验的空间。

于是,在 Pigsty v3 中,我们建设了一个 PG 扩展补充仓库:将EL系统与Debian生态的独有PG扩展插件相互移植,维护了 64 个扩展 RPM包[1] 与 77 个 DEB包[2]。并最终提供了史无前例的 280 个开箱即用的 总可用扩展[3] 

并且,Pigsty 还实现了两大 Linux 发行版阵营的 PG扩展生态大对齐。现在 280 个扩展,在 EL / Deb 同时可用的扩展数量达到了 253 个,绝大多数扩展都在两大阵营中同时可用了!(所以现在 Ubuntu/Debian 也能自建 Supabase 了!)

与此同时,我还着手建设了一个扩展元数据库,将 PG 生态的扩展信息收录其中,进行分类,打标,归档,建立信息页,让用户在选用扩展时能更为方便省心。

那么,让我们上手试一试吧?

总之,Pigsty v3 是我寄予厚望的一个版本。在3个辅助内核与近 300 款扩展插件的加持下,PostgreSQL 生态的力量得到了一次史无前例的整合,我相信它势必将在吞噬世界的过程中扮演重要的角色。

Pigsty v3 已经发布了第一个试用版本。欢迎大家上手体验并提出宝贵意见。

curl -fsSL https://repo.pigsty.cc/get | bash -s v3.0.0-a1

不要忘记数据库祖师爷石破天老爷子的论断:“永远不要低估开箱即用的影响!” 所以,没错,Pigsty 安装依然还是新服务器上一行命令的事,就是这么简单。

以下是 v3.0.0-a1 发布注记


亮点特性

大对齐

Pigsty将EL系统与Debian生态的独有PG扩展插件相互移植,维护了 64 个扩展 RPM包[4] 与 77 个 DEB包[5]。并最终提供了史无前例的 280 个开箱即用的 总可用扩展[6] ,实现了两大 Linux 发行版阵营的 PG扩展生态大对齐。

换内核

Pigsty v3 允许您更换 PostgreSQL 内核,目前支持了 SQL Server 兼容的 Babelfish (线缆协议级仿真),Oracle 兼容的 IvorySQL,以及 PG 版的 RAC PolarDB;此外,现在自托管 Supabase 也在 Debian 系统中可用。您可以让 Pigsty 中带有 HA,IaC,PITR,监控的生产级 PostgreSQL 集群仿真 MSSQL (via WiltonDB),Oracle via (IvorySQL),Oracle RAC (via PolarDB), MongoDB(via FerretDB),以及 Firebase (via Supabase)。

企业版

我们现在提供 Pigsty Pro 专业版[7],在开源版的功能基础上提供增值服务。专业版提供额外的功能模块:MSSQL,Oracle,Mongo,K8S,Victoria,Kafka,……,并提供更广泛的 PG 大版本、操作系统、芯片架构的支持。提供针对全系操作系统精准小版本定制的离线安装包,以及 EL7,Debian 11,Ubuntu 20.04 等过保老系统的支持;此外,专业版还提供内核可插拔定制服务,并对PolarDB PG 的原生部署、监控管控支持以满足“国产化”需要。


重大变更

本次 Pigsty 发布调整大版本号,从 2.x 升级到 3.0,带有一些重大变更:

首要支持操作系统调整为:EL 8 / EL 9 / Debian 12 / Ubuntu 22.04。EL7 / Debian 11 / Ubuntu 20.04 等系统进入弃用阶段,不再提供支持。有在这些系统上运行需求的用户请考虑我们的 订阅服务[8]

默认使用在线安装,不再提供离线软件包,从而解决操作系统小版本兼容性问题。bootstrap 过程现在不再询问是否下载离线安装包,但如果 /tmp/pkg.tgz 存在,仍然会自动使用离线安装包。有离线安装需求请自行制作离线软件包或考虑我们的 订阅服务[9]

Pigsty 使用的上游软件仓库进行统一调整,地址变更,并对所有软件包进行 GPG 签名与校验,标准仓库: https://repo.pigsty.io/{apt/yum},国内镜像: https://repo.pigsty.cc/{apt/yum}

API 参数变更与配置模板变更,EL 系与 Debian 系配置模板现在收拢统一,有差异的参数统一放置于 roles/node_id/vars/[10] 目录进行管理。配置目录变更,所有配置文件模板统一放置在 conf 目录下,并分为 defaultdbmsdemobuild 四大类。


其他新特性

•PG OLAP 分析能力史诗级加强:DuckDB 1.0.0,DuckDB FDW,以及 PG Lakehouse,Hydra 移植至 Deb 系统中。•PG 向量检索与全文检索能力加强:Vectorscale 提供 DiskANN 向量索引,Hunspell 分词字典支持,pg_search 0.8.6。•帮助 ParadeDB 解决了软件包构建问题,现在我们在 Debian/Ubuntu 上也能提供这一扩展。•Supabase 所需的扩展在 Debian/Ubuntu 上全部可用,Supabase 现在可在全OS上自托管。•提供了场景化预置扩展堆栈的能力,如果您不知道安装哪些扩展,我们准备了针对特定应用场景的扩展推荐包(Stack)。•针对所有 PostgreSQL 生态的扩展,制作了元数据表格、文档、索引、名称映射,针对 EL与Deb 进行对齐,确保扩展可用性。•为了解决 DockerHub 被 Ban 的问题,我们加强了 proxy_env 参数的功能并简化其配置方式。•建设了一个专用的新软件仓库,提供了 12-17 版本的全部扩展插件,其中,PG16的扩展仓库会在 Pigsty 默认的版本中实装。•现有软件仓库升级改造,使用标准的签名与校验机制,确保软件包的完整性与安全性。APT 仓库采用新的标准布局通过 reprepro 构建。•提供了 1,2,3,4,43 节点的沙箱环境:metadualtriofullprod,以及针对 7 大 OS Distro 的快捷配置模板。


API变更

•新参数选项: pg_mode 现在支持的模式有 pgsqlcitusgpsqlmssqlivorypolar,用于指定 PostgreSQL 集群的模式

pgsql:标准 PostgreSQL 高可用集群citus:Citus 水平分布式 PostgreSQL 原生高可用集群gpsql:用于 Greenplum 与 GP 兼容数据库的监控(专业版)mssql:安装 WiltonDB / Babelfish,提供 Microsoft SQL Server 兼容性模式的标准 PostgreSQL 高可用集群,线缆协议级支持,扩展不可用ivory:安装 IvorySQL 提供的 Oracle 兼容性 PostgreSQL 高可用集群,Oracle语法/数据类型/函数/存储过程兼容,扩展不可用 (专业版)polar:安装 PolarDB for PostgreSQL (PG RAC)开源版本,提供国产化数据库能力支持,扩展不可用。(专业版)

•新参数: pg_parameters,用于在实例级别指定 postgresql.auto.conf 中的参数,覆盖集群配置,实现不同实例成员的个性化配置。•新参数: repo_extra_packages,用于额外指定需要下载的软件包,与 repo_packages 共同使用,便于指定OS版本独有的扩展列表。•参数重命名: patroni_citus_db 重命名为 pg_primary_db,用于指定集群中的主要数据库(在 Citus 模式中使用)•参数强化:proxy_env 中的代理服务器配置会写入 Docker Daemon,解决科学上网问题,configure -x 选项会自动在配置中写入当前环境中的代理服务器配置。•参数强化:repo_url_packages 中的 repo.pigsty.io 会在区域为中国时自动替换为 repo.pigsty.cc,解决科学上网问题,此外,现在可以指定下载后的文件名称。•参数强化:pg_databases.extensions 中的 extension 字段现在可以支持字典与扩展名字符串两种模式,字典模式提供 version 支持,允许安装特定版本的扩展。•参数强化:repo_upstream 参数如果没有显式覆盖定义,将从 rpm.yml[11] 或 deb.yml[12] 中定义的 repo_upstream_default 提取对应系统的默认值。•参数强化:repo_packages 参数如果没有显式覆盖定义,将从 rpm.yml[13] 或 deb.yml[14] 中定义的 repo_packages_default 提取对应系统的默认值。•参数强化:infra_packages 参数如果没有显式覆盖定义,将从 rpm.yml[15] 或 deb.yml[16] 中定义的 infra_packages_default 提取对应系统的默认值。•参数强化:node_default_packages 参数如果没有显式覆盖定义,将从 rpm.yml[17] 或 deb.yml[18] 中定义的 node_packages_default 提取对应系统的默认值。•参数强化:pg_packages 与 pg_extensions 中的扩展现在都会从 rpm.yml[19] 或 deb.yml[20] 中定义的 pg_package_map 执行一次查找与翻译。•参数强化:node_packages 与 pg_extensions 参数中指定的软件包在安装时会升级至最新版本, node_packages 中现在默认值变为 [openssh-server],帮助修复 OpenSSH CVE[21]•参数强化:pg_dbsu_uid 会自动根据操作系统类型调整为 26 (EL)或 543 (Debian),避免了手工调整。•Boostrap 逻辑变化,不再下载离线软件包,添加 -k|--keep 参数,用于指定在本地安装 ansible 时是否保留现有的软件源。•Configure 移除了 -m|--mode 参数,使用 -m|--conf 参数指定配置文件,使用 -x|--proxy 参数指定代理服务器配置,不再尝试修复 ssh 本机问题。



版本升级

截止至发布时刻,Pigsty 主要组件的版本升级如下:

•PostgreSQL 16.3, 15.7, 14.12, 13.15, and 12.19•pg_exporter: 0.7.0•Patroni: 3.3.2•pgBouncer: 1.23•pgBackRest: 2.53•vip-manager: 2.6.0•Haproxy: 3.0.2•FerretDB: 1.23•sealos: 5.0.0•duckdb: v1.0.0•etcd: 3.5.15•Grafana: 11.1.3•Loki: 3.1.0 (因为不兼容更新,Promtail 保持 3.0.0 版本)•Prometheus: 2.53.1•pushgateway: 1.9.0•node_exporter: 1.8.2•nginx: exporter 1.2.0•victoriametrics: 1.102.0•victorialogs: 0.28.0•redis_exporter: 1.62.0•vector: 0.39.0

Pigsty 重新编译了所有 PostgreSQL 扩展插件,PostgreSQL 扩展插件的最新版本,请参考 扩展列表[22]


新应用

Pigsty 现在提供开箱即用的 Dify 与 Odoo Docker Compose 模板:

•Dify[23]:AI智能体工作流编排与 LLMOps•Odoo[24]:企业级开源 ERP 系统


问题修复

•通过 node_packages 中的默认值 [openssh-server],CVE-2024-6387[25] 可以在 Pigsty 安装过程中被自动修复。•修复了 Loki 解析 Nginx 日志标签基数过大导致的内存消耗问题。•修复了 EL8 系统中上游 Ansible 依赖变化导致的 bootstrap 失效问题(python3.11-jmespath 升级至 python3.12-jmespath)

References

[1] RPM包: /zh/docs/pgext/list/rpm/
[2] DEB包: /zh/docs/pgext/list/deb/
[3] 总可用扩展: /zh/docs/pgext/list/
[4] RPM包: /zh/docs/pgext/list/rpm/
[5] DEB包: /zh/docs/pgext/list/deb/
[6] 总可用扩展: /zh/docs/pgext/list/
[7] 专业版: /zh/docs/about/service
[8] 订阅服务: https://pigsty.io/zh/docs/about/service
[9] 订阅服务: https://pigsty.io/zh/docs/about/service
[10] roles/node_id/vars/https://github.com/Vonng/pigsty/tree/master/roles/node_id/vars
[11] rpm.ymlhttps://github.com/Vonng/pigsty/blob/master/roles/node_id/vars/rpm.yml
[12] deb.ymlhttps://github.com/Vonng/pigsty/blob/master/roles/node_id/vars/rpm.yml
[21] OpenSSH CVE: https://pigsty.io/zh/blog/db/cve-2024-6387/
[22] 扩展列表: /zh/docs/pgext/list/
[23] Dify: /zh/docs/software/dify
[24] Odoo: /zh/docs/software/odoo
[25] CVE-2024-6387: https://pigsty.io/zh/blog/db/cve-2024-6387/




发布注记

Pigsty v2.6:PostgreSQL 踢馆 OLAP

Pigsty v2.5.1发布:PG16能打了吗?

Pigsty v2.5 发布:Ubuntu/Debian支持与监控改版/新扩展

临水照花看Ubuntu与Debian:Pigsty v2.5

Pigsty 2.4:PG16支持,RDS监控与新扩展!

Pigsty v2.3.1:HNSW版PGVECTOR来了!

Pigsty v2.3 发布:应用生态丰富

Pigsty v2.2 发布 —— 监控系统大升级

Pigsty v2.1 发布:向量扩展 / PG12-16 支持

Pigsty v2.0.2 更好的开源RDS替代:Pigsty

Pigsty v2.0 发布,炮打 RDS

Pigsty v2 正式发布:更好的RDS PG开源替代

Pigsty v1.5.1发布

Pigsty v1.5 发布与新特性

Pigsty v1.4 正式发布!

Pigsty v1.4 前瞻

Pigsty v1.3.1 安装教程

开箱即用的Redis发行版 —— Pigsty v1.3

Pigsty v1.2 发布

Pigsty v1.1 发布/新功能介绍

Pigsty v1正式发布:开箱即用的PostgreSQL开源发行版

数据库老司机

点一个关注 ⭐️,精彩不迷路

对 PostgreSQL 与 Pigsty 感兴趣的朋友

欢迎微信搜索 pigsty-cc加入 PGSQL 交流群

StackOverflow 2024调研:PostgreSQL已经超神了

PostgreSQL正在吞噬数据库世界

让PG停摆一周的大会:PGCon.Dev参会记

PGCon.Dev 扩展生态峰会小记 @ 温哥华

PostgreSQL 17 Beta1 发布!牙膏管挤爆了!

为什么PostgreSQL是未来数据的基石?

PostgreSQL is eating the database world

技术极简主义:一切皆用Postgres

PostgreSQL:世界上最成功的数据库

PostgreSQL 到底有多强?



MySQL安魂九霄,PostgreSQL驶向云外

MySQL新版恶性Bug,表太多就崩给你看!

Oracle还能拯救MySQL吗?

Oracle最终还是杀死了MySQL!

MySQL性能越来越差,Sakila将何去何从?

用PG的开发者,年薪比MySQL多赚四成?

MySQL的正确性为何如此拉垮?

前MariaDB高管叛变至PG阵营

如何看待 MySQL vs PGSQL 直播闹剧

驳《MySQL:这个星球最成功的数据库》





继续滑动看下一个
非法加冯
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存