400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

分布式事务中的三种解决方案详解-创新互联

[TOC]

成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,10年企业及个人网站建设经验 ,为成都上千客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,高端网站设计,同时也为不同行业的客户提供成都做网站、网站建设、外贸营销网站建设的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联

一、分布式事务前奏

二、柔性事务解决方案架构

在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈。柔性事务有两个特性:基本可用和柔性状态。所谓基本可用是指分布式系统出现故障的时候允许损失一部分的可用性。柔性状态是指允许系统存在中间状态,这个中间状态不会影响系统整体的可用性,比如数据库读写分离的主从同步延迟等。柔性事务的一致性指的是最终一致性。

(一)、基于可靠消息的最终一致性方案概述

分布式事务中的三种解决方案详解

(二)、TCC事务补偿型方案

分布式事务中的三种解决方案详解

(三)、大努力通知型

分布式事务中的三种解决方案详解

三、基于可靠消息的最终一致性方案详解

(一)、消息发送一致性

消息中间件在分布式系统中的核心作用就是异步通讯、应用解耦和并发缓冲(也叫作流量削峰)。在分布式环境下,需要通过网络进行通讯,就引入了数据传输的不确定性,也就是CAP理论中的分区容错性。

分布式事务中的三种解决方案详解

消息发送一致性是指产生消息的业务动作与消息发送一致,也就是说如果业务操作成功,那么由这个业务操作所产生的消息一定要发送出去,否则就丢失。

处理方式一

public void completeOrderService() {
    // 处理订单
    order.process();

    // 发送会计原始凭证消息
    pipe.sendAccountingVouchetMessage();
}

在上面的情况中,如果业务操作成功,执行的消息发送之前应用发生故障,消息发送不出去,导致消息丢失,将会产生订单系统与会计系统的数据不一致。如果消息系统或者网络异常,也会导致消息发送不出去,也会造成数据不一致。

处理方式二

public void completeOrderService() {
    // 发送会计原始凭证消息
    pipe.sendAccountingVouchetMessage();

    // 处理订单
    order.process();
}

如果将上面的两个操作调换一下顺序,这种情况就会更加不可控了,消息发出去了业务订单可能会失败,会造成订单系统与业务系统的数据不一致。那么JMS标准中的XA协议是否可以保障发送的一致性?

(二)、保证消息一致的变通做法

分布式事务中的三种解决方案详解

  1. 发送消息:主动方现将应用把消息发给消息中间件,消息状态标记为“待确认”状态。
  2. 消息中间件收到消息后,把消息持久化到消息存储中,但是并不影响被动方投递消息。
  3. 消息中间件返回消息持久化结果,主动方根据返回的结果进行判断如何进行业务操作处理:
    1. 失败:放弃执行业务操作处理,结束,必要时向上层返回处理结果。
    2. 成功:执行业务操作处理。
  4. 业务操作完成后,把业务操作结果返回给消息中间件。
  5. 消息中间件收到业务操作结构后,根据业务结果进行处理:
    1. 失败:删除消息存储中的消息,结束。
    2. 成功:更新消息存储中的消息状态为“待发送”,然后执行消息投递。
  6. 前面的正向流程都成功之后,向被动方应用投递消息。

但是在上面的处理流程中,任何一个环节都有可能出现问题。

(三)、常规MQ消息处理流程和特点

分布式事务中的三种解决方案详解

(四)、消息重复发送问题和业务接口幂等性设计

分布式事务中的三种解决方案详解

对于未确认的消息,采用按规则重新投递的方式进行处理。对于以上流程,消息重复发送会导致业务处理接口出现重复调用的问题。消息消费过程中消息重复发送的主要原因就是消费者成功接收处理完消息后,消息中间件没有及时更新投递状态导致的。如果允许消息重复发送,那么消费方应该实现业务接口的幂等性设计。

(五)、本地消息服务方案

分布式事务中的三种解决方案详解

(六)、独立消息服务方案

分布式事务中的三种解决方案详解

(七)、消息服务子系统的设计实现

示例消息数据表:

名称数据类型允许空默认值属性释义
uuidvarchar(50)NouniqueUUID
versionint(11)No0版本号
editervarchar(100)YesNULL修改者
creatervarchar(100)YesNULL创建者
edit_timedatetimeYes0000-00-00 00:00:00最后修改时间
create_timedatetimeNo0000-00-00 00:00:00创建时间
msg_idvarchar(50)No消息ID
msg_bodylongtextNo消息内容
msg_date_typevarchar(50)Yes消息数据类型
consumer_queuevarchar(100)No消费队列
send_timesint(6)No0消息重发次数
is_deadvarchar(20)No是否死亡
statusvarchar(20)No状态
remarkvarchar(200)Yes备注
field0varchar(200)Yes扩展字段0
field1varchar(200)Yes扩展字段1
field2varchar(200)Yes扩展字段2

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文题目:分布式事务中的三种解决方案详解-创新互联
URL分享:http://www.bluegullmedia.com/article/dpoihp.html

其他资讯

让你的专属顾问为你服务

0.0387s