分布式数据库是分布式系统的关键,也是大型架构的必备技能,下面我重点详解分布式数据库@mikechen
分布式数据库
分布式数据库:是将数据分布存储在多个物理节点上的数据库系统,这些节点通过网络协同工作,对外表现为一个整体的数据库。
分布式数据库,是将数据分片(Sharding)存储在多个节点上,每个节点存储一部分数据。节点之间通过网络进行通信和协调,实现数据的读写和维护。
分布式数据库可以位于同一个数据中心,也可以分布在地理位置分散的多个数据中心。
分布式数据库原理
分布式数据库的核心原理:是将数据分片、复制、和协调一致性,使其能够高效地处理大规模数据和高并发请求。
数据分片(Sharding)
数据分片,将数据按照一定的规则分割成多个分片,并分别存储在不同的节点上。
常见的分片策略,如下:
范围分片
根据数据范围划分(如: ID 范围),例如:用户 ID 在 1-1000 存储在 Shard1,1001-2000 存储在 Shard2。
哈希分片
哈希分片,通过哈希函数计算数据分片位置,例如:hash(user_id) % 分片数量
。
按键值分片
基于某个字段(如用户 ID),将数据分布到不同节点。
比如:按地域分片,中国用户数据存储在 Shard1,美国用户数据存储在 Shard2。
数据复制(Replication)
数据复制:是将一份数据在多个节点上进行冗余存储。
通过数据复制,可以提高数据的可用性、容错性,并支持读扩展。
常见的方案,如下:
- 主从复制: 一个主节点负责写操作,多个从节点负责读操作;
- 多主复制: 多个节点都可以进行读写操作,需要复杂的冲突解决机制。
分布式事务
分布式事务:是为了保证多个节点上的数据操作能够以一个整体事务的方式执行,确保 ACID 属性(原子性、一致性、隔离性、持久性)。
常见的方案,如下:
两阶段提交(Two-phase commit)
经典的分布式事务协议,分为投票阶段和提交阶段;
阶段 1(准备阶段):协调者通知所有参与节点执行事务准备操作,并锁定资源。
阶段 2(提交阶段):协调者根据各节点的反馈决定提交或回滚事务。
三阶段提交(Three-phase commit)
在两阶段提交的基础上,增加了超时机制,提高了系统的可用性。
分布式事务通过协议和补偿机制协调多个节点,实现数据一致性。
分布式数据库的优缺点
优点:
高可用性:数据分布在多个节点,即使部分节点故障,系统仍能提供服务(通过副本切换);
高扩展性:可以通过增加节点,来扩展存储容量、和计算能力,可以更容易横向扩展;
容错性:数据复制机制,可确保节点故障时不会丢失数据。
缺点:
复杂性增加:数据分片、复制、一致性维护…等机制,使系统设计和运维更加复杂。
一致性挑战:在高可用性和一致性之间做权衡可能导致部分场景下的数据延迟或不一致。
事务支持受限:分布式事务实现复杂…等等。
分布式数据库的应用场景
1. 大规模数据存储与处理
比如:电商、社交网络…等场景,需要存储、和处理大量用户数据。
2. 高并发场景
比如:网站或应用,需处理高并发请求,如:秒杀活动、实时消息…等。
3. 多地多活系统
在全球范围提供服务时,分布式数据库可以通过数据分片和复制,支持跨地域的低延迟访问。
4.实时分析
以及,支持实时数据分析、和查询。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!

后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》