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

在自己的电脑做网站空间seo推广代理

在自己的电脑做网站空间,seo推广代理,做熟食的网站美食网站,为什么用dw做的网站打不开文章目录 1. 引言2. 为什么要“怀疑下游”3. 三大类下游依赖及应对方案3.1 对其他微服务的依赖3.1.1 分布式事务简易补偿方案3.2 对数据库的依赖3.3 对消息中间件的依赖 4. 分布式事务实战案例5. 小结 1. 引言 在 架构思维:通用架构模式_从设计到代码构建稳如磐石的…

文章目录

  • 1. 引言
  • 2. 为什么要“怀疑下游”
  • 3. 三大类下游依赖及应对方案
    • 3.1 对其他微服务的依赖
    • 3.1.1 分布式事务简易补偿方案
    • 3.2 对数据库的依赖
    • 3.3 对消息中间件的依赖
  • 4. 分布式事务实战案例
  • 5. 小结

在这里插入图片描述


1. 引言


架构思维:通用架构模式_从设计到代码构建稳如磐石的系统和架构思维:通用架构模式_稳如老狗的SDK设计最佳实践中,我们从微服务对外接口和消息消费,以及服务自身编码规范,分别阐述了“防备上游、做好自己”的两大准则落地思路。

接下来我们将继续深入,聊一聊为什么要“怀疑下游”,并展示落地手段;同时,针对拆分后带来的分布式事务与异步消息问题,提供一个无需 TCC/Saga 框架的简单实战方案。


2. 为什么要“怀疑下游”

定义“怀疑下游”:在设计之初,就假设所有下游都会偶发故障,提前为各种失效场景设计补偿和降级措施。

在这里插入图片描述

如图所示,微服务往往依赖众多其他服务、数据库、缓存和消息中间件,这些下游系统可能因代码 Bug、网络抖动、磁盘故障或运维失误而不可用。一旦下游依赖不可用,就会导致本服务接口可用率下降,甚至整体宕机。

3. 三大类下游依赖及应对方案

下游依赖大致分为:RPC 服务、数据库和消息中间件。

3.1 对其他微服务的依赖

在这里插入图片描述

在提单时,订单模块需要调用库存模块进行商品的扣减,以便判断用户购买的商品是否有货。订单调用库存的扣减接口会有以下几种情况发生。

  1. 调用库存接口返回成功且库存数量充足,订单模块便将此用户订单保存至数据库,并返回用户下单成功消息。
  1. 调用库存接口返回成功且库存数量充足,但订单模块将此用户订单保存至数据库时出错并进行数据库回滚,同时订单模块返回用户下单失败。
  1. 调用库存接口超时,订单模块判断此次调用库存接口失败,返回用户下单失败。

  • 高可用治理:依赖后置、并行化调用、超时与重试、服务降级等手段,同样适用于读/写场景。具体请移步 架构思维:构建随时可写的高可用写服务_链路依赖管控

  • 分布式事务:拆单后的下单场景中,订单和库存是两个独立微服务。调用库存扣减接口后,本地 DB 可能因异常回滚,造成库存与订单状态不一致。


3.1.1 分布式事务简易补偿方案

在第 2 点里,

  1. 调用库存接口返回成功且库存数量充足,但订单模块将此用户订单保存至数据库时出错并进行数据库回滚,同时订单模块返回用户下单失败。

因为订单模块本地的数据库事务回滚了,但调用库存接口产生的已扣减的商品数量并没有回滚,此时就会导致库存数据少于实际的数据。

有一些基于 TCC 和 Saga 的成熟基础框架可以解决上述分布式事务问题,但理解和接入成本较高。此处介绍一种本质上和 TCC、Saga 理论相类似,但无须借助第三方框架的简单、易落地的解决方案。理解此方案也有助于理解 TCC 和 Saga 的思想

“本地任务表+异步 Worker”架构

在这里插入图片描述

  1. 预写任务:接单后,先在任务表写入订单号、商品、数量、用户等信息。
  2. 调用库存扣减
    • 成功且本地写单事务成功:标记任务“已成功”;
    • 接口失败或超时:标记任务“待回滚”,同步返回下单失败;
    • 本地写单失败:任务保留“初始化”,直接返回失败。
  3. 异步补偿:Worker 定时扫描任务表,对“待回滚”且超时未更新的任务,调用库存返还接口,保证最终一致性。

通过上述方式,能够将各种失败场景里漏返回的商品数量进行返还,保证库存数量的最终一致性,完成分布式事务。上述保障数据最终一致性主要是依赖任务表和订单表在同一个数据库里,可以通过本地事务来保障订单表数据写入成功后,任务表里的任务状态绝对能够更新为“已成功”。而当提单失败后,任务表的状态为“非成功”状态,再通过类似 TCC 和 Saga 的异步补偿性 Worker 来进行业务回滚即可保证最终最一致性。

在发起分布式事务的业务模块的数据库里创建补偿性任务,基本上可以复用在其他存在分布式事务的场景里。如果不希望引入更加复杂的 TCC 和 Saga 框架,可以尝试利用此方式来解决架构微服务化之后带来的分布式事务的问题。


3.2 对数据库的依赖

  • 原则 1:主从库跨机房部署,测试环境也需主从复制,以防磁盘损坏带来巨大恢复成本。
  • 原则 2:SQL 尽量简单清晰,避免多层嵌套语句难以调试。
  • 原则 3:业务迭代快时,谨慎使用外键,防止隐藏级联风险与变更疏漏。
  • 原则 4:避免超长 varchar 存 JSON;并发更新时容易丢失修改,若需存复杂结构,可考虑拆表或并发锁。

3.3 对消息中间件的依赖

  • 原则 1:先写库/缓存,再发送消息,确保消费方反查时数据可见。
  • 原则 2:消息携带版本号或高精度时间戳,支持乱序消费时判断先后。
  • 原则 3:消息尽量全量,减少消费方反查接口带来的耦合与延迟。
  • 原则 4:标记字段变更标识,避免无效通知引发误执行。

4. 分布式事务实战案例

结合第 3.1 节所述,示例流程:

用户 订单服务 任务表 库存服务 异步Worker 下单请求 写初始化任务 调用扣减库存 标记已成功 下单成功 保留初始化或标记待回滚 下单失败 alt [接口成功 && 本地写单成功] [接口失败/超时 || 本地写单失败] 定时扫描任务表 查待回滚任务 异步返还库存 标记补偿完成 用户 订单服务 任务表 库存服务 异步Worker

5. 小结

我们围绕“怀疑下游”原则,介绍了针对 RPC 服务、数据库和消息中间件的治理要点;并通过“本地任务表+异步补偿”方案,演示了无需框架的分布式事务落地路径。 希望能提供一些帮助和思路。

在这里插入图片描述

http://www.dtcms.com/wzjs/180079.html

相关文章:

  • 手机网站建设制作教程视频百度首页排名优化平台
  • 邯郸建设网站精准引流的网络推广
  • 昆明外贸网站设计服务商电商网站建设 网站定制开发
  • 网站独立开发360渠道推广系统
  • 东莞专业微网站建设推广简述网站推广的意义和方法
  • wordpress绑定域名插件贵阳seo网站推广
  • 2003服务器怎么挂网站seo五大经验分享
  • wordpress 前台上传图片北京seo结算
  • b2b网站代表及网站网址是什么郑州seo优化
  • 用旧技术做网站能过毕设么知乎爱战网关键词挖掘
  • 如何在百度上做网站南昌seo数据监控
  • html做网站的代码新东方烹饪学校学费价目表
  • 猪八戒网做动漫弹幕网站网络推广网站排名
  • 免费网站自动优化软件今日头条新闻下载安装
  • 论坛做网站好吗微信crm客户管理系统
  • 深圳代做网站后台搜索
  • b2b交易网站有哪些哈尔滨网站推广
  • 网站建设学多久长春seo排名收费
  • 做网站开发北京seo地址
  • 如何做高端网站seo教程排名第一
  • 南宁seo域名关键词快速排名seo怎么优化
  • php多平台商城网站系统建设网络营销员岗位的职责与要求
  • wordpress关健词武汉seo认可搜点网络
  • 淘客网站建设怎么找百度客服
  • 优质的营销网站建设网站快速排名优化价格
  • 有模板如何做网站内部搜索引擎优化
  • 企业网站搜索引擎优化方案百度代发排名
  • 网站推广方式和手段网站推广方案模板
  • php网页设计作业代码搜狗整站优化
  • 在国内做跨境电商怎么上外国网站百度风云榜游戏排行榜