ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FerretDB v1.12 发布解读:新 PostgreSQL 后端、arm64 支持与可观测性增强

FerretDB v1.12 发布解读:新 PostgreSQL 后端、arm64 支持与可观测性增强 后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载FerretDB v1.12 是该项目迈向以全新架构支撑 PostgreSQL 后端的关键版本。本文围绕 v1.12 的四大主线——新 PostgreSQL 后端的启用方式与架构意义、linux/arm64 二进制与 .deb/.rpm 包、生产 Docker 镜像的瘦身策略以及 Prometheus 指标与dbStats响应的增强——展开技术解读并结合当前仓库源码说明这些能力在 FerretDB 中的落地形态。读完本文你将掌握 v1.12 新后端的启用参数、多架构交付方式以及相关统计命令与查询兼容性修复背后的实现脉络。版本概览v1.12 带来了什么FerretDB v1.12 的核心是新的 PostgreSQL 后端。在当时的开发周期中团队正着手将存储层迁移到全新的 PostgreSQL 实现v1.12 首次将该后端公开给社区测试与此同时本次发布还补齐了linux/arm64 二进制与 .deb/.rpm 软件包、调整了Docker 生产镜像的基础镜像策略并在可观测性与兼容性上做了多项改进。这些内容对应了当前仓库中持续演进的若干能力PostgreSQL 连接与统计命令的实现位于 internal/handler/msg_dbstats.go多架构构建在 Taskfile.yml 中通过PLATFORM: linux/amd64,linux/arm64定义Prometheus 指标则在 internal/clientconn/listener_metrics.go 中实现。新 PostgreSQL 后端如何启用与为何重要v1.12 最大的变化是全新的 PostgreSQL 后端。该后端采用经过重新设计的架构目标是让 FerretDB 在 PostgreSQL 之上提供更高兼容性、更可靠的 MongoDB 体验。在 v1.12 中新后端默认不启用需要显式开启# 方式一命令行标志 ferretdb --postgresql-new # 方式二环境变量与标志等价 export FERRETDB_POSTGRESQL_NEWtrue ferretdbFerretDB 的配置设计遵循每个标志都有等价环境变量的约定这一点在 website/docs/configuration/flags.md 中有明确说明To make user experience cloud native, every flag has its environment variable equivalent.例如--postgresql-url对应FERRETDB_POSTGRESQL_URL。因此--postgresql-new与FERRETDB_POSTGRESQL_NEWtrue是同一配置项的两种表达方式适合在容器编排、systemd 或 CI 中按场景选用。注意--postgresql-new属于 v1.12 时期的过渡性开关用于让社区提前验证新后端。该标志在新版本中已被移除新后端随后成为默认并最终整合进统一的 PostgreSQL/DocumentDB 架构本文的描述以 v1.12 版本为准。从当前仓库的实现可以反推新后端在统计类命令上的落地形态dbStats命令由 internal/handler/msg_dbstats.go 中的msgDBStats实现它通过h.p.WithConn获取连接后调用documentdb_api.DbStats将统计逻辑下沉到 PostgreSQL 侧的存储过程封装层 internal/documentdb/documentdb_api/documentdb_api.go再由row.Scan直接取出 BSON 结果返回客户端。这种处理器只做参数校验与连接管理、统计计算交给数据库端的结构正是新后端架构的典型特征——大量 MongoDB 语义被下沉到 PostgreSQL 内部实现。arm64 二进制与 .deb/.rpm 软件包社区长期呼吁的linux/arm64 支持在 v1.12 正式落地除了 x86_64 外官方同时提供arm64 二进制以及对应的.debDebian/Ubuntu与 .rpmRHEL/Fedora软件包方便 ARM 服务器与树莓派等场景直接安装。这一多架构交付策略在当前仓库的构建体系中依然延续并扩展Taskfile.yml 中大量构建任务使用PLATFORM: linux/amd64,linux/arm64定义目标平台矩阵例如第 550、571、603 行附近的镜像与包构建任务并配合for: [amd64, arm64]逐架构循环产出产物。运行时层面架构信息也会被如实暴露给客户端build/version/documentdb.go第 43 行根据runtime.GOARCH arm64做架构相关的版本/兼容判断internal/handler/msg_hostinfo.go 在hostInfo命令响应中通过cpuArch, runtime.GOARCH上报实际 CPU 架构。也就是说无论二进制还是包arm64 都成为与 amd64 平级的一等公民方便用户在uname -m为aarch64的机器上直接部署。Docker 生产镜像以 scratch 为基础实现极致瘦身v1.12 对 Docker 镜像做了重要调整生产镜像改用scratch作为基础镜像。这意味着镜像内不再包含 shell、包管理器或任何操作系统工具唯一存在的文件就是 FerretDB 可执行文件并内嵌了根 TLS 证书从而显著减小镜像体积、降低攻击面。这种单一静态二进制 内嵌证书的生产镜像思路与 FerretDB 的整体交付哲学一致二进制应自包含、可随处运行。仓库内用于日常开发的镜像则不同——build/ferretdb-bw/Dockerfile 面向build with tools的调试场景安装了mongodb-mongosh、tmux、git-lfs以及 Go 工具链方便开发者在容器内直接调试生产镜像则走scratch路线与开发镜像形成鲜明的职责分工。对使用者而言这意味着拉取生产镜像后无需也无法进入容器做任何运行时修补配置一律通过启动参数与环境变量注入例如docker run --rm -p 27017:27017 \ -e FERRETDB_POSTGRESQL_URLpostgres://user:passhost:5432/postgres \ ghcr.io/ferretdb/ferretdb可观测性增强Prometheus 指标与 dbStats 扩展v1.12 面向运维场景做了两项重要增强其一Prometheus 采集器Registry新增基础指标统计数据库数量与集合数量。这为监控大盘补充了库表规模这一关键维度。当前仓库中 Prometheus 指标体系已相当完整例如 internal/clientconn/listener_metrics.go 定义了连接接受数acceptsCounterVec与连接时长durationsHistogramVec两类指标并通过Describe/Collect接入标准prometheus.Collector接口internal/clientconn/listener.go 在监听器层面同样实现了 Collector 接口。仓库的监控接入方式可参考 website/docs/configuration/observability.md。其二dbStats响应补充了索引的额外细节。dbStats是 MongoDB 运维中查询库级统计的常用命令。在 FerretDB 中它由 internal/handler/msg_dbstats.go 的msgDBStats处理先通过getRequiredParamstring解析目标数据库名再调用documentdb_api.DbStats(connCtx, conn, h.L, dbName, 1, true)获取统计文档并原样返回。存储过程封装层 internal/documentdb/documentdb_api/documentdb_api.go 负责在 PostgreSQL 端完成聚合统计返回包含集合数、数据大小以及v1.12 新增的索引相关字段的 BSON 文档。围绕dbStats仓库维护了完整的兼容性测试套件integration/commands_administration_test.go 中从TestDBStatsCommand基础统计到TestDBStatsCommandScalescale参数、TestDBStatsCommandFreeStoragefreeStorage参数覆盖了主流参数组合例如command : bson.D{{dbStats, int32(1)}, {scale, tc.scale}}这些测试确保了 v1.12 对dbStats的增强与 MongoDB 行为保持一致。查询兼容性修复放宽_id在投影中的位置限制v1.12 还修复了上一版本遗留的兼容性问题投影projection中_id不再必须位于第一个字段而是允许出现在任意位置。此前当_id不是投影首字段时会被拒绝v1.12 放宽了这一限制使其更贴近 MongoDB 的投影语义也让实际业务查询中常见的字段顺序写法得以正常工作。投影处理在 FerretDB 的多个入口中都有体现。例如 Data API 的查询处理链中internal/dataapi/server/find.go 与 internal/dataapi/server/find_one.go 会将projection参数透传给下游而 Data API 的 OpenAPI 模型internal/dataapi/api/gen.go也将 Projection 定义为可选字段。这一修复意味着从 Mongo Shell、驱动到 Data API 的所有访问路径都能接受_id位于投影任意位置的写法。社区动态与版本演进v1.12 发布于 2023 年 10 月的 Hacktoberfest 期间该版本迎来了 5 位新贡献者这也从侧面印证了 FerretDB 开源社区在持续壮大。从项目后续演进看v1.12 引入的新 PostgreSQL 后端最终发展为默认后端并演进出基于 DocumentDB 扩展的架构当前仓库中 internal/documentdb 目录下的documentdb_api、documentdb_core等模块正是这一演进路线的直接产物。对希望深入验证 v1.12 相关能力的读者推荐从以下仓库路径入手配置体系 website/docs/configuration/flags.md标志与环境变量的完整对应关系dbStats实现 internal/handler/msg_dbstats.go 与 integration/commands_administration_test.go多架构构建 Taskfile.yml 中PLATFORM: linux/amd64,linux/arm64相关任务观测指标 internal/clientconn/listener_metrics.go 与 website/docs/configuration/observability.md需要说明的是本文基于 v1.12 发布说明撰写部分配置标志如--postgresql-new是当时版本的过渡性开关在当前 v2 代码库中已不复存在仓库中的实现细节与文件路径则以当前源码为准。在解读历史版本时请以对应版本的发布产物为运行依据。赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐FerretDB v1.5.0 发布SQLite 后端 Beta 支持全面解读与实战指南FerretDB v1.5.0 发布SQLite 后端 Beta 支持全面解读与实战指南 2023 年 7 月FerretDB 发布 v1.5.0首次为后端数据库文档数据库SiYuan v3.0.17 发布解读Windows/Linux arm64 支持、Web 剪藏增强与数据库内部 API 新增SiYuan v3.0.17 发布解读Windows/Linux arm64 支持、Web 剪藏增强与数据库内部 API 新增 本文围绕思源笔记SiYuan知识管理知识库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表