微服务下事物一致性

微服务下事物一致性探究

什么是微服务

  • 普通IT系统的缺点
  1. 开发维护成本高
  2. 各模块互相调用,导致应用的解耦性差
  3. 容易出现性能瓶颈
  • 微服务概念

将所有的服务都进行拆分独立,服务之间互相调用这样实现了

  1. 服务解耦
  2. 便于维护
  3. 代码上的吞吐性大大的增加

微服务架构上结构清晰,但也带来了一定问题比如本文要说的:事物一致性

在单例上只要Translation即可解决

@Translation
public void do(){
    updateA();
    updateB();
}

但是如果updateA 和 B是分布是不同的服务,对应的数据库也是不同的实例又如何处理呢?

解决办法

  • Translation Controller


    image

如图所以在发起一次请求的时候分四步走prepare -> execute -> yes -> 两个都是yes才执行commit

缺点:性能较差,每次都要请求四次

  • 消息队列解决方案
  1. 在A数据库进行update的时候同时生成一条message(消息)当Acommit后对该消息进行发送
  2. B服务在拿到该消息后验证是否已经执行过,如果没有则执行updateB,然后commit
  3. 如果在消息发送的时候A服务挂了,导致消息没发送,则需要一个《消息确认系统》来做这块的工作,在服务重启后,对该操作进行查找是否发送了消息,如果没有则继续发送
  4. 完美实现了消息和应用的解耦
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容