虽然我们都把最大努力通知型作为分布式事务的一种,但是各位同学心里要明白,这个完完全全和事务没有任何关系,为了确保我们这个分布式事务系列的完整性,我有必要用这篇最大努力通知型来做整个系列的收尾。

到现在,我们已经知道了TCC 和 最终一致性事务是怎么玩儿的,那么作为一个成为架构师的你,一定要学会思考思考思考,当进行功能或系统设计的时候,通过彻底的需求分析,将技术和需求进行完美结合,才是我们架构师做的事情。

适用的场景

究竟一个系统中,哪里用“强”事务的TCC,哪里需要用“弱”事务的可靠消息最终一致性,我们都要做到心里有数,经过仔细的系统分析后,我们可以找出来一些需要相对可靠但不影响系统整体的事务需求,最大努力通知型事务就是用来解决此类需求的。为什么一定要分析出各种适用的事务呢?因为我们要在尽可能满足业务需求和场景的情况下,提高系统性能啊!大家记住,越强的事务,性能损耗越大,很可能一个能承受百万并发的系统,因为加了TCC而降到1w并发甚至更低。

比如:通知型短信发送,当你用TCC保证了给手机号充值的资金转账,用可靠消息最终一致性保证了积分在一定时间内加到账户上后,最后一步是要通过短信通知你“充值成功啦”,

这最后一步,我们就可以用最大努力通知型事务来尽最大努力保证这个通知消息能发给你,并不能保证这个通知短信一定会发送成功,但是,这并不影响我们整个系统。

方案分析

大家明白我们的用心良苦后,我们就来分析一下这种类型的事务,没有源码分析,也是和可靠消息一样都是属于解决方案型。

上游服务A在没有事务保障的情况下,想要尽可能成功调用下游,就可以通过我们设计的最大努力通知方案来解决,最大努力通知的关键组件有两个

  • MQ
  • 重试组件(定时器)

MQ是为了让我们的上下游服务解耦,上游服务发到MQ后就结束了,这不就提高性能了吗?

重试组件就是我们的“事务”保障,它可以替上游服务完成下游服务的调用,并且在失败后会一直重试,直到调用下游成功,或者我们主动放弃。

最大努力通知事务服务需要自己定义好协议,也就是消息格式,大家可以参考本文的格式做一些适用于自己企业的调整。

  1. 消息内容:上游发送给下游服务的上下文
  2. 最大重试次数:调用下游多少次后,放弃调用
  3. 最后重试时间:定时器的重试机制需要参考这个时间进行有规律的重试
  4. 重试方案:预留,暂时没用。
  5. 重试间隔:比如 1秒,3秒,5秒,10秒,30秒,1分钟,3分钟,10分钟...自己根据业务来设计间隔规律
  6. 重试次数:重试机制需要根据此值来进行重试调用
  7. 状态:
  • 未处理(还没调用下游)
  • 成功(调用下游服务成功,定时清理即可)
  • 失败(调用下游失败)
  • Dead(超过重试次数后依然失败,这个状态根据具体业务情况来进行处理,有的业务可以直接将Dead删除,有的需要将Dead单独通过手工处理)

相信之前自己研究可靠消息最终一致性的同学,学习最大努力通知型事务易如反掌。

结语:

至此,咱们的分布式系列全部完成,想必各位同学对分布式事务应该有一个比较全面的了解了,今后大家在系统设计的时候,遇到涉及分布式事务问题,就可以从多个角度进行系统性的分析,什么情况用什么事务,什么事务合理,把咱们学到的整块分布式事务技术全部综合运用的实际的case上,这才能成为大家自己的能力。

事务对性能影响_不是事务的事务!(分布式事务系列-完结篇)相关推荐

  1. 事务超时时间无效_什么是ZooKeeper?ZooKeeper分布式事务详解

    前言 zookeeper当初到底面临什么问题?而zookeeper又是如何解决这些问题的? 实际上zookeeper主要就是解决分布式环境下的一致性问题.那么解决这个问题到底有哪些难点呢?我们一步一步 ...

  2. 事务对性能影响_开启英特尔事务扩展技术(TSX),即可提升intel CPU 近40%性能

    在2019年5月份的时候,intel CPU在互联网上曝光了一个名为僵尸负载漏洞(ZombieLoad),而不法人员可利用该漏洞,恶意软件可以直接从CPU窃取敏感信息,而在最近,僵尸负载漏洞再一次被变 ...

  3. mysql三阶段提交实现_基于两阶段提交的分布式事务实现(UP-2PC)

    引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...

  4. 事务对性能影响_DRDS 柔性事务漫谈

    DRDS 是阿里云提供的一款分布式数据库产品,它的原型是在阿里内部使用了 10 年的数据库中间件 TDDL.DRDS 在 TDDL 提供的数据切分和 SQL 路由能力上,强化了分布式查询,事务和水平扩 ...

  5. 事务没提交的数据查的出来吗?_品牛栏山,论分布式事务

    上周末,我和一个在电商上市公司做开发的朋友一起喝酒聊天,他目前带一个研发团队,负责大系统中退货款相关的技术服务版块,混的挺不错,从一个初级程序员做到规模很大上市公司的技术负责人,一路过来也非常坎坷,刚 ...

  6. mysql时间相减得到天数保留两位_【敲黑板!】分布式事务数据库 —-MySQL 数据库开发规范(第四节)...

    今天Amy着重为大家讲解一下关于函数的一些硬核知识,也是本文中非常重要的一个章节,记得认真看(dianzan)哦~ 第四节.函数 4.1 字符串连接函数 MySQL 数据库中字符串连接方法,需使用 C ...

  7. getaway网关转发去前缀_蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇

    本文为<蚂蚁金服 Service Mesh 大规模落地系列>第五篇 - 网关篇,该系列将会从核心.RPC.消息.无线网关.控制面.安全.运维.测试等模块对 Service Mesh 双十一 ...

  8. 事务对性能影响_MySQL数据库性能优化史诗级大总结

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 大数据真好玩点击右侧关注,大数据真好玩! ...

  9. spring 事务的实现方式和原理_spring整合atomikos实现分布式事务

    前言 Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器,主要用于处理跨数据库事务,比如某个指令在A库和B库都有写操作,业务上要求A库和B库的写操作要具有原子性,这时候就可以用到 ...

最新文章

  1. MSE病毒库离线更新包
  2. Desktop: ERROR: Cannot set priority of namenode process 35122
  3. 24、springboot与缓存(2)
  4. c语言1e3和1e3,自考“高级语言程序设计”习题答案详解(33)
  5. C#中Datatable的Compute的用法(转载)
  6. Python获取每个用户使用的CPU和内存百分比
  7. 【计算机网络】网络协议与计算机网络体系结构(OSI参考模型、TCP/IP体系、网络通信标准化组织)及 Java网络编程
  8. ISNULL与CASE函数
  9. 如何使用命令行 群晖_群晖Nas系统篇:拿回root账户权限,适用6.2及以上(7.0)系统...
  10. python数据建模工具_python数据分析工具——Pandas、StatsModels、Scikit-Learn
  11. android 反编译jar包
  12. dht网络协议 服务器,概述DHT网络
  13. php 中标麒麟龙芯5.0,中标麒麟桌面操作系统软件
  14. 2串口两串口三串口多串口3串口转WiFi透传模块实现多通道与服务器透传
  15. Python逆波兰表达式
  16. 如何使用ERD设计关系数据库?
  17. 修改音频采样率和单双通道
  18. neo4j 最短路径 java_Neo4j查询节点间最短路径
  19. UnsatisfiedDependencyException报错的原因
  20. Git 开发分支合并到develop分支用法

热门文章

  1. SQL注入学习part07:(SQL注入语句总结)
  2. 散热器老化引起电脑死机
  3. Chrome 100发布:启用全新图标,修复28个安全漏洞
  4. 透彻解析云原生在数字化转型中的应用实践,PaaS功不可没
  5. 2020中关村论坛百度平行论坛:探索中国AI开源与产业智能化模式
  6. 破碎的互联网下,加密技术正在恢复数据主权!
  7. 如何构建一个交互式数据分析 Web 应用?
  8. 盘一盘新冠病毒下,国内外科技公司提出哪些软件解决方案与技术?
  9. 十分钟上手 React+MirrorX,从此前端大神代码不再难懂 | 原力计划
  10. 国内 RISC-V 产学研基地成立,Intel、Arm、RISC-V 将三分天下?