《SpringCloud Alibaba 微服务架构》专题(十九)-分布式事务解决方案

电商项目-分布式事务(四)基于消息队列实现分布式事务 分布式事务,用户下单增加积分 阅读详情

1.分布式事务概念

1.1.问题引入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。

上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!

在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或多或多少都能碰到相似情景。

本质上问题可以抽象为:当一个表数据操作成功后,怎么保证另一个表的数据也必须要操作成功。当然啦,这两个数据表不在一个数据源中

1.2.加入没有分布式事务

在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:
在这里插入图片描述
上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订单服务,创建订单记录。
正常情况下,两个数据库各自更新成功,两边数据维持着一致性。

在这里插入图片描述
但是,在非正常情况下,有可能库存的扣减完成了,随后的订单记录却因为某些原因插入失败。这个时候,两边数据就失去了应有的一致性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.小结

事务: 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.

本地事务: SqlSessionfactory --> 一个数据库范围类事务管理.

分布式事务:跨了多个数据库事务管理,在微服务架构每个服务都有自己数据库,在微服务架构中必然要用到分布式事务.

2.柔性事务 vs 刚性事务

刚性事务是指严格遵循ACID原则的事务, 例如单机环境下的数据库事务.
柔性事务是指遵循BASE理论的事务, 通常用在分布式环境中, 常见的实现方式有:

①两阶段提交(2PC)
②TCC补偿型提交
③基于消息的异步确保型
④最大努力通知型

通常对本地事务采用刚性事务, 分布式事务使用柔性事务.

3.两阶段提交

分布式事务用于在分布式系统中保证不同节点之间的数据一致性。分布式事务的实现有很多种,最具有代表性的是由Oracle Tuxedo系统提出的XA分布式事务协议。

XA协议包含两阶段提交(2PC),这里我们重点介绍两阶段提交的具体过程

3.1.两阶段提交(2PC)

两阶段提交(Two Phase Commit, 2PC), 具有强一致性, 是系统的一种典型实现.
两阶段提交, 常见的标准是XA, JTA等. 例如Oracle的数据库支持XA.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在魔兽世界这款游戏中,副本组团打BOSS的时候,为了更方便队长与队员们之间的协作,队长可以发起一个“就位确认”的操作:
在这里插入图片描述
当队员收到就位确认提示后,如果已经就位,就选择“是”,如果还没就位,就选择“否”。
在这里插入图片描述
当队长收到了所有人的就位确认,就会向所有队员们发布消息,告诉他们开始打BOSS。
在这里插入图片描述
相应的,在队长发起就位确认的时候,有可能某些队员还并没有就位:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是魔兽世界当中组团打BOSS的确认流程。这个流程和XA分布式事务协议的两阶段提交非常相似。

那么XA协议究竟是什么样子呢?在XA协议中包含着两个角色:事务协调者和事务参与者。让我们来看一看他们之间的交互流程:

3.1.1.第一阶段

在这里插入图片描述
在XA分布式事务的第一阶段,作为事务协调者的节点会首先向所有的参与者节点发送Prepare请求。

在接到Prepare请求之后,每一个参与者节点会各自执行与事务有关的数据更新,写入Undo Log和Redo Log。如果参与者执行成功,暂时不提交事务,而是向事务协调节点返回“完成”消息。

当事务协调者接到了所有参与者的返回消息,整个分布式事务将会进入第二阶段。

3.3.2.第二阶段

在这里插入图片描述
在XA分布式事务的第二阶段,如果事务协调节点在之前所收到都是正向返回,那么它将会向所有事务参与者发出Commit请求。

接到Commit请求之后,事务参与者节点会各自进行本地的事务提交,并释放锁资源。当本地事务完成提交后,将会向事务协调者返回“完成”消息。

当事务协调者接收到所有事务参与者的“完成”反馈,整个分布式事务完成。

3.3.3.失败的场景

第一阶段

在这里插入图片描述
第二阶段
在这里插入图片描述
在XA的第一阶段,如果某个事务参与者反馈失败消息,说明该节点的本地事务执行不成功,必须回滚。
于是在第二阶段,事务协调节点向所有的事务参与者发送Abort请求。接收到Abort请求之后,各个事务参与者节点需要在本地进行事务的回滚操作,回滚操作依照Undo Log来进行。

以上就是XA两阶段提交协议的详细过程

3.2.小结

在这里插入图片描述

  • 1) 我们的应用程序(client)发起一个开始请求到TC;
  • 2) TC先将消息写到本地日志,之后向所有的Si发起消息。以支付宝转账到余额宝为例,TC给A的prepare消息是通知支付宝数据库相应账目扣款1万,TC给B的prepare消息是通知余额宝数据库相应账目增加1w。为什么在执行任务前需要先写本地日志,主要是为了故障后恢复用,本地日志起到现实生活中凭证 的效果,如果没有本地日志(凭证),出问题容易死无对证;
  • 3) Si收到消息后,执行具体本机事务,但不会进行commit,如果成功返回,不成功返回。同理,返回前都应把要返回的消息写到日志里,当作凭证。
  • 4) TC收集所有执行器返回的消息,如果所有执行器都返回yes,那么给所有执行器发生送commit消息,执行器收到commit后执行本地事务的commit操作;如果有任一个执行器返回no,那么给所有执行器发送abort消息,执行器收到abort消息后执行事务abort操作。

注:TC或Si把发送或接收到的消息先写到日志里,主要是为了故障后恢复用。如某一Si从故障中恢复后,先检查本机的日志,如果已收到,则提交,如果则回滚。如果是,则再向TC询问一下,确定下一步。如果什么都没有,则很可能在阶段Si就崩溃了,因此需要回滚。

现如今实现基于两阶段提交的分布式事务也没那么困难了,如果使用java,那么可以使用开源软件atomikos(http://www.atomikos.com/)来快速实现。

3.3.两阶段提交(2PC)不足

不过但凡使用过的上述两阶段提交的同学都可以发现性能实在是太差,根本不适合高并发的系统。为什么?

3.3.1.性能问题

XA协议遵循强一致性。在事务执行过程中,各个节点占用着数据库资源,只有当所有节点准备完毕,事务协调者才会通知提交,参与者提交后释放资源。这样的过程有着非常明显的性能问题。

3.2.2.协调者单点故障问题

事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。

3.2.2.丢失消息导致的不一致问题

在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。

4.TCC (Try-Confirm-Cancle TCC两阶段补偿性方案)

TCC事务的出现正是为了解决应用拆分带来的跨应用业务操作原子性的问题。当然,由于常规的XA事务(2PC,2 Phase Commit, 两阶段提交)性能上不尽如人意,也有通过TCC事务来解决数据库拆分的使用场景。

4.1.TCC的机制

个参与者需要实现3个操作:Try、Confirm 和 Cancel,3个操作对应2个阶段,Try 方法是一阶段的资源检测和预留阶段,Confirm 和 Cancel 对应二阶段的提交和回滚。
在这里插入图片描述

图中,事务开启的时候,由发起方去触发一阶段的方法,然后根据各个参与者的返回状态,决定二阶段是调 Confirm 还是 Cancel 方法。

我们先套一个业务场景进去,如下图所示
在这里插入图片描述

那页面点了支付按钮,调用支付服务,那我们后台要实现下面三个步骤

[1] 订单服务-修改订单状态
[2] 账户服务-扣减金钱
[3] 库存服务-扣减库存

达到事务的效果,要么一起成功,要么一起失败!就要采取TCC分布式事务方案!
在这里插入图片描述

TCC又可以被称为两阶段补偿事务,第一阶段try只是预留资源,第二阶段要明确的告诉服务提供者,这个资源你到底要不要,对应第二阶段的confirm/cancel,用来清除第一阶段的影响,所以叫补偿型事务。

再打个比方,说TCC太高大上是吧,讲RM中的prepare、commit、rollback接口,总知道吧。可以类比的这么理解
在这里插入图片描述

那差别在哪呢?
rollback、commit、prepare,站在开发者层面是感知不到的,数据库帮你做了资源的操作!
而try、confirm、cancel,站在开发者层面是能感知到的,这三个方法的业务逻辑,即对资源的操作,开发者是要自己去实现的!
好,下面套入我们的场景,怎么做呢。比如,你的订单服务中本来只有一个接口

//修改代码状态
orderClient.updateStatus();

都要拆为三个接口,即

orderClient.tryUpateStatus();
orderClient.confirmUpateStatus();
orderClient.cancelUpateStatus();

注意了:面试官如果问你,TCC有什么缺点?这就是很严重的缺点,对代码入侵性大!每套业务逻辑、都要按try(请求资源)、confirm(操作资源)、cancel(取消资源),拆分为三个接口!

具体每个阶段,每个服务业务逻辑是什么样的呢?
假设,库存数量本来是50,那么可销售库存也是50。账户余额为50,可用余额也为50。用户下单,买了1个单价为1元的商品。流程如下:

Try阶段:

订单服务:修改订单的状态为【支付中】
账户服务:账户余额不变,可用余额减1,然后将1这个数字冻结在一个单独的字段里
库存服务:库存数量不变,可销售库存减1,然后将1这个数字冻结在一个单独的字段里

confirm阶段

订单服务:修改订单的状态为【支付完成】
账户服务:账户余额变为(当前值减冻结字段的值),可用余额不变(Try阶段减过了),冻结字段清0。
库存服务:库存变为(当前值减冻结字段的值),可销售库存不变(Try阶段减过了),冻结字段清0。

cancel阶段

订单服务:修改订单的状态为【未支付】
账户服务:账户余额不变,可用余额变为(当前值加冻结字段的值),冻结字段清0。
库存服务:库存不变,可销售库存变为(当前值加冻结字段的值),冻结字段清0。

伪代码
接下来从代码程序来说明,为了便于演示,将入参略去。
本来,你支付服务的代码是长下面这样的
在这里插入图片描述
那么,用上TCC模型后,代码变成下面这样
在这里插入图片描述
注意了,这种写法其实严格上来说,不是不行。看你业务场景,因为存在一些瑕疵,看你自己有没办法接受

(1)cancel或者confirm出现异常了,你怎么处理?
例如在cancel阶段执行如下三行代码

orderClient.cancelUpdateStatus();
accountClient.cancelDecrease();
repositoryClient.cancelDecrease();

你第二行出现异常了,第三行没跑就退出了,怎么办?你要对此进行业务补偿!

(2)大量逻辑重复
你看啊,我们的执行架构其实是这样的

try{
    xxclient.try();
}catch(Throwable t){
    xxclient.cancel();
    throw t;
}
xxclient.confirm();

有没办法让这个架子交给框架去执行,我们告诉框架,你在每个阶段要执行哪些方法就好!

因此,需要引入TCC分布式事务框架,事务的Try、Confirm、Cancel三个状态交给框架来感知!你只要告诉框架,Try要执行啥,Confirm要执行啥,Cancel要执行啥!如果Cancel过程出现异常了,框架有内部的补偿措施给你恢复数据!

以分布式tcc框架hmily为例,如果出现cancel异常或者confirm异常的情况,在try阶段会保存好日志,Hmily有内置的调度线程池来进行恢复,不用担心。
那hmily,怎么感知状态的呢?也很简单,就是切面编程,核心逻辑如下几行
在这里插入图片描述
我们在使用过程中,只要通过@Tcc注解告诉框架confirm方法执行啥,cancel方法执行啥即可!其他的交给框架帮你处理!

4.2.使用场景:
  严格一致性
  执行时间短
  实时性要求高

5.异步确保型

一个业务场景,也是很常见的一个异步调用场景:

支付宝往余额宝转钱

即将服务A假设为支付宝,服务B假设为余额宝。于是呢,我们的支付宝往余额宝转100块钱是怎么做的呢?特别容易,借助消息队列即可,如下图所示
在这里插入图片描述
一致性解决

OK,上面这一版有一个致命的问题!如下所示

事务开始
(1)给支付宝账户zhangsan,扣100元
(2)将(给余额宝账户zhangsan,加100元)封装为消息,发送给消息队列
事务结束

敢问你,如何保证第一步和第二步是在同一个事务里完成的。换句话说,第一步操作的是数据库,第二步操作的是一个消息队列,你如何保证这两步之间的一致性?

记住了,任何涉及到数据库和中间件之间的业务逻辑操作,都需要考虑二者之间的一致性。比如,你先操作了数据库,再操作缓存,数据库和缓存之间一致性如何解决?好吧,改变思路,加一张事务表,如下图所示
在这里插入图片描述
注意了,此时事务的内容为

事务开始
(1)给支付宝账户zhangsan,扣100元
(2)给事件表插入一条记录
事务结束

此时是对同一数据库的两张表操作,因此可以用数据库的事务进行保证。另外,起一个定时程序,定时扫描事务表,发现一个状态为’UNFINISHED’的事件,就进行封装为消息,发送到消息中间件,然后将状态改为’FINISHED’.

幂等性解决

注意了,这一版还存在一个幂等性问题!
仔细看,定时程序做了如下三个操作

(1)定时扫描事务表,发现一个状态为'UNFINISHED'的事件
(2)将事件信息,封装为消息,发送到消息中间件
(3)将事件状态改为'FINISHED'

OK,假设在步骤(2)的时候,发送完消息体,还未执行步骤(3),定时程序阵亡了!然后重启定时程序,发现刚那个事务的状态依然为’UNFINISHED’,因此重新发送。这样,就会出现重复消费问题。因此,幂等性也是需要保证的!

在消费者端,也维护一个带主键的表,可以选txid为主键,如下图所示
在这里插入图片描述
如果一旦出现重复消费,则在事务里直接报出主键冲突错误,从而保证了幂等性!

6.分布式事务常见框架选择

6.1.GTS–分布式事务解决方案

GTS是一款分布式事务中间件,由阿里巴巴中间件部门研发,可以为微服务架构中的分布式事务提供一站式解决方案。

GTS的核心优势:
性能超强
GTS通过大量创新,解决了事务ACID特性与高性能、高可用、低侵入不可兼得的问题。单事务分支的平均响应时间在2ms左右,3台服务器组成的集群可以支撑3万TPS以上的分布式事务请求。

应用侵入性极低
GTS对业务低侵入,业务代码最少只需要添加一行注解(@TxcTransaction)声明事务即可。业务与事务分离,将微服务从事务中解放出来,微服务关注于业务本身,不再需要考虑反向接口、幂等、回滚策略等复杂问题,极大降低了微服务开发的难度与工作量。

完整解决方案
GTS支持多种主流的服务框架,包括EDAS,Dubbo,Spring Cloud等。
有些情况下,应用需要调用第三方系统的接口,而第三方系统没有接入GTS。此时需要用到GTS的MT模式。GTS的MT模式可以等价于TCC模式,用户可以根据自身业务需求自定义每个事务阶段的具体行为。MT模式提供了更多的灵活性,可能性,以达到特殊场景下的自定义优化及特殊功能的实现。

容错能力强
GTS解决了XA事务协调器单点问题,实现真正的高可用,可以保证各种异常情况下的严格数据一致。
但是不开源!!

6.2.TX-LCN–分布式事务解决方案

介绍:“LCN并不生产事务,LCN只是本地事务的协调者”

LCN分布式事务框架的核心功能是对本地事务的协调控制,框架本身并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三方的框架兼容性强,支持所有的关系型数据库事务,支持多数据源,支持与第三方数据库框架一块使用(例如 sharding-jdbc),在使用框架的时候只需要添加分布式事务的注解即可,对业务的侵入性低。LCN框架主要是为微服务框架提供分布式事务的支持,在微服务框架上做了进一步的事务机制优化,在一些负载场景上LCN事务机制要比本地事务机制的性能更好,4.0以后框架开方了插件机制可以让更多的第三方框架支持进来。

特点:

 ①支持各种基于spring的db框架
 ②兼容SpringCloud、Dubbo、motan
 ③使用简单,低依赖,代码完全开源
 ④基于切面的强一致性事务框架
 ⑤高可用,模块可以依赖RPC模块做集群化,TxManager也可以做集群化
 ⑥支持本地事务和分布式事务共存
 ⑦支持事务补偿机制,增加事务补偿决策提醒
 ⑧添加插件拓展机制

选择 GTS比较N但是不开源,所以选择tx-lcn

6.3.seata

2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。

Fescar 开源后,蚂蚁金服加入 Fescar 社区参与共建,并在 Fescar 0.4.0 版本中贡献了 TCC 模式。

为了打造更中立、更开放、生态更加丰富的分布式事务开源社区,经过社区核心成员的投票,大家决定对 Fescar 进行品牌升级,并更名为 Seata,意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案。

Seata 融合了阿里巴巴和蚂蚁金服在分布式事务技术上的积累,并沉淀了新零售、云计算和新金融等场景下丰富的实践经验,但要实现适用于所有的分布式事务场景的愿景,仍有很长的路要走。因此,我们决定建立一个完全中立的分布式事务组织,希望更多的企业、开发者能够加入我们,一起打造 Seata。

在这里插入图片描述
在这里插入图片描述

基于solidity+Java+web3j实现ERC20批量转账 Java中整合poi,实现Excel的导入,下面为Excel格式 solidity编写智能合约,采用for循环的形式实现批量转账,web3中主要进行智能合约的调用,整体流程为 1.根据上传EXcel获取到需要转账的address的集合,转账数额的集合,需要的转账总和 2.使用web3进行如下操作,     ①调用ERC20 Token的approve方法,由于代币基于ERC20实现所以... 阅读详情

相关推荐

Alibaba Spring Cloud 十九 RocketMQ消息队列

如果你的微服务使用了 Spring Cloud Alibaba,可以通过引入依赖</</</</配置文件spring:cloud:stream:rocketmq:binder:bindings:output:input:发送消息@Autowired// 发送消息到 test-topic消费消息@Service这个方式基于 Spring Cloud Stream 的抽象进行开发,极大简化了与 RocketMQ 的整合。RocketMQ。

空 940

如何用消息系统避免分布式事务?

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告...

ainie4139的博客 2082

借助消息队列实现分布式事务解决方案

在后端开发中,分布式事务是一个常见的挑战。当系统的各个组件分布在不同的节点上时,保持数据的一致性和可靠性变得更加困难。然而,通过借助消息队列,我们可以实现一种有效的解决方案,用于处理分布式事务。消息队列是一种在不同组件之间传递消息的中间件。它提供了一种异步通信的方式,允许发送者将消息发送到队列中,然后接收者从队列中获取消息进行处理。这种异步通信的特性使得消息队列成为处理分布式事务的理想选择。下面我们将介绍如何使用消息队列来实现分布式事务,并提供相应的源代码。首先,我们需要选择一个合适的消息队列系统。

YOLOv7895的博客 315

分布式事务解决方案

分布式事务解决方案 1.分布式事务解决方案-面试 ​ 刚才编写的扣减库存与保存订单是在两个服务中存在的,如果扣减库存后订单保存失败了是不会回滚的,这样就会造成数据不一致的情况,这其实就是我们所说的分布式事务的问题,接下来我们来学习分布式事务的解决方案。 1.1 本地事务与分布式事务 1.1.1 事务 数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务拥有以下四个特性,习惯上被称为ACID特性: 原子性(Atomicity):事务

1663988740 732

PCB布线避坑指南:为什么你的差分线等长总调不好?AD19蛇形等长技巧详解

本文详细解析了AD19环境下PCB差分线等长调整的核心技巧与常见问题。从差分信号等长的底层逻辑到AD19规则配置,再到蛇形等长高级技巧和信号完整性验证,帮助工程师解决差分线等长调整中的难题,提升高速PCB设计的信号质量。

weixin_28738397的博客 385

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3744

SpringCloud alibaba实战系列文章汇总

个人感觉这是全网比较齐全,写的比较好的SpringCloud alibaba系列教程了,推荐给大家! SpringCloud Alibaba微服务实战一 - 基础环境准备 SpringCloud Alibaba微服务实战二 - 服务注册 SpringCloud Alibaba微服务实战三 - 服务调用 SpringCloud Alibaba微服务实战四 - 版本管理 SpringCloud Alibaba微服务实战五 - 限流熔断 SpringCloud Alibaba微服务实战六 - 配置隔离 Sprin

飘渺Jam的博客 3265

Debian 11 之使用hostapd与dnsmasq进行AP设置

本文介绍debian 11 系统下,使用hostapd 和 dnsmasq配置无线热点的方法。

xinghaitao2005的博客 1698

SpringCloud(第十九章 SpringCloud Alibaba Seata处理分布式事务)

文章目录一、分布式事务问题二、Seata简介三、Seata-Server安装四、订单/库存/账户业务数据库准备五、订单/库存/账户业务微服务准备六、Test七、一部分补充 一、分布式事务问题 1.1 分布式前 1、单机单库没这个问题 2、 1:1(系统代码和数据库在同一台机器) -> 1:N (系统对应多个库) -> N:N(系统拆分后各自对应不同的库:比如订单模块对应订单库) 1.2 分布式之后 单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用

qq_45087487的博客 831

Unity3D实战:5分钟搞定RTSP监控视频流播放(附完整代码)

本文详细介绍了如何在Unity3D中快速实现低延迟RTSP监控视频流播放,提供完整代码和优化方案。通过Video Player组件和FFmpeg集成,开发者可以轻松应对智能家居和安防监控领域的实时视频流挑战,显著降低延迟并提升性能。

weixin_29015051的博客 589

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?

一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1...

crow_ch的博客 5975

Spring Cloud 微服务入门到超神系列文章

Spring Cloud 系列入门文章 , 老鸟飞过 , 只做学习使用,欢迎交流 《Spring Cloud Alibaba 极简入门》 适用人群:有Spring Cloud基础的童鞋 一.SpringCloudAlibaba极简入门-什么是 Spring Cloud Alibaba 二.SpringCloudAlibaba极简入门-服务注册与发现Nacos 三.SpringCloudAlibab...

墨家巨子@俏如来 2万+

Langchain与Milvus集成中的pymilvus.exceptions.MilvusException: channel not found错误解析

本文深入解析了在Langchain与Milvus集成时常见的pymilvus.exceptions.MilvusException: channel not found错误。该错误通常由客户端配置错误、网络问题、服务端状态异常或版本不兼容导致。文章提供了从基础连通性测试到高级网络排查的完整故障排除指南,并针对本地Docker、远程服务器及Kubernetes等典型部署场景给出了具体解决方案,帮助开发者快速定位并修复这一连接层问题。

weixin_29229989的博客 217

SpringCloud第十九章 Alibaba Seata处理分布式事务(分布式事务问题、Seata简介、Seata-Server安装)

十九、SpringCloud Alibaba Seata处理分布式事务 1、分布式事务问题 分布式前 单机单库没这个问题 从1:1 -> 1:N -> N:N 分布式之后 单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源, 业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。 一句话 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分

likun111的博客 374

SwinTransformer改进(5):与CBAM结合的视觉模型

这个模型的核心思想是将Swin Transformer的强大特征提取能力与CBAM的注意力机制相结合,以提升模型对重要特征的关注度。​​CBAM模块​​:包含通道注意力和空间注意力两个子模块​​Swin Transformer主干网络​​:作为基础特征提取器​​集成结构​​:在Swin Transformer的不同阶段插入CBAM模块使用移动窗口(Moving Window)机制减少计算量层次化设计,特征图逐渐缩小,通道数逐渐增加在不同阶段使用Patch Merging进行下采样。

2401_82355416的博客 688

ARM CoreLink 系列 5.1.1 -- CI-700 System Address Map 】

所有的CHI 命令都包含一个 Source ID 和 Target ID, 其中 Source ID 可以来自于 RN Node, Target ID 可以来自于HN node或者其他 SN node. 其中 Target ID 是通过 SAM解析传入的地址得到的。对于 CI-700中的所有 RN Node 中的 SAM 多会进行配置,因为RN Node 访问的是整个地址空间,不同的地址空间会有不同的属性(I/O, DRAM),所以会对RN SAM 配置多个不同属性的区域。

CodingCos的博客 771

SpringCloud Alibaba Seata处理分布式事务-微服务(三十九)

订单/库存/账户业务微服务准备 业务需求 下订单->减库存->扣余额->改(订单)状态 新建订单Order-Module seata-order-service2001 POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan

weixin_44681349的博客 441

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Springcloud_H版-alibaba学习笔记(十九)SpringCloud Alibaba

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。此外,阿里云同时还提供了 Spring Cloud Alibaba 企业版微服务解决方案。

299

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringCloud Alibaba 2021微服务实战二十九 Seata 整合Nacos实战

场景说明 订单服务order-service需要对外提供创建订单的接口,创建订单的业务逻辑如下: 先调用本地的orderService保存订单操作,然后通过feign调用远程的accout-service进行账户余额扣减,最后再通过feign调用远程的product-service进行库存扣减操作。 关键的逻辑代码如下: OrderController对外提供创建订单的接口 @PostMapping("/order/create") public ResultData<Ord..

liuerchong的博客 716

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringCloud - Spring Cloud Alibaba 之 Seata分布式事务服务;Seata TC Server集群部署(二十二)

在Spring Boot单体项目中,使用了多数据源,就要保证多个数据源的数据一致性,即产生了分布式事务的问题,采用Seata的AT事务模式来解决该分布式事务问题。-n:Server node,在多个 TC Server 时,需区分各自节点,用于生成不同区间的 transactionId 事务编号,以免冲突;5、启动seata-server;seata-spring-boot-starter 依赖,但是有些配置有问题,需要自己导入和Seata Server 版本相同的依赖。...

MinggeQingchun的博客 839

SpringCloud(第一章 零基础理论入门)

一、微服务架构概述 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。 主题词:95后互联网时代下的数字化生活 主题

qq_45087487的博客 569

SpringCloud无介绍快使用,IDEA新建springcloud父工程(二)

SpringCloud无介绍快使用,IDEA新建springcloud父工程(二)

cucgyfjklx的博客 1万+

SpringCloud - Spring Cloud Alibaba 之 Seata分布式事务服务;集成Nacos配置中心(十九)

2)因Nacos使用mysql持久化,需要先开启 mysql服务(手动安装或者docker启动,docker启动需要先启动docker和挂载mysql服务,不然重启docker或者mysql导致mysql数据丢失)Seata事务组编号 seata.tx-service-group,用于TC集群名,一般格式为:${spring.application.name}-group。中,将配置方式(config.type)修改为 Nacos,并对 Nacos 配置中心的相关信息进行配置。...............

MinggeQingchun的博客 1525

尚硅谷SpringCloud(H版&alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。

第1章

北 664

Spring Cloud入门+深入(十八)-SpringCloud Alibaba入门简介

​ 一、SpringCloud Alibaba入门简介 为什么会出现SpringCloud Alibaba? Spring Cloud Netflix项目进入维护模式 Spring Cloud Netflix进入维护模式说明 什么是维护模式? 将模块置于维护模式,意味着SpringCloud团队将不会再向模块添加新功能。 进入维护模式意味着Spring Cloud Netflix将不再开发新的组件 我们都知道Spring Cloud版本迭代算是比较快的,因而出现了很多重大ISSUE都还来不及

杀神lwz的博客 318

Spring Cloud 总概述(技术目录、源码)

技术目录 Spring Cloud(一)微服务介绍 Spring Cloud(二)版本和技术选型 Spring Cloud(三)搭建父工程项目 Spring Cloud(四)搭建 module 子项目 Spring Cloud(五)Eureka 服务注册与发现 Spring Cloud(六)Zookeeper 代替 Eureka Spring Cloud(七)Consul 代替 Eureka 源码 https://github.com/akeung/springclouddem..

zzkeung的博客 2862
上一篇: Spring Data ElasticSearch使用
下一篇: LCN分布式事务框架
熊猫IT技术
熊猫IT技术 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 6021粉丝 1312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫IT技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值