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

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

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


主链路规划基本概念

主链路指的就是保证业务可用性的核心链路,那什么样的业务场景才能够入围核心链路呢?
如果我们拿出一个复杂的业务系统,把其中所有的业务场景铺开来,评选出哪些场景是“核心链路”,再按重要程度排个序,一时还真不知道如何下手。
如果能有一套易用的理论模型,就可以帮助我们在纷繁复杂的业务场景中精准识别那个业务线其中的主链路,通过积累的大量基于DDD改造微服务项目的理论知识,借鉴其他在长期实践中积累的经验,我总结了主链路的4个特征,可以快速准确地把握和梳理、甄别业务线子域的核心链路。这4个特征分别是:
业务强完整性
转化率重要因子
流量端高占比
现金水仓
如果一个业务场景模块具备其中一个特征,它就是该业务子域的主链路服务之一。

 

主链路四大特征

1 业务强完整性

比如在电商系统下单场景中,用户必须最少经过商品搜索、查看详情和一键下单这三个步骤才能完成一个完整的下单流程,其中任何一个步骤出现故障都无法保证下单链路的“业务强完整性”。
如果某个关键链路是保证业务强完整性的必要环节,那么它应该被选为核心主链路中的一员。反例,在下单场景中,查看商品评论是一个辅助功能,即便出现了故障,也并不会对下单链路的业务强完整性造成明显的影响,所以就应该被排除在主链路之外。

 

2 转化率重要因子

有一些业务场景,它们并非是保证业务强完整性的必要条件,看似无关紧要,但是对业务转化率有重大影响,这类场景其实也应该纳入主链路规划中。
比如人们在电商平台买东西的时候通常会先看一下商品长什么样子再决定是否下单,大多数电商平台的商品图片都加载自“文件资源服务”,如果图片资源服务发生了故障,一定会大幅降低订单转化率。试想网购如果连图片都看不到,没有人敢贸然下单吧,这时必然会影响到下单业务的转化率。
所以,在做主链路规划的时候也要把这类对业务转化率有重要影响的关键链路包含进去。

 

3 流量端高占比

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

 

4 现金水仓

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

 

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

按照程序员的思维,我们总习惯从“功能性”的角度对微服务做切分,比如营销计算就是一个功能,不管用在什么场景,我把所有计算优惠的场景都放到一个微服务里,这个视角其实是比较片面的。当基于DDD领域驱动来对应用场景做进一步拆分的时候,就会发现同一个“功能”在不同场景下的重要性是不一样的,这样就可以更精准的识别主链路服务。
在微服务架构中,主链路规划再好也不能滥用,要活学活用主链路规划的理论,不能生搬硬套,更不要为了主链路而主链路。
如果应用本身并不复杂,也没有多少用户,那么硬生生套用主链路规划把后台服务拆的零零散散,这其实是浪费精力。只有当业务达到一定复杂度和集群规模之后,主链路规划才能发挥它真正的作用。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

x265中量化函数neon汇编实现分析

// uint32_t quant_c(const int16_t* coef, const int32_t quantScale, int32_t* deltaU, int16_t* qCoef, int qBits, int add, int numCoeff) function x265_quant_neon mov w9, #1 //x9的低32位 1 lsl w9, w9, w4 //w9 1 << qBits…

程序员的心智与成长

程序员的心智与成长 工作思考 有效控制情绪&#xff0c;在沟通时使用适当的表情包以传达善意。无论线上还是线下&#xff0c;都应避免争吵。只有和气相处&#xff0c;我们才能推动工作的进展。在讨论具体问题之前&#xff0c;先进行一些预备性的交流。情绪应放在第一位&#…

C#利用BufferedStream缓冲功能来增加IO操作性能

BufferedStream是C#中用于提供缓冲功能的流之一&#xff0c;它可以增加IO操作的性能&#xff0c;特别是在处理大量小型数据时。以下是BufferedStream的一些重要特性和用法&#xff1a; 1. **构造函数**&#xff1a;BufferedStream有多个重载的构造函数&#xff0c;其中最常用的…

K8s拉取habor镜像

目录 在daemon.json中添加仓库地址 重新加载daemon.json并重启docker 在目标node节点添加域名 验证目标node是否能正常登录镜像仓库 创建pod资源 加载yml文件 验证 查看pod的ip与端口号 在daemon.json中添加仓库地址 此处需要在创建资源对象所在的节点进行添加 路径&a…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 一、简单介绍 二、简单视频浮雕画效果实现原理 三、简单视频浮雕画效果…

HistoricActivityInstance和HistoricProcessInstance区别

1、HistoricActvityInstance和HistoricProcessInstance区别 1.act_hi_actinst表保存每个流程实例processInstance经历的所有活动&#xff0c;即走过的审批节点历程&#xff0c; //查询该"流程定义"下所有流程实例经历的所有流程活动//结果是listList<HistoricAct…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

废品回收小程序推动回收行业的发展趋势

回收在全球都是一个重要行业&#xff0c;它为全球的环保作出了重要贡献。 随着科技的不断发展创新&#xff0c;废品回收的方式也逐渐多样&#xff0c;全新的线上回收小程序也逐渐出现在大众的生活中&#xff0c;在当下的手机时代&#xff0c;线上回收也为大众提供了更加便利的…

35-4 fastjson漏洞复现

环境准备:35-2 fastjson反序列化漏洞介绍 及漏洞环境搭建-CSDN博客 fastjson_tool.jar下载:fastjson_rce_tool: fastjson命令执行自动化利用工具, remote code execute,JNDI服务利用工具 RMI/LDAP (gitee.com) 一、攻击机kali开启nc监听6666端口(或其他端口也行,只要不…

如何使用pgvector为RDS PostgreSQL构建专属ChatBot?

背景 越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前&#xff0c;大语言模型在处理通用问题方面表现较好&#xff0c;但由于训练语料和大模型的生成限制&#xff0c;对于专业知识和时效性方面存在一些局限。在信息时代&…

TCP_NODELAY在延迟敏感的场景下适合设置

结论先行 在TCP发送报文有时比较短&#xff0c;但又对延迟比较敏感的场景&#xff0c;例如&#xff0c;应用控制信令&#xff0c;非常适合启用TCP_NODELAY套接字选项。 现象 发送者在TCP链路上连续发送两条请求&#xff0c;第一条请求立即发送出去了&#xff0c;而第二条要等…

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型&#xff0c;包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…

学习java第四十天

类图中各个类的作用&#xff1a; AliasRegistry&#xff1a;定义对alias的简单增删改等操作 SimpleAliasRegistry&#xff1a;主要使用map作为alias的缓存&#xff0c;并对接口AliasRegistry进行实现 SingletonBeanRegistry&#xff1a;定义对单例的注册及获取 BeanFactory&…

面试: 单例模式

目录 一、饿汉单例&#xff08;实现Serializable&#xff09; 1、破坏单例的三种情况 &#xff08;1&#xff09;反射破坏单例 &#xff08;2&#xff09;反序列化破坏单例 &#xff08;3&#xff09;Unsafe破坏单例 2、饿汉单例&#xff08;利用枚举实现&#xff09; 二…

CSS导读 (元素显示模式)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 三、CSS的元素显示模式 3.1 什么是元素显示模式 3.2 块元素 3.3 行内元素 3.4 行内块元素 3.5 元素…

UNIAPP二维码展示页亮度调至最亮返回恢复进入前亮度

onLoad(params) {let num plus.screen.getBrightness().toString(); //转字符串是要存到stoage中number类型会存储失败plus.storage.setItem("pmld", num)plus.screen.setBrightness(1); //设置屏幕亮度&#xff0c;范围0-1 }onUnload() {let platformuni.getSystem…

创建自定义 通知栏

//创建前台服务方式/*** description* author* time*/ class MyForegroundService : Service() {companion object {private var instance: MyForegroundService? nullfun getInstance(): MyForegroundService? {return instance}}private val NOTIFICATION_ID 1private va…

【保姆级讲解Element UI】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

结合fastapi-users与Langserve轻松实现大语言接口用户认证

在做大模型开发的过程中&#xff0c;相信很多小伙伴都是对大模型开发感兴趣&#xff0c;却对 fastapi 这个框架并不熟悉&#xff0c;但是&#xff0c;实际开发的项目确需要用户鉴权&#xff0c;这时候就会很头疼&#xff0c;查阅官方文档发现&#xff0c;官方虽然有例子&#x…

uni-app的地图定位与距离测算功能的实现

文章目录 一、引言二、uni-app地图定位实现三、距离测算技术四、完整代码五、结论本文着重探讨了如何在uni-app中实现地图定位,以及如何计算当前定位与目标位置之间的距离。 一、引言 在移动应用开发中,地图定位与距离测算是常见的功能需求。无论是出行导航、位置签到,还是…