1. 水平划分

1.1 数据库切分方法和优缺点

  1. 根据日期或ID分段切分
    • 优点:数据量相对可控,能够很好地扩容,增加节点,可直接增加
    • 缺点:热点数据集中,无法分散至不同分片
  2. 根据hash函数求余进行切分
    • 优点:数据分布均匀
    • 缺点:扩容麻烦,需要rehash,需要对数据考虑平滑迁移

1.2 数据库分库分表跨表查询,分页查询,聚合函数,排序等问题

  • 一般解决方式:当排序字段非分片字段时,需要在不同的分片节点数据进行排序返回,再将不同分片返回的结果集进行汇总和再次排序,返回用户。
  • 一般解决方式问题:当页数很大时,会查询每个分片的大量数据进行合并,耗费CPU和内存资源,性能会很差。
  • 特殊解决方式:1.尽量不使用非分片字段进行排序,或者不用聚合函数等;2.对于存在常用的两种字段排序查询的情况,备份两份数据,使用不同的字段进行分片,但这样两份数据的一致性需要维护

1.3 数据库事务一致性问题

  1. 使用"XA协议"和"两阶段提交"处理,执行时间相对较长,但能够保证事务的一致性
  2. 最终一致性,对于不需要实时一致的系统,可以采用事务补偿的方式(取消部分成功或者重试部分未成功),在最后达到事务的一致性

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 调用失败或超时

  1. 先查询是否成功,并返回
  2. 查询到失败,则进行重试或者取消已成功的操作;或记录下失败的情况,定时进行校对

2.1.4 mq消息接受失败

  1. 消息发送前持久化,标记待发送,发送成功后,改为成功,若失败,则使用定时校对模式进行发送(保证mq消息接受的幂等)

分布式集群复习

  1. 消息生产者发送消息
  2. MQ收到消息,将消息进行持久化,在存储中新增一条记录
  3. 返回ACK给生产者
  4. MQ push 消息给对应的消费者,然后等待消费者返回ACK
  5. 如果消息消费者在指定时间内成功返回ack,那么MQ认为消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4、5、6步骤
  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
相关资源
相似解决方案