
Atlassian 最近将 400 万个 Jira 数据库迁移到了 Amazon Aurora,旨在降低 Jira Cloud 平台的成本并提高可靠性。由于涉及海量文件且受到托管服务的限制,传统的云迁移策略难以适用,因此团队开发了一款定制工具来协调整个迁移过程。
Atlassian 工程博客上的一篇文章描述了迁移数千个 PostgreSQL 集群(每个集群包含多达 4000 个数据库)的技术挑战和成果。
Atlassian 为 Jira 设计的架构是一个租户对应一个数据库(这种架构通常在租户数量较少时才有意义),这意味着他们有超过 400 万个 PostgreSQL 数据库。Atlassian 的首席站点可靠性工程师 Pat Rubis 解释说:
一个租户对应一个数据库是一种不常见的架构,我们选择这种架构是为了在 Atlassian 的大规模环境中最大化隔离性、可扩展性和运维控制能力。这种架构能够有效防止一个租户的数据被其他租户意外或恶意访问,并且能够让我们水平扩展数据库集群,实现均衡负载以及优化不同规模租户的性能。
鉴于这种独特的架构,团队需要定期重新均衡数据库实例以保持负载的均匀分布。2023 年底,团队决定将整个数据库集群迁移到 Amazon Aurora,涉及 Jira Cloud 平台的所有账户。迁移的目标是能够利用 Aurora 更好的服务等级协议(SLA,达到 99.99%),通过自动扩展读取实例来提高弹性,并实现成本方面的优化。
该项目预计持续数月,目标是尽量减少租户停机时间和迁移成本。整个迁移过程通过 AWS Step Functions 来协调,并借助功能标志(feature flag)即时更新应用服务器上租户的数据库端点。虽然将 Amazon RDS for PostgreSQL 实例转换为 Aurora 通常是一项简单的任务,但由于每个实例上有大量数据库,所有这些租户必须同时切换,而每个租户都有自己的连接端点和凭据。
此外,由于每个 Jira 数据库在磁盘上对应约 5000 个文件,每个 PostgreSQL 实例的文件总数达到了数百万,这达到了 Aurora 的限制。新的副本实例在执行状态检查活动时会出现超时,影响了 Atlassian 安全转换集群的能力。为此,团队设计了一种叫作“排空”(draining)的迁移方法,先减少待转换实例上的租户数量,再控制跨集群迁移的数据库数量。

来源: Atlassian 博客
为了在迁移过程中尽量降低对正常操作的影响,控制源端和目标端的并发量成为项目的一大挑战。Rubis 补充道:
最终,我们需要找到一个平衡点:一方面是为执行迁移而投入的额外基础设施的规模(以及相应的成本);另一方面是我们能够接受的每个区域完成迁移所需的时间。
在迁移高峰期,Atlassian 每天最多迁移 90000 个 Jira 数据库,平均每天迁移 38000 个。Atlassian 高级工程经理 Cassian Cox 在 LinkedIn 上说道:
这是一项庞大的基础设施工程,占据了我在 Atlassian 的大部分精力。它极大地提升了系统的可扩展性、可靠性和成本效益。

来源: Atlassian 工程博客
整个项目涉及 2403 个 RDS 数据库实例的转换,迁移了 260 万个数据库,并从源实例中排空了 180 万个数据库。
团队估计,Jira 使用的数据库文件总数超过 274 亿个,但尚未公布更多相关指标及成本节约的具体细节。
Atlassian 遇到的启动超时阈值目前尚未被记录在 Amazon Aurora 的配额和限制页面中。
【声明:本文由 InfoQ 翻译,未经许可禁止转载。】
原文链接:
https://www.infoq.com/news/2025/07/atlassian-jira-postgresql-aurora/
评论