digoal
2021-09-29
PostgreSQL , multi-master , 逻辑复制 , 单元化 , 多主
1、产品的问题点
- PG multi-master 支持不友好
2、问题点背后涉及的技术原理
- PG 支持逻辑复制, 内置了pub、sub订阅功能, 但是针对同一个表只能单向复制, 无法实现双向复制(会有无限循环的问题)
- 无法很好的解决数据冲突问题, 例如:
- 更新操作, 在更新数据同步到目标节点之前, 目标节点对同一条记录也执行了更新操作, 这个问题会导致数据不一致.
3、这个问题将影响哪些行业以及业务场景
- multi-master 被应用于什么业务场景?
- 高可用场景, 多写可以满足无缝切换、升级需求.
- 全球化、或者单元化部署的业务, 在多个IDC的应用可以就近访问本地数据库, 多个IDC的数据库通过星型复制实现统一整体.
4、会导致什么问题?
- 无法支持多实例多写, 也就意味着只能一写多读, 或者“假多写“, 针对同一条数据只能有1个写入点(例如按字段hash), 所有写操作需要发往中心数据库, 可能产生较高的响应延迟. 而且需要有中间件来支持sql的正确路由操作, 使得业务和数据库耦合度更佳高, 复杂度更高.
5、业务上应该如何避免这个坑
- 对于数据无限循环的问题, 需要业务自己开发同步工具, 增加事务标记来标示从wal中解析出来逻辑记录的初始节点.
- 使用一些复制工具来实现multi-master
6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
- 增加了复杂度
- 工具本身的可靠性无法保障, 指不定哪天就不开源了
- 数据复制冲突没有很好的解决方案
- 全局序列没有很好的解决方案
7、数据库未来产品迭代如何修复这个坑
- 希望内核层支持完备的multi-master解决方案(解决以上几个核心问题)
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.