- 浏览: 499188 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
最终一致性的常用做法
1、单数据库事务
利用数据库的事务特性来满足事务的一致性,这时候的一致性是强一致性的。
2、多数据库事务
针对多数据库事务可以根据二阶段提交协议,采用spring 3.0 + Atomikos + JTA进行支持;
3、基于事务型消息队列的最终一致性
借助消息队列,在处理业务逻辑的地方发送消息,业务逻辑处理成功后,提交消息,确保消息是发送成功的,之后消息队列投递来进行处理,如果成功,则结束,如果没有成功,则重试,直到成功,不过仅仅适用业务逻辑中,第一阶段成功,第二阶段必须成功的场景。
4、基于消息队列+定时补偿机制的最终一致性
前面部分和上面基于事务型消息的队列,不同的是,第二阶段重试的地方,不再是消息中间件自身的重试逻辑了,而是单独的补偿任务机制。其实在大多数的逻辑中,第二阶段失败的概率比较小,所以单独独立补偿任务表出来,可以更加清晰,能够比较明确的直到当前多少任务是失败的。对应上图的E流程。
5、异步回调机制的引入
A应用调用B,在同步调用的返回结果中,B返回成功给到A,一般情况下,这时候就结束了,其实在99.99%的情况是没问题的,但是有时候为了确保100%,记住最起码在系统设计中100%,这时候B系统再回调A一下,告诉A,你调用我的逻辑,确实成功了。其实这个逻辑,非常类似TCP协议中的三次握手。
6、类似double check机制的确认机制
A在同步调用B,B返回成功了。这次调用结束了,但是A为了确保,在过一段时间,这个时间可以是几秒,也可以是每天定时处理,再调用B一次,查询一下之前的那次调用是否成功。例如A调用B更新订单状态,这时候成功了,延迟几秒后,A查询B,确认一下状态是否是自己刚刚期望的。
分布式事务的缺点
1、二阶段提交协议缺点
两阶段提交涉及到多个节点的网络通信,通信时间如果过长,事务的相对时间也就会过长,那么锁定资源的时间也就长了.在高并发的服务中,就会存在严重的性能瓶劲,也不一定可以保证一致性
2、消息队列
在高并发的环境中,我们一般会采用消息队列来避免分布式事务的执行。
在使用消息队列时,我们需要做到可靠凭证的保存(分布式事务的消息),有如下几种方式:
以支付宝和余额宝为例进行说明.
支付宝完成扣钱的动作时,记录消息数据,将消息数据和业务数据存在同一个数据库实例中.(同一个库保证了一致性)
将支付宝完成扣钱的消息及时发送给余额宝,余额宝完成处理后返回成功消息,支付宝收到消息后,消除消息表中对应的消息记录,即完成本次扣钱操作.
//=========================================
MQ也可以在另一个线程中进行发送,发送成功后就删除,就算删除不成功也没问题,大不了多发了一个消息。
为了确保消息的安全性,可以在发送端保存消息,更改状态表示消息已经发送了,通过消费端的回复再确认消息已经消费成功了就更安全了(防止MQ的数据丢失)
当然确保消息一定发送出去也是要确保才行
https://blog.csdn.net/zxl315/article/details/53433707(分布式事务最终一致性常用方案)
https://blog.csdn.net/qq_27384769/article/details/79305402(分布式事务)
1、单数据库事务
利用数据库的事务特性来满足事务的一致性,这时候的一致性是强一致性的。
2、多数据库事务
针对多数据库事务可以根据二阶段提交协议,采用spring 3.0 + Atomikos + JTA进行支持;
3、基于事务型消息队列的最终一致性
借助消息队列,在处理业务逻辑的地方发送消息,业务逻辑处理成功后,提交消息,确保消息是发送成功的,之后消息队列投递来进行处理,如果成功,则结束,如果没有成功,则重试,直到成功,不过仅仅适用业务逻辑中,第一阶段成功,第二阶段必须成功的场景。
4、基于消息队列+定时补偿机制的最终一致性
前面部分和上面基于事务型消息的队列,不同的是,第二阶段重试的地方,不再是消息中间件自身的重试逻辑了,而是单独的补偿任务机制。其实在大多数的逻辑中,第二阶段失败的概率比较小,所以单独独立补偿任务表出来,可以更加清晰,能够比较明确的直到当前多少任务是失败的。对应上图的E流程。
5、异步回调机制的引入
A应用调用B,在同步调用的返回结果中,B返回成功给到A,一般情况下,这时候就结束了,其实在99.99%的情况是没问题的,但是有时候为了确保100%,记住最起码在系统设计中100%,这时候B系统再回调A一下,告诉A,你调用我的逻辑,确实成功了。其实这个逻辑,非常类似TCP协议中的三次握手。
6、类似double check机制的确认机制
A在同步调用B,B返回成功了。这次调用结束了,但是A为了确保,在过一段时间,这个时间可以是几秒,也可以是每天定时处理,再调用B一次,查询一下之前的那次调用是否成功。例如A调用B更新订单状态,这时候成功了,延迟几秒后,A查询B,确认一下状态是否是自己刚刚期望的。
分布式事务的缺点
1、二阶段提交协议缺点
两阶段提交涉及到多个节点的网络通信,通信时间如果过长,事务的相对时间也就会过长,那么锁定资源的时间也就长了.在高并发的服务中,就会存在严重的性能瓶劲,也不一定可以保证一致性
2、消息队列
在高并发的环境中,我们一般会采用消息队列来避免分布式事务的执行。
在使用消息队列时,我们需要做到可靠凭证的保存(分布式事务的消息),有如下几种方式:
以支付宝和余额宝为例进行说明.
支付宝完成扣钱的动作时,记录消息数据,将消息数据和业务数据存在同一个数据库实例中.(同一个库保证了一致性)
将支付宝完成扣钱的消息及时发送给余额宝,余额宝完成处理后返回成功消息,支付宝收到消息后,消除消息表中对应的消息记录,即完成本次扣钱操作.
//=========================================
MQ也可以在另一个线程中进行发送,发送成功后就删除,就算删除不成功也没问题,大不了多发了一个消息。
为了确保消息的安全性,可以在发送端保存消息,更改状态表示消息已经发送了,通过消费端的回复再确认消息已经消费成功了就更安全了(防止MQ的数据丢失)
当然确保消息一定发送出去也是要确保才行
https://blog.csdn.net/zxl315/article/details/53433707(分布式事务最终一致性常用方案)
https://blog.csdn.net/qq_27384769/article/details/79305402(分布式事务)
发表评论
-
SQL常用语句
2022-07-21 19:09 216delete from cacherefresh where ... -
ES数据同步方案
2022-06-24 10:57 2320//============================= ... -
选举算法
2022-06-17 08:48 436选举算法 常用的选举 ... -
elasticSearch使用
2022-04-27 08:42 421ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 250大小写转换快捷键 ctr+shift+u IDEA ... -
SQL存储过程例子和有用的SQL
2022-02-19 09:20 207delete from cacherefresh where ... -
zookeeper dubbo 安装
2021-12-04 19:27 325docker-machine ssh default d ... -
将博客搬至CSDN
2021-11-18 19:57 196将博客搬至CSDN -
docker mysql 主从安装
2021-11-10 16:55 240docker run -d -p 13306:3306 --n ... -
rocketmq安装部署.txt
2021-11-07 19:10 220docker search rocketmq docke ... -
百度人脸识别
2021-05-21 16:11 366package com.gaojinsoft.htwy.y20 ... -
springBoot tomcat配置参数说明
2021-05-12 09:13 3029#最大连接数 server.tomcat.max-connec ... -
技术选型
2021-01-29 17:34 2991.移动端组件vux,vant,vant好点,文档好的,基于v ... -
SQL优化对比与总结
2021-01-09 14:44 38219000000 b表 SELECT * from b w ... -
方便开发调试和问题跟踪
2021-01-01 10:17 2511.外网最好可以连接数据库 2.关键信息可以在接口返回信息, ... -
执行存储过程测试
2020-12-30 16:47 389--执行存储过程创建 if (exists (select * ... -
Jenkins脚本
2020-03-12 17:55 447#!/bin/bash -ilx echo "开始 ... -
base64与file 相互转换
2019-10-23 18:19 785base64与file 相互转换 import org. ... -
钉钉开发
2019-09-17 20:16 438钉钉开发 开发者帐号 1357047443 x***310* ... -
安卓模拟器使用
2019-07-03 23:13 4逍遥pc版的安卓模拟器 http://www.xyaz.cn/ ...
相关推荐
**二、最终一致性常用做法** 1. **单数据库事务**:利用数据库自身的事务机制,如MySQL的InnoDB引擎,保证单个数据库内的强一致性。 2. **多数据库事务**:采用二阶段提交(2PC)协议,通过Spring的JTA支持,协调多...
最终一致性是分布式系统中常用的一致性模型,它允许数据在多个副本间存在短暂的不一致,但最终会达到一致状态。在Ray框架中,通过事件复制和冲突解决策略来实现最终一致性。例如,使用事件排序和版本控制来管理并发...
常见的有三种:强一致性、最终一致性和读已写一致性(Read-Your-Writes Consistency)。在分布式系统中,强一致性很难实现,因为需要保证所有节点在同一时刻看到相同的数据,这通常会牺牲系统的可用性。因此,Spring...
首先,一阶一致性是指多智能体系统的每个个体通过与邻居交换信息,最终使所有个体的状态(如位置、速度等)收敛到同一值。这通常通过一阶动态模型来描述,即每个智能体的状态更新依赖于其自身状态和邻居状态的偏差。...
一致性是多智能体系统中的核心概念,它是指多个智能体通过相互交互,最终达到一种集体行为或状态的一致性。这种一致性可以体现在位置、速度、决策等多个方面,目的是使得整个系统能够协同工作,达成共同的目标。在...
"数学中常用的30个MATLAB程序和函数.doc"文档提供了额外的学习资源,帮助用户更好地理解和应用一致性算法。这些程序和函数可能包括向量和矩阵操作(如dot product、matrix multiplication)、线性代数工具(如...
这可能涉及到解决约束条件下的一致性优化问题,例如,保证所有智能体的决策或状态最终达成一致。 3. 梯度算法:在分布式环境中,利用节点之间的信息交互,通过梯度下降方法进行最优化计算。 4. 收敛性与参数设定:...
强一致性要求读操作总能返回最近写操作的结果,而最终一致性则允许短暂的数据不一致,但随着时间推移,所有节点最终会达成一致。 GFS在设计之初,为了实现高可用性和性能,选择了牺牲部分一致性来换取更大的系统...
1. **最终一致性**:在一段时间后,所有副本最终达到一致状态。这是许多分布式系统的常用策略,因为它允许较高的可用性和性能。 2. **单调读一致性**:确保一旦读取到某个值,后续读取不会返回更旧的值。 3. **...
为保证数据的一致性,必须确保这些副本之间能够在事务更新操作时,通过某种协议来确定一个全局的执行顺序,保证数据状态能够最终一致。分布式一致性协议的挑战在于如何处理并发更新,并在多个副本间进行有效协调。如...
最后,文章总结了缓存的一致性问题的解决方案,并强调了设置缓存的过期时间是保证最终一致性的解决方案。 关键词:Redis、MySQL、数据一致性、缓存、Cache-Aside Pattern、Read-Through Pattern、Write-Through ...
在这些应用中,一致性问题是一个关键问题,因为需要所有智能体的最终状态趋近相同。 本文的主要贡献是在时延和网络攻击下的多智能体系统一致性问题。时延是指智能体之间的通信延迟,而网络攻击是指恶意攻击智能体的...
然后,BASE原则是大型分布式系统中常用的一种弱一致性模型,它是Basically Available(基本可用)、Soft state(软状态)和Eventually Consistent(最终一致性)的组合。它允许系统在短时间内容忍不一致,但最终会...
这类系统通常采用强一致性或最终一致性模型,前者要求所有读写操作都能看到最新的数据,后者允许短暂的数据不一致,但最终会达到一致状态。Paxos、Raft等一致性算法是解决此类问题的常用方法。 总的来说,缓存回写...
1. **非二进制一致性(Eventual Consistency)**:允许数据副本存在短暂的不一致性,但在一定时间内会达到最终一致性。这种方式适用于对实时性要求不高、可以接受最终一致性的场景。 2. **冲突检测与解决**:通过...
一致性是指网络中的多个节点通过相互交互,最终达到相同状态或遵循同一规则运行的状态。在分布式控制系统中,一致性是确保系统整体性能和稳定性的重要指标。在无线网络控制系统中,由于无线通信的不稳定性、传输延迟...
一致性算法则是多智能体系统中的一种关键控制策略,它允许每个个体仅与其邻居进行通信,通过不断更新状态,最终使得整个系统的状态达到一致。在编队控制中,一致性算法可以确保所有小车的速度和位置逐渐趋近于某个...
在多自主体系统中,一致性问题是指设计适当的一致性算法,使自主体间通过局部通信交流最终趋向于相同的状态值。自主体动态包括单积分、双积分、高阶线性模型、非线性模型等动态模型。在设计一致性算法时,需要考虑多...
在研究分布式系统领域中,分布式一致性状态估计算法是确保网络中各个节点能够协同工作并最终达成对某一状态的共识的关键技术。本文深入探讨了在非均匀拓扑网络环境下,如何高效地实现分布式一致性状态估计,提出了四...