分布式事务的几种实现方式 | 京东云技术团队
基础理论
CAP理论
一致性(Consistency) :在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误;
可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数据状态不一致;
分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障时,仍然能保证对外提供满足一致性和可用性的服务,除非整个网络环境都发生故障;
本地事务四大特性(ACID)
事务应该是具备原子性、一致性、隔离性和持久性,简称 ACID。
原子性(Atomicity) ,可以理解为一个事务内的所有操作要么都执行,要么都不执行。
一致性(Consistency) ,可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,事务前后数据的完整性必须保持一致。。
隔离性(Isolation) ,指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。
持久性(Durability) ,指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。
BASE理论
基本可用(Basically Available):分布式系统在出现故障时,保证核心可用,允许损失部分可用性。(响应时间上的损失、功能上的损失)
软状态(Soft State):系统中的数据允许存在中间状态,中间状态不影响系统的整体可用性。(支付中、处理中等)
最终一致性(Eventually Consistent):系统中的数据不可一直处于软状态,必须在有时间期限,在期限过后应当保证数据的一致性。(支付中变为支付成功)
相比于本地事务的ADIC强一致性模型,BASE理论提出通过牺牲一定的强一致性来获得可用性;
不同业务单元和业务组件对数据一致性的要求不一样,因此分布式系统中BASE理论和ACID特性会结合使用。
幂等性设计
幂等(Idempotent)是一个数学与计算机学中的概念。f(n) = 1^n , 无论n等于多少,f(n)永远值等于1;
在程序中,使用相同参数执行同一个方法,每一次执行结果都是相同的,即具有幂等性;
以订单状态处理为例的幂等性设计,不论执行多少次orderProcess()方法,都只会扣减一次库存,并且返回true。
分布式事务分类
二段提交2PC(Two-Phase-Commit)|三段提交3PC (Three-Phase-Commit)
三阶段提交引入两个机制
1、 引入超时机制。同时在协调者和参与者中都引入超时机制。
2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
主要解决的问题:
避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。
缺点:
性能较差,会存在长时间的锁表。
补偿事务-TCC(Try-Confirm-Cancel)|Saga
TCC 与Saga其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。确认和补偿都有采用幂等性设计。
缺点:代码量大,可维护性差。
消息事务
消息一致性方案是通过消息中间件保证上、下游应用数据操作的一致性。基本思路是将本地操作和发送消息放在一个事务中,保证本地操作和消息发送要么两者都成功或者都失败。下游应用向消息系统订阅该消息,收到消息后执行相应操作。
消息方案从本质上讲是将分布式事务转换为两个本地事务,然后依靠下游业务的重试机制达到最终一致性。
代表产品:RocketMQ
分布式事务产品框架
京东jdts
服务通过lb连到集群中任何一个节点均能保证业务正确执行,某一个节点异常时集群可正常提供服务,同时支持集群横向、纵向扩展。
Seata
一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
全局事务服务GTS
用于实现分布式环境下,特别是微服务架构下的高性能事务一致性。可以与RDS、MySQL、PostgreSQL等数据源,Spring Cloud、Dubbo、HSF及其他RPC框架,MQ消息队列等中间件产品配合使用,轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合。
作者:京东零售 谷伟
来源:京东云开发者社区

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
扫光动效在移动端应用实践
作者 | Seven 导读 随着移动互联网的快速发展,业界涌现出大量有创意又有趣的交互体验。扫光动效就是其中一种有意思的加载动效,常见的扫光动效有骨架屏扫光、logo扫光。那么这两种扫光动效的原理是什么,如何实现这两种扫光效果,以及在iOS和Andoird双端实现起来有什么差异,本文会为你详细揭晓。 全文10549字,预计阅读时间27分钟。 GEEK TALK 01 引言 扫光动效作为移动端的常见加载动效,与传统的转圈加载相比,能给人更好的视觉和感官体验。其主要特点是光效会随着时间进行扫射,文字或图案有被颜色填充的感觉。 笔者先后做过骨架屏扫光、熊掌扫光loading, 本文将分别从 iOS 和 Android的视角, 介绍这两种扫光动效的实现和双端的技术差异。 △熊掌扫光动效 GEEK TALK 02 骨架屏扫光动效 骨架屏是一种界面加载过程中的过渡效果。它在页面数据加载完成前,先给用户展示出页面的大致结构,在拿到接口数据后渲染出实际页面内容然后替换掉。这种技术能够降低用户的焦灼情绪,使界面加载过程变得自然通畅,提升用户体验。常用于文章列表、动态列表页等相对比较规则的列表页面。这里以...
- 下一篇
把LangChain跑起来的3个方法 | 京东云技术团队
使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来的方法,如有错误欢迎纠正。 Langchain官方文档地址: https://python.langchain.com/ 基础功能 LLM 调用 支持多种模型接口,比如 OpenAI、HuggingFace、AzureOpenAI … Fake LLM,用于测试 缓存的支持,比如 in-mem(内存)、SQLite、Redis、SQL 用量记录 支持流模式(就是一个字一个字的返回,类似打字效果) Prompt管理,支持各种自定义模板 拥有大量的文档加载器,比如 Email、Markdown、PDF、Youtube … 对索引的支持 文档分割器 向量化 对接向量存储与搜索,比如 Chroma、Pinecone、Qdrand Chains LLMChain 各种工具Chain LangChainHub 详细地址可参考:https://www.langchain.cn/t/topic/35...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品