当前位置:首页 > 经验 >

分布式微服务架构的优缺点(微服务架构缺点)

来源:原点资讯(www.yd166.com)时间:2022-10-28 06:13:15作者:YD166手机阅读>>

本地消息表顾名思义就是会有一张存放本地消息的表,一般都是放在数据库中,然后在执行业务的时候将业务的执行和将消息放入消息表中的操作放在同一个事务中,这样就能保证消息放入本地表中业务肯定是执行成功的。

然后再去调用下一个操作,如果下一个操作调用成功了好说,消息表的消息状态可以直接改成已成功。

如果调用失败也没事,会有后台任务定时去读取本地消息表,筛选出还未成功的消息再调用对应的服务,服务更新成功了再变更消息的状态。

这时候有可能消息对应的操作不成功,因此也需要重试,重试就得保证对应服务的方法是幂等的,而且一般重试会有最大次数,超过最大次数可以记录下报警让人工处理。

可以看到本地消息表其实实现的是最终一致性,容忍了数据暂时不一致的情况。

⑥消息事务

RocketMQ 就很好的支持了消息事务,让我们来看一下如何通过消息实现事务。

第一步先给 Broker 发送事务消息即半消息,半消息不是说一半消息,而是这个消息对消费者来说不可见,然后发送成功后发送方再执行本地事务。再根据本地事务的结果向 Broker 发送 Commit 或者 RollBack 命令。

并且 RocketMQ 的发送方会提供一个反查事务状态接口,如果一段时间内半消息没有收到任何操作请求,那么 Broker 会通过反查接口得知发送方事务是否执行成功,然后执行 Commit 或者 RollBack 命令。

如果是 Commit 那么订阅方就能收到这条消息,然后再做对应的操作,做完了之后再消费这条消息即可。

如果是 RollBack 那么订阅方收不到这条消息,等于事务就没执行过。可以看到通过 RocketMQ 还是比较容易实现的,RocketMQ 提供了事务消息的功能,我们只需要定义好事务反查接口即可。

分布式微服务架构的优缺点,微服务架构缺点(9)

同时也可以看到消息事务实现的也是最终一致性。

⑦最大努力通知

发起通知方通过一定的机制最大努力将业务处理结果通知到接收方。

具体包括:

  • 有一定的消息重复通知机制。因为接收通知方可能没有接收到通知,此时要有一定的机制对消息重复通知。
  • 消息校对机制。如果尽最大努力也没有通知到接收方,或者接收方消费消息后要再次消费,此时可由接收方主动向通知方查询消息信息来满足需求。

前面介绍的的本地消息表和消息事务都属于可靠消息,与这里介绍的最大努力通知有什么不同?

可靠消息一致性,发起通知方需要保证将消息发出去,并且将消息发到接收通知方,消息的可靠性关键由发起通知方来保证。

最大努力通知,发起通知方尽最大的努力将业务处理结果通知为接收通知方,但是可能消息接收不到,此时需要接收通知方主动调用发起通知方的接口查询业务处理结果,通知的可靠性关键在接收通知方。

解决方案上,最大努力通知需要:

  • 提供接口,让接受通知放能够通过接口查询业务处理结果
  • 消息队列 ACK 机制,消息队列按照间隔 1min、5min、10min、30min、1h、2h、5h、10h 的方式,逐步拉大通知间隔 ,直到达到通知要求的时间窗口上限。之后不再通知

最大努力通知适用于业务通知类型,例如微信交易的结果,就是通过最大努力通知方式通知各个商户,既有回调通知,也有交易查询接口。

分布式微服务架构的优缺点,微服务架构缺点(10)

⑧AT 事务模式

这是阿里开源项目 seata 中的一种事务模式,在蚂蚁金服也被称为 FMT。优点是该事务模式使用方式,类似 XA 模式,业务无需编写各类补偿操作,回滚由框架自动完成,缺点也类似 AT,存在较长时间的锁,不满足高并发的场景。

在 Seata 项目中,最早由阿里巴巴中间件开源出的 AT 模式(Automatic Transaction) 是一套创新的、业务无侵入的分布式事务解决方案。

截止 Seata 的 GA 版本发布,AT 模式 已经在开源社区引起了广泛关注,很多家企业用户已经将 Seata 的 AT 模式应用于生产。

AT 模式一阶段:首先,在 Seata 的组件中,如果你想开启分布式事务,那么就应该在你的业务入口或者事务发起入口加上 @GlobalTransactional 注解。

如果你是 AT 模式就要做好数据源代理(seata1.0 后全面支持自动代理),并被 sqlsessionfactroy 使用(或者直接 jdbc 操作使用被代理数据源)。

可以发现比较关键的异步,与其他模式的区别便是代理数据源,而代理数据源又有什么奥秘呢?

分布式微服务架构的优缺点,微服务架构缺点(11)

AT 模式二阶段提交:二阶段如果是提交的话,因为“业务 SQL”在一阶段已经提交至数据库,所以 Seata 框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。

分布式微服务架构的优缺点,微服务架构缺点(12)

栏目热文

分布式和微服务项目(微服务分布式方案)

分布式和微服务项目(微服务分布式方案)

微服务架构的演变微服务架构的技术体系、社区目前已经越来越成熟。在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构...

2022-10-28 06:21:12查看全文 >>

分布式微服务架构详解(各种微服务架构图解)

分布式微服务架构详解(各种微服务架构图解)

在分布式架构中,网络通信是底层基础,没有网络,也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作,共同完成...

2022-10-28 06:26:25查看全文 >>

分布式事务一致性解决方案(springcloud分布式事务)

分布式事务一致性解决方案(springcloud分布式事务)

事务想必大家并不陌生,比如经常被人提起的ACID,但是为了后续的分布式事务的内容,我们先来聊聊 ACID,然后再介绍下什...

2022-10-28 06:21:22查看全文 >>

微服务与分布式区别(微服务与分布式的优势)

微服务与分布式区别(微服务与分布式的优势)

分布式架构是分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内...

2022-10-28 05:59:47查看全文 >>

架构解密从分布式到微服务(微服务和分布式最大区别)

架构解密从分布式到微服务(微服务和分布式最大区别)

深入Kubernetes微服务平台Kubernetes的概念与功能架构师普遍有这样的愿景:在系统中有ServiceA、S...

2022-10-28 06:22:00查看全文 >>

什么是分布式架构和微服务架构(微服务架构优缺点)

什么是分布式架构和微服务架构(微服务架构优缺点)

单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困...

2022-10-28 06:39:26查看全文 >>

golabel标签编辑软件基础操作教程(golabel批量打印方法)

golabel标签编辑软件基础操作教程(golabel批量打印方法)

本节要点 - 掌握Label 和 GOTO 指令的使用 - 要点解析 (1)Label 指令。 Label 指令——标签...

2022-10-28 06:34:33查看全文 >>

golabel软件使用方法(golabel软件怎么打印标签)

golabel软件使用方法(golabel软件怎么打印标签)

今天我们要讨论的是C语言中相对比较冷门的知识关键字goto!goto关键字基础知识关键字goto表示无条件跳转的意思,类...

2022-10-28 06:35:07查看全文 >>

golabel软件安装(打开golabel后语言栏不见了)

golabel软件安装(打开golabel后语言栏不见了)

| 责编:王冬奇经过半年多的等待,我们终于迎来了Windows 8.1系统的2014UPDATE1升级。在此之前Wind...

2022-10-28 06:17:01查看全文 >>

golabel文字下面怎么加横线(golabel标签打印时怎么增加下划线)

golabel文字下面怎么加横线(golabel标签打印时怎么增加下划线)

标签制作软件适用于制作各个行业的标签,当我们在标签制作软件中批量设计标签时,有时需要在对象下面添加下划线,那么,在标签制...

2022-10-28 06:22:03查看全文 >>

文档排行