58同城数据库架构:双主模式确保高可用与一致性
81 浏览量
更新于2024-08-27
收藏 371KB PDF 举报
"58同城数据库架构设计思路"
58同城的数据库架构设计主要围绕着高可用性、读性能和一致性这三个核心要素进行构建。在解决这些挑战时,他们采用了复制和冗余策略来增强系统的稳定性。
首先,为了保证系统的可用性,58同城采取了复制和冗余的方法。然而,这也会导致一致性问题,因为数据在多个副本之间可能存在不一致。为了解决“读”的高可用性,他们复制从库并冗余数据,但这也带来了主从不一致的问题。对此,他们提出了一系列解决方案,包括通过数据库或业务层确保主从之间的key不冲突。
对于“写”的高可用性,一般的解决方案是采用双主模式,即复制主库,但这可能导致双主同步时的key冲突和一致性问题。58同城的独特之处在于,他们使用“双主”作为“主从”使用,不执行读写分离。这意味着即使主库出现故障,另一个主库也能立即接管,保证了写的可用性,同时解决了读写一致性问题。
在读性能设计方面,58同城考虑了多种策略。建立索引是最常见的方法,但也会影响写性能和增加内存占用。为了避免这些问题,他们提出了在不同的库上建立不同的索引,主库用于写操作不建立索引,而online和offline从库分别建立针对在线和离线读取的索引。此外,他们还探讨了增加从库和使用缓存来提升读性能。但是,增加从库可能导致主从不一致,而传统的缓存策略可能会引入一致性问题和复杂性。因此,58同城选择了服务+数据+缓存的方案,通过服务层屏蔽数据库和缓存的复杂性,同时避免读写分离引发的一致性问题。
在一致性设计上,58同城应对主从不一致问题的策略包括引入中间件来路由写操作,并在一定时间内将读操作也指向主库,以及采用读写都到主的模式,以减少不一致的可能性。
58同城的数据库架构设计体现了对可用性、读性能和一致性的深度思考和实践,通过巧妙的策略和创新的解决方案,他们在保证业务连续性的同时,尽可能地优化了系统的性能和稳定性。
2020-03-03 上传
2021-10-14 上传
点击了解资源详情
2018-04-24 上传
2022-11-21 上传
2023-10-10 上传
2024-06-13 上传
weixin_38602098
- 粉丝: 3
- 资源: 963
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器