基于主链路规划策略实现微服务升级改造

原创作者:田超凡(程序员田宝宝)
版权所有,引用请注明原作者,严禁复制转载

++最近项目上架构升级改造比较忙,更新频率放缓,敬请谅解!++

主链路规划基本概念

主链路指的就是保证业务可用性的核心链路,那什么样的业务场景才能够入围核心链路呢?

如果我们拿出一个复杂的业务系统,把其中所有的业务场景铺开来,评选出哪些场景是"核心链路",再按重要程度排个序,一时还真不知道如何下手。

如果能有一套易用的理论模型,就可以帮助我们在纷繁复杂的业务场景中精准识别那个业务线其中的主链路,通过积累的大量基于DDD改造微服务项目的理论知识,借鉴其他在长期实践中积累的经验,我总结了主链路的4个特征,可以快速准确地把握和梳理、甄别业务线子域的核心链路。这4个特征分别是:

业务强完整性

转化率重要因子

流量端高占比

现金水仓

如果一个业务场景模块具备其中一个特征,它就是该业务子域的主链路服务之一。

主链路四大特征

1 业务强完整性

比如在电商系统下单场景中,用户必须最少经过商品搜索、查看详情和一键下单这三个步骤才能完成一个完整的下单流程,其中任何一个步骤出现故障都无法保证下单链路的"业务强完整性"。

如果某个关键链路是保证业务强完整性的必要环节,那么它应该被选为核心主链路中的一员。反例,在下单场景中,查看商品评论是一个辅助功能,即便出现了故障,也并不会对下单链路的业务强完整性造成明显的影响,所以就应该被排除在主链路之外。

2 转化率重要因子

有一些业务场景,它们并非是保证业务强完整性的必要条件,看似无关紧要,但是对业务转化率有重大影响,这类场景其实也应该纳入主链路规划中。

比如人们在电商平台买东西的时候通常会先看一下商品长什么样子再决定是否下单,大多数电商平台的商品图片都加载自"文件资源服务",如果图片资源服务发生了故障,一定会大幅降低订单转化率。试想网购如果连图片都看不到,没有人敢贸然下单吧,这时必然会影响到下单业务的转化率。

所以,在做主链路规划的时候也要把这类对业务转化率有重要影响的关键链路包含进去。

3 流量端高占比

在主链路规划中我们要参考各个链路和导流端的用户流量分布,将流量占比高的链路划分为主链路的一环。

4 现金水仓

现金水仓是公司业务运转的源动力,比如在电商和新零售系统中,正向现金业务的故障通常会被定级为重大资损事件。因此,我们在做主链路规划的过程中,需要将现金水仓类业务划归到主链路,保护现金流不受影响,通过对现金水仓服务重点实施一系列服务保护策略,考虑各种容灾backup,可以最大限度避免重大资损事件发生的可能性。

恰如其分地应用主链路规划策略

按照程序员的思维,我们总习惯从"功能性"的角度对微服务做切分,比如营销计算就是一个功能,不管用在什么场景,我把所有计算优惠的场景都放到一个微服务里,这个视角其实是比较片面的。当基于DDD领域驱动来对应用场景做进一步拆分的时候,就会发现同一个"功能"在不同场景下的重要性是不一样的,这样就可以更精准的识别主链路服务。

在微服务架构中,主链路规划再好也不能滥用,要活学活用主链路规划的理论,不能生搬硬套,更不要为了主链路而主链路。

如果应用本身并不复杂,也没有多少用户,那么硬生生套用主链路规划把后台服务拆的零零散散,这其实是浪费精力。只有当业务达到一定复杂度和集群规模之后,主链路规划才能发挥它真正的作用。

相关推荐
沐风清扬40 分钟前
领域驱动设计 (DDD) 架构完全解析
微服务
沐风清扬1 小时前
复杂业务系统架构:CQRS 读写分离与 ES/RabbitMQ 基础指南
微服务·架构
ai产品老杨4 小时前
GB28181与RTSP全协议兼容之道:基于Docker与微服务架构的AI视频中台架构解析(附源码交付方案)
docker·微服务·架构
SamDeepThinking15 小时前
中小团队需要一个资源微服务
后端·微服务·架构
不才小强17 小时前
gRPC实战指南:高性能微服务通信框架
微服务·云原生·架构
迷藏4941 天前
# 发散创新:用Locust实现高并发场景下的精准压力测试与性能调优实战在现代微服务架构中,**接口稳定性与响应速度**已成为衡量
java·python·微服务·架构·压力测试
XiYang-DING1 天前
【Java EE】锁策略、锁升级、锁消除和锁粗化
java·redis·java-ee
Bat U1 天前
JavaEE|多线程(六)
java·java-ee
Paxon Zhang1 天前
JavaEE 初阶大师之路之*线程,多线程编程,Thread类,变量捕获,中断线程* 一文全部搞懂!!
java·java-ee
掘根1 天前
【微服务即时通讯】客户端数据中心
qt·微服务·架构