gpt4 book ai didi

postgresql - GKE 上的多区域高可用性 - 如何处理 PostgreSQL 数据库?

转载 作者:行者123 更新时间:2023-11-29 11:37:34 25 4
gpt4 key购买 nike

Google 有 ] 这个很酷的工具 kubemci - 使用多个 kubernetes 集群配置 L7 负载均衡器的命令行工具 使用它您基本上可以拥有 HA 多区域 Kubernetes 设置。这有点酷。

但是假设我们有一个像这样的基本架构:

  • 前端作为 SPA 实现并使用 json API 与后端对话
  • 后端是一组使用 PostgreSQL 作为数据库存储引擎的微服务。

所以我可以在 GKE 上创建两个 Kubernetes 集群,将后端和前端都放在它们上面(例如,假设在伦敦和比利时),一切看起来都很好。

直到我们想到数据库。 PostgreSQL 是单主的,所以必须只放在其中一个区域。如果伦敦地区的后端开始与比利时地区的 PostgreSQL 对话,考虑到这些地区之间 6 毫秒以上的延迟,性能确实会很差。

所以整个 HA 设置没有任何意义?或者我错过了什么?稍微缓解这个问题的一种选择是在“从属”区域中有一个只读副本,并在那里直接进行只读查询(这甚至可以用 PostgreSQL 实现吗?)

最佳答案

这是一个经典的架构场景,没有简单的解决方案。让数据在多个地区可用是一个具有挑战性的问题,各大公司都花费了大量时间和金钱来解决。

  • PostgreSQL 本身不支持多主机写入。您关于位于其他区域的副本在您的应用程序中具有读取和写入正确数据库的逻辑的想法是可行的。这将为您提供快速的本地读取,但在一个区域中写入速度较慢。您的应用程序中的代码也更复杂,并且需要更多工作来处理主服务器的故障转移。带宽和成本也可能是大量更新的问题。

  • 使用多主 Postgres 的第 3 方解决方案(如 Postgres-BDR by 2nd Quadrant )将工作卸载到数据库层。这可能会变得昂贵,并且您的应用程序仍然必须管理来自两个区域的数据冲突同时覆盖相同的数据。

  • 选择另一个支持多主写入的多区域复制的数据库。 Cassandra (或 ScyllaDB )是一个不错的选择,或者像 Google Spanner 这样的托管选项, Azure CosmosDB , AWS DynamoDB Global Tables , 和别的。一个有趣的选项是 CockroachDB它支持 PostgreSQL 协议(protocol),但它是一个可扩展的关系数据库,并且支持多个区域。

  • 如果这些选项都不起作用,您将不得不创建自己的复制系统。一些公司使用事件源/CQRS 架构来做到这一点,其中每次写入都是一条消息发送到中央日志,然后应用到每个位置。这是一项更多的工作,但提供了最大的灵 active 。此时,您基本上也是在构建自己的数据库复制系统。

关于postgresql - GKE 上的多区域高可用性 - 如何处理 PostgreSQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com