当前位置: 首页 > news >正文

机械行业网站建设制作开发方案石家庄建设网站

机械行业网站建设制作开发方案,石家庄建设网站,合肥专业手机网站哪家好,做衣服外单网站前言 传统单体架构下#xff0c;所有的功能模块都在一个应用下#xff0c;所有的代码和业务逻辑都在同一个应用下实现#xff0c;所以保证数据的一致性就很简单#xff0c;保证相关操作都在同一个本地事务下就可以了。 但是在微服务架构下#xff0c;将一个应用拆分成了…前言 传统单体架构下所有的功能模块都在一个应用下所有的代码和业务逻辑都在同一个应用下实现所以保证数据的一致性就很简单保证相关操作都在同一个本地事务下就可以了。 但是在微服务架构下将一个应用拆分成了多个独立的服务每个服务都能有自己的数据库服务间通信都是通过远程调用实现实现一个功能可能需要由几个不同的服务来共同实现。这就会带来一个问题不同的服务之间无法做到使用同一个事务这就无法保证数据的一致性了。 解决分布式事务的问题一劳永逸的方式就是直接使用 SeataSeata 是一个开源的分布式事务解决方案用于解决分布式系统中的数据一致性问题。但是引入 Seata 实在是太重了在实际工作中接触过的系统并没有那么多的业务需要使用到分布式事务为了解决那么一两个业务的问题却要为整个系统引入分布式事务服务代价实在是太大了。而且相关的业务实际上只需要保证数据的最终一致性不用保证强一致性所以在实践可以使用本地消息表的方案来解决分布式事务问题。 本地消息表方案 如果系统中只有少数服务需要用到分布式事务那么直接在该服务下创建一张本地消息表结合消息队列就能够实现数据的最终一致性了。 表设计 本地消息表的设计如下 字段类型注释idlongidmsg_typevarchar消息类型biz_idvarchar业务唯一标志contenttext消息体statevarchar状态待发送已消费create_timedatetime创建时间update_timedatetime更新时间 时序图 plantuml startuml https://plantuml.com/sequence-diagramautonumberparticipant Scheduled_Task database DB_A participant Service_A queue Queue participant Service_B database DB_Bgroup Service_A本地事务DB_A - Service_A: 写本地业务数据DB_A - Service_A: 写本地消息数据 endService_A - Queue: 发送消息 note left 发送消息放到事务外 防止由于网络延迟出现 Service_A认为发送失败导致事务回滚 而实际上MQ收到了消息 Service_B也消费了消息 从而出现数据不一致的情况 end noteQueue - Service_B: 消费消息Service_B - Service_B: 幂等判断 note right 防止重复消费消息 end notegroup Service_B本地事务Service_B - DB_B: 写本地业务数据 endgroup 更新本地消息表状态Scheduled_Task - Service_B: 更新本地消息表状态Scheduled_Task - DB_A: 更新本地消息表状态 end note right 这里即使失败了也无所谓 两个服务的数据已经一致了 没有更新消息状态定时任务会重新投递 Service_B做好幂等处理 等下次消费再去修改消息状态即可 end noteloop 定时任务Scheduled_Task - DB_A: 查询未成功投递的消息Scheduled_Task - Queue: 重新投递 endenduml消息服务方案 本地消息表只只用系统中只有少量业务需要实现分布式事务的情况如果系统中的绝大多数服务都存在分布式事务的业务场景为每个服务都创建一张本地消息表显然很麻烦难以维护。 用到的地方多实际上就可以考虑上 Seata 了专业的事要交给专业的服务来做。不过这里也可以改进一下本地消息表的方案增加一个专门处理分布式事务消息的消息服务和消息库。 表设计 表设计同上面一样消息服务只不过将所有本地消息表合并成一张表了 只不过 state 字段需要多一个状态来区分 在本地消息表方案中由于写Service_A业务和创建消息是在同一个事务中它们要么同时成功要么同时失败所以两个状态待发送已消费就能表示整个消息的生命周期。 待发送状态则表示Service_A业务和消息同时写入库成功等待Service_B消费消息已消费状态则表示Service_B已经成功消费了消息 在消息服务方案中写业务和创建消息不在同一个事务中所以需要再加一个状态发送中 待发送状态则表示刚创建消息此时Service_A还没有写库发送中状态则表示Service_A已经写库成功等待Service_B消费消息已消费状态则表示Service_B已经成功消费了消息 时序图 plantuml startuml https://plantuml.com/sequence-diagramautonumberdatabase DB_A participant Service_A participant Service_Msg database DB_Msg queue Queue participant Service_B database DB_Bgroup 创建消息Service_A - Service_Msg: 创建消息note left: 生成业务idService_Msg - DB_Msg: 创建消息note left: 消息状态待发送Service_A - Service_Msg: 返回消息ID endgroup Service_A本地事务DB_A - Service_A: 写本地业务数据 endService_A - Service_Msg: 发送消息 note left: 携带消息ID Service_Msg - DB_Msg: 更新消息状态 note right: 消息状态发送中 Service_Msg - Queue: 发送消息 Queue - Service_B: 消费消息Service_B - Service_B: 幂等判断group Service_B本地事务Service_B - DB_B: 写本地业务数据 endgroup 更新消息状态Service_Msg - Service_B: 更新消息状态Service_Msg - DB_Msg: 更新消息状态note right: 消息状态已消费 endloop 定时任务Service_Msg - DB_Msg: 查询状态为发送中的消息Service_Msg - Queue: 重新投递 endenduml
http://www.dnsts.com.cn/news/94105.html

相关文章:

  • 餐饮营销型网站案例分析网站开发现在用什么语言
  • 鲁谷网站建设建筑工程网上办事大厅
  • 那个相亲网站做的比较好平台推广策划案
  • 免费网站建站百度云网站如何paypal支付方式
  • 常平哪里有招计算机网站开发的wordpress电影主题博客
  • 个人网站怎么建设步骤怎么做网站不用备案
  • 可信网站图标 费流量广东平台网站建设哪家好
  • 德州市建设街小学网站首页深圳定制纸箱
  • 网站首页背景图片网站建立价格
  • 甘肃省建设银行网站网页游戏开服表怎么关闭
  • 网站 建设 计划书外贸网站搭建公司
  • 广东网站备案时间360建筑网证书
  • 苏州吴江做网站公司中国室内设计公司排名前十强
  • 北京网站建设价格便宜北京信息发布平台
  • 创恒建设有限公司网站公司网站建设企划书
  • 厦门唯一官方网站广告软文小故事200字
  • 德兴网站建设关键词优化排名软件
  • 网站底部的备案号动态设计参考网站
  • 南昌企业制作网站设计建什么网站做cpa
  • 免费外贸建站平台网站设计经典案例欣赏
  • 机关网站建设 方案upscale wordpress
  • 济南网站建设排名常用的html编辑器有哪些
  • 怎么建立自己的网站平台杭州手机网站制作公司哪家好
  • 昌邑建设网站华为荣耀商店
  • funpinpin建站平台网站忧化教程
  • 搜狗网站seo秦皇岛建设路小学网站
  • 做效果图挣钱的网站网站开发用户需求分析
  • 传奇广告网站怎么做免费注册域名哪里有
  • 哪个网站可以做试卷重庆专业做网站公司
  • 高大上的企业网站烟台网站建设价格