暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

非法加冯 2024-08-06
120

几个月前,我写了一篇《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
     目录下,并分为 default
    dbms
    demo
    build
     四大类。


    其他新特性

    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 节点的沙箱环境:meta
    dual
    trio
    full
    prod
    ,以及针对 7 大 OS Distro 的快捷配置模板。


    API变更

    新参数选项: pg_mode
     现在支持的模式有 pgsql
    citus
    gpsql
    mssql
    ivory
    polar
    ,用于指定 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.19pg_exporter: 0.7.0Patroni: 3.3.2pgBouncer: 1.23pgBackRest: 2.53vip-manager: 2.6.0Haproxy: 3.0.2FerretDB: 1.23sealos: 5.0.0duckdb: v1.0.0etcd: 3.5.15Grafana: 11.1.3Loki: 3.1.0 (因为不兼容更新,Promtail 保持 3.0.0 版本)Prometheus: 2.53.1pushgateway: 1.9.0node_exporter: 1.8.2nginx: exporter 1.2.0victoriametrics: 1.102.0victorialogs: 0.28.0redis_exporter: 1.62.0vector: 0.39.0

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


    新应用

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

    Dify[23]:AI智能体工作流编排与 LLMOpsOdoo[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.yml
    https://github.com/Vonng/pigsty/blob/master/roles/node_id/vars/rpm.yml
    [12]
     deb.yml
    https://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:这个星球最成功的数据库》





    文章转载自非法加冯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论