1. 水平划分
1.1 数据库切分方法和优缺点
- 根据日期或ID分段切分
- 优点:数据量相对可控,能够很好地扩容,增加节点,可直接增加
- 缺点:热点数据集中,无法分散至不同分片
- 根据hash函数求余进行切分
- 优点:数据分布均匀
- 缺点:扩容麻烦,需要rehash,需要对数据考虑平滑迁移
1.2 数据库分库分表跨表查询,分页查询,聚合函数,排序等问题
- 一般解决方式:当排序字段非分片字段时,需要在不同的分片节点数据进行排序返回,再将不同分片返回的结果集进行汇总和再次排序,返回用户。
- 一般解决方式问题:当页数很大时,会查询每个分片的大量数据进行合并,耗费CPU和内存资源,性能会很差。
- 特殊解决方式:1.尽量不使用非分片字段进行排序,或者不用聚合函数等;2.对于存在常用的两种字段排序查询的情况,备份两份数据,使用不同的字段进行分片,但这样两份数据的一致性需要维护
1.3 数据库事务一致性问题
- 使用"XA协议"和"两阶段提交"处理,执行时间相对较长,但能够保证事务的一致性
- 最终一致性,对于不需要实时一致的系统,可以采用事务补偿的方式(取消部分成功或者重试部分未成功),在最后达到事务的一致性
2.垂直划分
2.1 分布式调用一致性问题
2.1.1 理论基础
- ACID:
- A(Atomicity):原子性
- C(Consistency):一致性
- I(Isolation):隔离性
- D(Durability):持久性
- CAP:只能选择其中两个,一致性和可用性是矛盾的,在服务调用另一服务,迟迟无法获取返回值时,要么立即返回失败,保证可用性,牺牲一致性,要么进行等待或者补偿操作,牺牲可用性,保证一致性
- C(Consistency):一致性,不同节点同一时刻读取的值相同
- A(Avaliablity):可用性,系统具有好的响应性能
- P(Partition tolearance):分区容忍性,尽管有部分数据丢失,但是系统仍能继续工作
- BASE:
- BA(Basically Avalilable):基本可用
- S(Soft State):软状态,该状态可以数据不一致
- E(Eventually Consistent):最终一致,在最后通过补偿的方式保证数据一致
- 酸碱平衡理论:如果能够通过数据库的扩展或者开源工具Mycat等保证数据一致,则保持,若无法保持绝对的一致性,则可通过记录软状态的方式,保证最终一致性
2.1.2 调用失败或超时
- 先查询是否成功,并返回
- 查询到失败,则进行重试或者取消已成功的操作;或记录下失败的情况,定时进行校对
2.1.4 mq消息接受失败
- 消息发送前持久化,标记待发送,发送成功后,改为成功,若失败,则使用定时校对模式进行发送(保证mq消息接受的幂等)

- 消息生产者发送消息
- MQ收到消息,将消息进行持久化,在存储中新增一条记录
- 返回ACK给生产者
- MQ push 消息给对应的消费者,然后等待消费者返回ACK
- 如果消息消费者在指定时间内成功返回ack,那么MQ认为消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4、5、6步骤
- MQ删除消息
保证MQ消息传递的一致性
相关文章:
-
2021-07-28
-
2021-11-20
-
2021-11-21
-
2021-05-25
-
2021-09-13
-
2021-06-09
-
2021-07-17
-
2021-11-11
猜你喜欢
-
2021-07-11
-
2021-08-15
-
2021-09-24
-
2021-12-29
-
2022-12-23
-
2021-10-18
-
2021-05-17
相关资源
-
下载
2021-06-06
-
下载
2021-06-26
-
下载
2021-06-23
-
下载
2022-12-17