热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

一个分布式事务解决方案

分布式系统中,只要涉及到跨服务调用并且服务各自用自己的数据源,就会存在数据不一致问题.通常来说要保证强一致性代价太大,绝大部分场景也不需要,根据BASE理论,我们保证最终一致性就好了,下面设

分布式系统中,只要涉及到跨服务调用并且服务各自用自己的数据源,就会存在数据不一致问题.通常来说要保证强一致性代价太大,绝大部分场景也不需要,根据BASE理论,我们保证最终一致性就好了,下面设计的方案就是一个保证最终一致性的方案.

架构及原理

 

实现最终一致性本质上是通过重试确保的,因此业务一定要保证逻辑幂等性,之所以选择 redis 和 mq 是出于性能考虑。

正常通知

A1->A2->A3->B1->C2->C4->B2->D1->D2

总的讲是确保你能通知到对方,对方处理成功后将消息删除才算完成整个事务.其中任何一个环节出问题都有办法保证你的数据一致性.

正常通知并回调

A1->A2->A3->B1->C2->C4->B2->D1->D3->B3->C3->C6->B4->A4

总的讲是确保你能通知到对方,对方处理成功后发送回调消息,再确保回调消息你能收到,你收到处理成功后将消息删除才算完成整个事务.其中任何一个环节出问题都有办法保证你的数据一致性.

预发送失败

如果预发送失败,直接抛运行时异常,本地事务不会被执行.

本地事务执行异常

如果预发送成功,但本地事务执行异常,则直接删除预发送的信息.

网络或服务异常导致"确认超时“

可靠消息服务会定时去redis查询,发现”超时确认”的消息就会向mq发送”查询消息“,mq推送给调用方处理,如果调用方告知本地事务为被执行则删除redis中的这条消息,如果告知已经执行成功则发送确认消息.

网络或服务异常导致“处理超时”

可靠消息服务会定时去redis查询,发现”超时处理”的消息就会再次向mq发送”请求消息“,mq推送给被调方处理.

网络或服务异常导致“回调超时”

可靠消息服务会定时去redis查询,发现”超时处理”的消息就会再次向mq发送”请求消息“,mq推送给被调方处理.

“确认超时”或“处理超时”或“回调超时”重试次数达到限制

如果“确认超时”或“处理超时”或“回调超时”重试次数达到限制,“可靠消息服务”会触发告警,另外通过后台管理界面可以查询到并且可以执行重发等操作.


推荐阅读
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • java程序员_Java程序员最新职业规划,逆袭面经分享
    java程序员_Java程序员最新职业规划,逆袭面经分享 ... [详细]
  • SpringCloud电商平台开发指南:实战案例解析
    本文详细介绍了基于SpringCloud构建的电商平台项目,涵盖了从技术选型到项目部署的全流程,旨在帮助开发者快速掌握电商平台的开发技巧。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 深入解析 RocketMQ 的架构与应用
    本文详细介绍了 RocketMQ 的核心特性、系统架构、部署模式以及如何编写生产者和消费者的代码,通过具体案例探讨了其在实际项目中的应用。 ... [详细]
  • 本文作为SpringCloud Alibaba系列教程的第一部分,主要介绍如何搭建SpringCloud Alibaba的开发环境,帮助初学者快速入门。SpringCloud Alibaba是由阿里巴巴团队开源的一套微服务工具集,旨在简化分布式系统的构建过程。 ... [详细]
  • 在AMQP(高级消息队列协议)2.2版本的连接建立过程中,双方需首先交换协议头部信息以确认所使用的协议版本。此协议头部不仅包含了特定的字符串标识,还详细指定了协议的主要、次要及修订版本号。 ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 时间序列分析入门:平稳性与白噪声检验
    本文详细介绍了时间序列分析中的两个基本概念——平稳性和白噪声的检验方法,帮助读者更好地理解和应用这些技术。 ... [详细]
author-avatar
用户f2r3o98akh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有