58同城数据库架构:双主模式确保高可用与一致性

3 下载量 81 浏览量 更新于2024-08-27 收藏 371KB PDF 举报
"58同城数据库架构设计思路" 58同城的数据库架构设计主要围绕着高可用性、读性能和一致性这三个核心要素进行构建。在解决这些挑战时,他们采用了复制和冗余策略来增强系统的稳定性。 首先,为了保证系统的可用性,58同城采取了复制和冗余的方法。然而,这也会导致一致性问题,因为数据在多个副本之间可能存在不一致。为了解决“读”的高可用性,他们复制从库并冗余数据,但这也带来了主从不一致的问题。对此,他们提出了一系列解决方案,包括通过数据库或业务层确保主从之间的key不冲突。 对于“写”的高可用性,一般的解决方案是采用双主模式,即复制主库,但这可能导致双主同步时的key冲突和一致性问题。58同城的独特之处在于,他们使用“双主”作为“主从”使用,不执行读写分离。这意味着即使主库出现故障,另一个主库也能立即接管,保证了写的可用性,同时解决了读写一致性问题。 在读性能设计方面,58同城考虑了多种策略。建立索引是最常见的方法,但也会影响写性能和增加内存占用。为了避免这些问题,他们提出了在不同的库上建立不同的索引,主库用于写操作不建立索引,而online和offline从库分别建立针对在线和离线读取的索引。此外,他们还探讨了增加从库和使用缓存来提升读性能。但是,增加从库可能导致主从不一致,而传统的缓存策略可能会引入一致性问题和复杂性。因此,58同城选择了服务+数据+缓存的方案,通过服务层屏蔽数据库和缓存的复杂性,同时避免读写分离引发的一致性问题。 在一致性设计上,58同城应对主从不一致问题的策略包括引入中间件来路由写操作,并在一定时间内将读操作也指向主库,以及采用读写都到主的模式,以减少不一致的可能性。 58同城的数据库架构设计体现了对可用性、读性能和一致性的深度思考和实践,通过巧妙的策略和创新的解决方案,他们在保证业务连续性的同时,尽可能地优化了系统的性能和稳定性。