星沙做网站简单的报价表模板

pingmian/2026/1/24 4:20:26/文章来源:
星沙做网站,简单的报价表模板,wordpress 用户中心,wordpress替换google字体应用的幂等是在分布式系统设计时必须要考虑的一个方面#xff0c;如果对幂等没有额外的考虑#xff0c;那么在消息失败重新投递#xff0c;或者远程服务重试时#xff0c;可能会出现许多诡异的问题。本文一起来看一下#xff0c;在消息队列应用中#xff0c;如何处理因为…应用的幂等是在分布式系统设计时必须要考虑的一个方面如果对幂等没有额外的考虑那么在消息失败重新投递或者远程服务重试时可能会出现许多诡异的问题。本文一起来看一下在消息队列应用中如何处理因为重复投递等原因导致的幂等问题。 对业务幂等的理解 首先明确一下幂等并不是问题而是业务的一个特性。幂等问题体现在对于不满足幂等性的业务在消息重复消费或者远程服务调用失败重试时出现的数据不一致业务数据错乱等现象。 幂等最早是一个数学上的概念幂等函数指的是对一个函数或者方法使用相同的参数执行多次数据结果是一致的。 以 HTTP 协议为例我们知道 HTTP 协议中定义了交互的不同方法比如 GET 和 POST以及 PUT、DELETE 等其中 GET、DELETE 等方法都是幂等的而 POST 方法不是。 这个很好理解GET 方法用于获取资源不管调用多少次接口结果都不会改变所以是幂等的DELETE 等可以类比。 这里有一点需要注意业务上的幂等指的是操作不影响资源本身并不是每次读取的结果都保证一致。比如通过 GET 接口查询一条订单记录在多次查询的时间段内订单状态可能会有新的更新而发生变化查询到的数据可能不同但是读接口本身仍然是一个幂等的操作。 在业务开发中对数据的操作主要是 CRUD即在做数据处理时的 Create、Read、Update、Delete 这几种操作。很明显这里的 Create 操作不是幂等的Update 操作可能幂等也可能不幂等。例如现在有一个订单表下面的操作就是幂等的 UPDATE order SET status1 WHERE id100下面的这个操作就不符合幂等性的要求 UPDATE order SET priceprice1 WHERE id100对应的Read 和 Delete 操作则是幂等的。 各类中间件对幂等性的处理 幂等处理不好可能会出现很多问题比如使用 binlog 分发进行数据同步如果数据库更新消息被多次消费可能会导致数据的不一致。 远程服务调用的幂等问题 因为存在网络抖动等远程服务调用出现失败一般是通过配置重试保证请求调用成功率提高整体服务的可用性。 以 Apache Dubbo 为例我一直觉得 Dubbo 对容错的支持特别全面它支持多种集群容错的方式并且可以针对业务特性配置不同的失败重试机制包括 Failover 失败自动切换、Failsafe 失败安全、Failfast 快速失败等。比如在 Failover 下失败会重试两次在 Failfast 下失败则不会重试直接抛出异常。 Dubbo 的容错机制考虑了多种业务场景的需求根据不同的业务场景可以选择不同的容错机制进而有不同的重试策略保证业务正确性。 Dubbo RPC 的重试和容错机制不是本课时的重点如果想对 Dubbo 集群容错方式有进一步的了解可以点击查看 Dubbo 官方文档。 消息消费中的重试问题 从本质上来讲消息队列的消息发送重试和微服务中的失败调用重试是一样的都是通过重试的方式解决网络抖动、传输不稳定等导致的偶发调用失败。这两者其实是一个问题两个问题的解决方式也可以互相借鉴。 在分布式系统中要解决这个问题需从中间件和业务的不同层面来保证服务调用的幂等性。下面从消息队列投递语义以及业务中如何处理幂等两个方面进行拆解。 消息投递的几种语义 为了进一步规范消息的调用业界有许多消息队列的应用协议其中也对消息投递标准做了一些约束。 At most once 消息在传递时最多会被送达一次在这种场景下消息可能会丢但绝不会重复传输一般用于对消息可靠性没有太高要求的场景比如一些允许数据丢失的日志报表、监控信息等。 At least once 消息在传递时至少会被送达一次在这种情况下消息绝不会丢但可能会出现重复传输。 绝大多数应用中都是使用至少投递一次这种方式同时大部分消息队列都支持到这个级别应用最广泛。 Exactly once 每条消息肯定会被传输一次且仅传输一次并且保证送达因为涉及发送端和生产端的各种协同机制绝对的 Exactly once 级别是很难实现的通用的 Exactly once 方案几乎不可能存在可以参考分布式系统的「FLP 不可能定理」。 我觉得消息投递的语义和数据库的隔离级别很像不同语义的实现付出的成本也不一样。上面定义的消息投递语义主要在消息发送端在消费端也可以定义类似的消费语义比如消费端保证最多被消费一次至少被消费一次等这两种语义是相对应的可以认为是同一个级别的两种描述。 不同消息队列支持的投递方式 以 RocketMQ 为例我们来看下对应的投递支持。 RocketMQ 支持 At least once 的投递语义也就是保证每个消息至少被投递一次。在 RocketMQ 中是通过消费端消费的 ACK 机制来实现的 在消息消费过程中消费端在消息消费完成后才返回 ACK如果消息已经 pull 到本地但还没有消费则不会返回 ack 响应。 在业务上应用 RcoketMQ 时也可以根据不同的业务场景实现其他级别的投递语义比如最多送达一次等由于篇幅限制这里不展开详细讲解了感兴趣的同学可以查阅 RocketMQ 相关的源码和文档学习。 业务上如何处理幂等 消息消费的幂等和我们在上一课时中提到的时序性一样本质上也是一个系统设计的问题。 消息队列是我们为了实现系统目标而引入的手段之一并且分布式消息队列天然存在消费时序、消息失败重发等问题。所以要保证消息队列的消费幂等还是要回到业务中结合具体的设计方案解决。 天然幂等不需要额外设计 参考上面对 HTTP 协议方法的幂等性分析有部分业务是天然幂等的这部分业务允许重复调用即允许重试在配置消息队列时还可以通过合理的重试来提高请求的成功率。 利用数据库进行去重 业务上的幂等操作可以添加一个过滤的数据库比如设置一个去重表也可以在数据库中通过唯一索引来去重。 举一个例子现在要根据订单流转的消息在数据库中写一张订单 Log 表我们可以把订单 ID 和修改时间戳做一个唯一索引进行约束。 当消费端消费消息出现重复投递时会多次去订单 Log 表中进行写入由于我们添加了唯一索引除了第一条之外后面的都会失败这就从业务上保证了幂等即使消费多次也不会影响最终的数据结果。 设置全局唯一消息 ID 或者任务 ID 还记得我们在第 15 课时「分布式调用链跟踪」中提到的调用链 ID 吗调用链 ID 也可以应用在这里。我们在消息投递时给每条业务消息附加一个唯一的消息 ID然后就可以在消费端利用类似分布式锁的机制实现唯一性的消费。 还是用上面记录订单状态流转消息的例子我们在每条消息中添加一个唯一 ID消息被消费后在缓存中设置一个 Key 为对应的唯一 ID代表数据已经被消费当其他的消费端去消费时就可以根据这条记录来判断是否已经处理过。 总结 本文分享了消息幂等的知识点包括对幂等的理解以及消息队列投递时的不同语义另外简单介绍了业务上处理幂等的两种方式。 西方有一句谚语当你有了一个锤子你看什么都像钉子。在我刚开始学习分布式系统时学习了各种中间件每个中间件都希望能用上这其实脱离了系统设计的初衷。 到这里已经展开了许多分布式系统的常用组件提到这个谚语主要是希望你在做技术方案特别是做分布式系统设计方案时不是为了设计而设计。方案设计的目的是实现业务目标并不是在系统中加入各种高大上的中间件这个方案就是正确的。 我之前读过一本《系统之美》的图书从复杂系统的角度来看系统中的元素越多为了维持系统的平衡需要付出的势能必然也越大。 对应到系统设计中系统拆解的粒度越大对应各个组件之间的耦合就越小但是需要解决的组件协同问题也越多实现数据的一致性也越困难。我们在系统设计时要避免过度设计把握技术方案的核心目的在这个基础上进行针对性设计。 对于本文的内容你可以思考下当前的项目中是如何处理重复消息的有没有考虑消息处理的幂等性欢迎留言分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

梅州免费建站公司网站百科推广怎么做

点击“蓝字”关注我们吧福利:有件小事想和大家说一下菜菜哥,问你个问题,为什么现在的系统都设计为分布式系统呢?这个问题问得好,就像为什么程序员会慢慢脱发一样神奇01PART分布式系统身为二十一世纪的一名程序员&#…

珠海网站制作定制wordpress仿阿里百秀

apache camelREST是一种用于组织资源的体系结构样式,当应用于基于HTTP的服务时,REST可以构建无状态,分离的可伸缩服务。 HTTP方法,HTTP标头和mime类型都允许开发人员实现REST样式。 诸如Jersey和Fuse Services Framework&#xff…

大连模板网站制作费用阿里巴巴装修网站

Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

试百客 专业做试用的网站做电影网站怎么批量去水印

《 MySQL性能优化--锁》首发牧码人博客转发请加此提示MySQL基本概念--锁介绍下对于MySQL锁机制的理解从基本概念开始:共享锁共享锁的代号是S,是Share的缩写,共享锁的锁粒度是行或者元组(多个行)…

场外期权网站开发建筑工程的公司

目录 1、compositeId路由 1.1、compositeId路由原理 1.2、compositeId路由查询 2、implicit路由 2.1、implicit路由原理 2.2、implicit路由查询 3、扩展 3.1、compositeId路由方式扩展 3.2、implicit路由方式扩张 solrcloud的官方文档有对路由的简短介绍,但…

甘肃交通工程建设监理公司网站做360网站优化快速排

web自动化安装驱动安装 进行web自动化时 ,需要提前安装浏览器的驱动 ,尤其是chrome浏览器 。它的更新速度很快 ,是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 ,如何关闭chrome浏览器的自动更新…

嘉禾县网站建设推广公司免费网站开发软件平台

0x0 场景 因老服务器操作系统文centos6.5,现要迁移至uos v20 1050a(底层centos8),其中需要迁移的应用组件有: mysql 、tomcat、apachehttpd,因版本跨越太大,导致centos8直接安装无法完全恢复原…

中国建设银行的招投标网站聚名网认证

文章目录 前期数据准备导入数据 分析:世界杯中各队赢得的比赛数分析:先打或后打的比赛获胜次数分析:世界杯中的抛硬币决策分析:2022年T20世界杯的最高得分者分析:世界杯比赛最佳球员奖分析:最适合先击球或追…

做羞羞的专门网站做电商必备的八个软件

基于JavaWebSSMVue家庭记账本微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1选题背景 互联网是人类的基本需求,特别是在现代社会,个人…

成都网络优化网站建设用wordpress写网页

前言 MySQL数据库提供了多种不同类型的函数,用于处理字符串、日期、数值等数据类型,以及实现条件、聚合等操作,下面我们主要介绍字符串函数 CONCAT() 函数 CONCAT() 可用于将多个字符串连接在一起。 示例: SELECT CONCAT(Hell…

做基网站工商天眼查官网

题目链接:55. 右旋转字符串 题目描述 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作…

做推广最好的网站是哪个?南网站建设

新建用户 用root账户修改文件,添加信任用户 使用sudo提权,可以使用 **root删除新建账户**

网站建设速成移动网站和桌面网站区别

1、沟通渠道中,N涉及多少人?是有所增加还是增至多少人? 2、在EMV中,关注的是成本还是收益?若是考虑成本和时间,则选择较小的方案;若是关注收益,则选择较大的方案。 3、在PERT中&am…

网站建设工作的函网络工程师的就业前景

问题背景: vue 项目用 axios 进行请求的时候,总是报“Access to XMLHttpRequest at ‘http://localhost:8889/api/login’ from origin ‘http://localhost:8080……’”的错误 实际上就是前后端分离的情况下,发生了跨域的问题 跨域定义&…

外贸 模板网站 定制网站电商网站开发多少钱

您是否在互联网上找到适用于 Windows PC 的前 5 名最受好评的数据恢复软件解决方案?嗯,在线市场上有很多工具可以恢复已删除的文件。但并不是所有的应用程序都值得使用它。值得信赖的文件恢复工具将有助于快速检索丢失、删除、格式化的数据并从计算机恢复…

谁可以帮我做网站虚拟主机多个网站

一、源码特点 java servlet 在线票务系统(选座)管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean(mvc模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要…

flask 简易网站开发网站空间便宜

日前,海南省旅游资源规划开发质量评定委员会发布2020年第2号和2020年第3号公告,海南长影环球100奇幻乐园批准为国家4A级旅游景区,海南霸王岭国家森林公园和桂林洋国家热带农业公园批准为国家3A级旅游景区。具体公告如下:海南省旅游…

抚州教育网站建设高端logo设计

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

新野微网站开发网站建设属于办公费吗

文章来源:AR工业应用资料源自网络《Pokemon Go》这款游戏能够大火,除了一个好的IP之外。AR技术也功不可没。而在AR发光之后,什么是AR?它的技术原理是怎么样的,它能够具备哪些商业价值?希望通过这篇文章&…

网站编辑心得体会申请网站空间

题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 nn 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。 输入输出格式 输入格式: 文件的第 11 行中有 11 个正整数 nn …