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

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

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

主链路规划基本概念

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

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

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

业务强完整性

转化率重要因子

流量端高占比

现金水仓

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

主链路四大特征

1 业务强完整性

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

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

2 转化率重要因子

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

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

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

3 流量端高占比

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

4 现金水仓

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

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

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

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

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

相关推荐
攸攸太上1 小时前
JMeter学习
java·后端·学习·jmeter·微服务
妍妍的宝贝2 小时前
k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
nginx·微服务·kubernetes
架构师吕师傅3 小时前
性能优化实战(三):缓存为王-面向缓存的设计
后端·微服务·架构
王彬泽6 小时前
【微服务】服务注册与发现、分布式配置管理 - Nacos
微服务·服务注册与发现·分布式配置管理
攸攸太上16 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
一直在进步的派大星19 小时前
Docker 从安装到实战
java·运维·docker·微服务·容器
我焦虑的编程日记1 天前
【RabbitMQ】RabbitMQ学习
java·数据库·java-ee
Gogeof1 天前
云原生化 - 基础镜像(简约版)
微服务·云原生·基础镜像
Gogeof1 天前
云原生化 - 旅程(简约版)
微服务·云原生
王彬泽1 天前
【微服务】负载均衡 - LoadBalance(day4)
微服务·负载均衡