赞
踩
Infisical,一家做密钥管理的开源商业公司,主要对标的是 HashiCorp Vault
Infisical 在过去一年里迅速发展,平台现在每天处理超过 5000 万个密钥,将应用程序配置和私密数据发送给需要的团队、CI/CD 流水线以及服务器 / 应用程序。
随着使用量的持续增长,我们不得不不断升级我们的技术栈。最近,Infisical 进行了一次全面的数据库迁移,从 MongoDB 迁移到 PostgreSQL。这涉及到对此项计划的深思熟虑、采用新技术、创建新的数据库 schema、重构逻辑、重写查询语句,以及将数百万(如果不是数十亿)的数据库记录迁移到 PostgreSQL。这是一个复杂的过程,但无论如何都是必要且有利于平台改善的步骤。
一、为何抛弃 MongoDB
在能力和可用性方面,我们和客户经常遇到 MongoDB 带来的限制问题,比如缺乏对事务、清理、云托管产品中版本一致性的支持,更不同提与 schema-less 数据库设计结构相关联的问题了
挑战的详细解释:
在寻找新的数据库时,我们首先列出了对我们最重要的几个方面:管理便利性(即包括配置、部署和扩展),内置事务支持,以及关系型功能。在讨论过程中,我们还考虑了是否应该构建自己的集成存储或寻求外部存储解决方案
选项的意义:
经过慎重考虑,我们选择了 PostgreSQL。除了拥有活跃的社区、详尽的文档以及大量可用的解决方案和扩展外,我们最欣赏的是它开源的本质以及绝大多数云服务提供商都提供 PostgreSQL 的托管服务
在确定使用 PostgreSQL 后,我们需要弄清楚我们的应用程序将如何与数据库进行交互。一开始,我们希望找到一个可以与我们使用 Mongoose ORM 的 MongoDB 体验相媲美的东西。因此,我们开始根据成熟度、可视化和迁移支持以及适当的抽象级别来评估候选者;主要考虑了 Drizzle ORM、Prisma ORM、TypeORM 和 Knex.js(一种查询构建器)。
Knex.js 还带有自己的 seeding 和 schema 迁移工具包,并拥有成熟的生态系统以及几乎可以回答任何可能查询问题的优秀文档。通过一些自定义 Zod 集成工作,我们设法使其达到对 TypeScript 支持满意度较高水平。
在确定了数据库和 ORM 后,我们启动了一个流程,最终的工作量是重写数十个数据结构和应用程序中数百个查询。
Bytebase 和 Infisical 在部署形态上也有相似之处。因为要访问用户数据库,企业出于数据安全的原因,往往需要私有化部署。Bytebase 的一大优势就是部署简单。POC 时,运行一个 Go 的二进制文件,就能把前端,后端以及数据库一起跑起来(利用了 Go 1.16 引入的 embed 功能)。如果是生产部署,就也只需要外接一个 PostgreSQL 数据库就行了。
来源:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。