微服务架构-正向治理与治理效果

目录

一、正向治理

1.1 概述

1.2 效率治理

1.2.1 概述

1.2.2 基于流量录制和回放的测试

1.2.3 基于仿真环境的测试

1.3 稳定性治理

1.3.1 概述

1.3.2 稳定性治理模型

1.3.3 基于容器化的稳定性治理

1.3.3.1 概述

1.3.3.2 测试

1.3.3.3 部署

1.3.3.3.1 概述

1.3.3.3.2 容器网络和物理机网络打通

1.3.3.3.3 认清物理机和容器环境上的差异

1.3.3.3.4 容器资源隔离

1.3.3.3.5 故障容灾

二、治理效果

2.1 概述

2.2 配置化

2.3 基于A/B测试的业务效果评估体系


一、正向治理

1.1 概述

正向治理是通过相应的治理手段,解决微服务改造后带来的一系列问题,接下来围绕效率、稳定性和效果方面的治理工作展开讨论。

1.2 效率治理

1.2.1 概述

效率包括的范围很广,具体包括开发效率、测试效率、运维效率等。开发效率一般通过采用微服务框架的方式解决,运维效率放到稳定性治理里面讨论,接下来主要讨论测试效率相关的治理,包括测试环境构造,以及测试数据的获取。

1.2.2 基于流量录制和回放的测试

微服务化架构下,微服务自身依赖的第三方服务、数据越来越多,给传统的测试方式带来很多困难,如被依赖的线下服务不稳定;服务无法提供期望的响应数据;缺少测试场景构造标准等。针对这些问题,一般能想到的思路是提高测试环境稳定性、自己构造测试数据和测试场景等方式,提高测试的确定性和有效性,但这些方式不能从根本上解决问题。比如,服务不稳定的情况仍然无法避免,通过更改代码注入对象等方式不仅繁杂而且非常容易出错,并且没有一定的依据,构造的测试场景不充分,心里没底。

上述问题导致了代码质量下降、自测/测试困难,在业务越来越复杂,依赖服务越来越多的大环境下,这些问题变得越加严重,到了必须要升级解决方案的地步。

针对上述微服务测试的不足,尝试推出了流量录制和回放解决方案,通过一定的方式将线上的真实流量录制下来,在线下进行回放。线下测试时,基于线上的回放流量可以灵活地测试服务的各自功能,还可以基于回放流量进行编辑修改,对服务依赖的第三方请求进行mock和定制,使代码开发变得简单方便,且可随改随测,解决RD开发不便、自测流程过长的问题。

录制的流量要包含服务的请求/返回流量,以及能关联上的与其对应的第三方交互流量。如果仅有服务的请求/返回流量,则只能被应用在查询类只读系统中,应用范围受限;如果第三方交互不能和请求正确关联,则无法正确应用这些流量。

要解决流量的关联难题,一个解决方案是将流量整流,使其串行化。将线上原本服务并行流量的一台机器,控制其接收到的流量,将其服务的流量降低至串行,且流量之间间隔一定的时间(以便给异步第三方请求预留时间),那么这些流量的请求/响应和其第三方交互流量就被自动地关联了起来。

还有一个难题是如何将请求和第三方交互流量关联起来,这块其实没有一个特别通用的解决方案,可以基于分布式跟踪技术将请求和对第三方系统调用的流量关联起来。但这种方式难点是并非所有第三方交互流量都带有请求跟踪标识。还有一种思路是通过拦截语言层面的系统调用,将请求和对第三方系统的调用进行关联。

1.2.3 基于仿真环境的测试

作为在线服务,为了满足灰度发布、测试等多维度的需求,一般需要支持灵活的分流策略,将流量调度到不同的环境中。

为了支持精细的灰度发布策略,需要根据一定的规则将线上流量分流到小流量集群,为了支持使用真实流量进行高仿真测试,还需要根据策略规则将一定流量引到仿真环境中。小流量分流的特点是流量发往小流量集群后,不再进行任何处理,直接等待小流量集群的返回结果,然后将该结果转发给调用侧。仿真环境分流的特点是发往仿真环境的流量只是一份“影子”流量,相当于Oneway请求(不需要应答消息),对业务处理过程没有任何影响,还是和没有仿真环境的情况下一样处理。

仿真环境支持可以在服务框架层面进行,为了实现基于请求内容的路由和转发,框架充当了一个Proxy的角色,将请求解析后再发包发送给下游环境。

基于仿真流量的特点,为了不对业务产生影响,发送到下游仿真环境的超时时间可以设置得非常小,即使有一些流量超时也没有关系,同时为了在自动生成的代码框架下实现仿真环境处理后的Oneway效果,可以自定义一个传输层,这个传输层的具体实现是什么都不进行处理,直接丢弃即可。

1.3 稳定性治理

1.3.1 概述

稳定性治理是服务治理的重中之重,下面重点讨论稳定性治理的体系和模型。

1.3.2 稳定性治理模型

稳定性治理是一个对故障进行管理的过程。从故障管理的视角看,可以分为故障预防、故障发现、故障定位、故障止损以及故障恢复5个阶段,稳定性建设的各项工作融入故障模型的各个阶段。如果将稳定性故障和火灾进行类比,稳定性工作模型实际上是一个防火–放火–灭火模型。所谓防火,就是通过各种机制和措施,提前排查出系统中各种可能的隐患,防止灾难的发生;灭火是指实际发生了问题,就要最大限度地进行止损,减少灾难的影响面,尽快恢复业务的正常运行;放火类似于消防演习,定期模拟灾难的发生,并制定相应的疏散通道,通过演习可以排查出当前仍然有哪些待改进的地方。比如,消防意识不够,疏散通道设计不太合理等,通过不断的周期性演习和针对性改进,可以提高大家在面对真实火灾的应对速度和处理能力,可以对实际的灾难的控制有很好的参考价值,演习尽可能有一定的逼真度,如果只是例行的走个过场,不会收到太大的效果。

从各阶段的抓手上看,故障预防包括稳定性设计、风险度量分析体系以及变更管理这几个环节,分别从服务设计、风险检测和分析及变更拦截这几个维度,在研发生命周期的不同环节对故障进行多级拦截。服务上线后需要有相应的机制能够检测当前系统是否正常工作,当系统不正常时有相应的控制措施,因此从故障发现、定位和止损上,需要有一连串的基础设施支持,保证系统可见、故障可发现可定位、可控制。

1.3.3 基于容器化的稳定性治理

1.3.3.1 概述

微服务在开发、测试、运维、容量成本等方面带来了诸多难题,容器技术的使用可以很大程度上缓解微服务架构所带来的问题。将容器技术和微服务架构结合,从开发、测试到上线,实现了“一次编写,到处运行”。

容器的最有革命性的创新是镜像技术,它将应用程序、基础库和环境等封装在一起,作为微服务封装和运行的基石。轻量级的镜像技术作为微服务的交付方式,从如下几个方面极大地影响和改变了微服务生态体系。

1.3.3.2 测试

物理机环境下,如果直接基于裸机,那么环境搭建的开销很大,并且很难保证不同环境的一致性。虚拟机环境下,虽然也引入了镜像,但镜像特别大,一般都是几十GB,甚至上百GB,很难快速创建和迁移。容器环境下,由于镜像比较轻量,每次变更后,可以快速创建本次变更对应的镜像,同时可以基于本次镜像快速创建多个完全相同的测试环境,容器镜像封装了所有运行应用程序所必需的相关细节,比如应用依赖以及操作系统。这就使得镜像从一个环境移植到另外一个环境更加灵活,有力地支撑了微服务快速迭代场景下的测试。

1.3.3.3 部署
1.3.3.3.1 概述

微服务架构下微服务个数比较多,并且每个服务的变更非常频繁,运维的工作量很大,借助容器镜像,可以把环境交付提前。每个研发多付出5%的工作量,换取运维200%的工作量,可以加速微服务变更的快速部署和落地。

微服务架构下流量变化很快,遇到突发大流量时,如果系统具备快速便捷的扩容/缩容能力,可以极大地提高系统的稳定性和灵活性。我们可以借助容器技术,快速构建完善的扩缩容基础设施,流量峰值时快速扩容,流量低峰时缩容。

微服务的云化架构,在运维层面和之前会有很大的差异,基础设施层面,比如部署系统、配置系统、监控系统等都需要针对上云进行相应的适配调整,服务云化过程中也会遇到很多特有的问题,下面会梳理下之前微服务云化过程中实际过程中遇到的一些典型问题,以便给后续的微服务云化落地一些帮助。

1.3.3.3.2 容器网络和物理机网络打通

之前的微服务云化迁移是直接从物理机迁移到Kubernetes容器集群,迁移一般是一个服务一个服务逐渐迁移的,如果Kubernetes集群和原来物理机集群通信上完全不互通,会使服务迁移前后在部署上有很多的改动。比如以服务间调用来说,之前是集群内部的调用,迁移期间需要修改为以Kubernetes Ingress的方式进行调用,但整个物理机集群都被迁移到Kubernetes集群后,在Kubernetes网络中,又需要改回到集群内部调用的方式。从终态看,整个迁移过程中做了很多无用的工作。

为了减少Kubernetes容器化改造过程中频繁的调用方式改动,我们在迁移过程中遵循一个重要的原则,迁移前后网络互通,这样迁移过程中调用方式不需要有任何变化,迁移过程中业务完全不需要感知。

1.3.3.3.3 认清物理机和容器环境上的差异

云化架构下,虽然使用上和之前没有明显的差异,但毕竟是两个完全不同的环境,在物理机上验证完全没有问题,不代表容器环境下也可以正常工作。之前遇到过一个问题,服务之前运行完全正常,迁移到云化架构下一段时间后,由于日志被错误地输出到了内存型文件系统中,内存被一点点耗尽,由于没有完善的线上监控,引发线上故障;导致问题的具体原因是物理机日志组件使用了字符设备,容器环境下虽然在宿主机下也配置了对应的字符设备,但并未为宿主机下的容器单独创建,因此云化迁移过程中,应该对容器和物理机环境上的一些差异有着清醒的认识。

1.3.3.3.4 容器资源隔离

容器环境下,各种服务混部,当某个容器消耗的资源超过一定限度时,如果没有完善的资源隔离机制,就会导致同一宿主机上的其他服务异常。精细化的资源隔离技术是容器技术大规模推广的一个必要前提。

1.3.3.3.5 故障容灾

服务上云毕竟是个全新的环境,可能会遇到各种类型的问题,特别是网络层面,从硬件网络过渡到软件定义网络(SDN),虽然灵活性比之前大大加强,但SDN网络在成熟度和稳定性上比之前的硬件网络还有不小的差异。之前遇到过一次SDN网络异常,导致整个机房的容器服务不可用,幸好当时有多机房流量切换预案,才没有导致更大的问题。因此服务上云前,需要提前想到有哪些可能的故障类型,针对每种故障设置相应的容灾预案。

二、治理效果

2.1 概述

微服务架构的初衷主要是建立一个方便快速迭代和演进的架构,帮助业务实现方案快速落地和试错,因此在微服务研发流程上,需要重点关注两个事情:如何支撑业务特性快速落地,如何建立业务效果的闭环反馈机制。

2.2 配置化

工程技术同学从接触编程开始就同时认识了配置,一个工程有线上/线下环境、服务地址、各种功能参数等配置。我认为,配置本质上是一个软件对外提供的开放的能力,能够在不改动软件逻辑的情况下按照用户的设置执行特定的流程和功能。业务系统虽然从功能特性上看迭代很快,但一旦业务模式确定后主流程是基本不变的,变的是针对各种业务场景的一些定制。可以把业务系统比作一个软件,如何能够将一些业务通用功能抽离出来,把差异做成配置,以配置化的方式支持可能的扩展和定制,就可以大大加快业务迭代速度。

为了实现配置化,首先需要有一个通用的配置平台,在配置平台UI上进行配置信息的修改和查询;同时需要有多语言的配置SDK库,支持获取最新的配置信息。在配置发生变更时,配置平台能够把变更后的配置信息推送到业务服务所在的集群上,供多语言的配置SDK使用。配置平台的实现还是很复杂的,如果对具体的实现原理和实现细节感兴趣,可以研究下携程开源的分布式配置中心项目,地址:https://github.com/ctripcorp/apollo,适用于微服务配置管理场景,完成度和成熟度比较高。

配置化的本质是对业务进行建模,把每个对象模型化,对系统进行抽象和建模,是代码的另外一种写法,需要业务架构层面对业务逻辑进行合理的抽象,识别出常见的业务变化点,针对变化进行建模。

2.3 基于A/B测试的业务效果评估体系

在互联网企业中,在线实验特别是A/B测试在产品创新和企业发展的过程中扮演着非常重要的角色。我们通常需要利用A/B测试来验证一些新特性或者调整,并以此来支撑我们在产品开发过程的决策,这样才能真正做到数据驱动的业务决策,因此基于A/B测试建立一套完善的业务效果评估体系,可以对每个变更的效果都可以度量。

效果评估需要先建立完善的业务指标体系,比如业务的一级和二级指标有哪些,有了具体的业务指标,效果评估才有基础和依据。其次,需要有一个针对指标的效果评估平台,真正做到业务效果可视化、可量化、可优化。

好了,本次内容就分享到这,欢迎大家关注《微服务架构》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

matlab 计算三维空间点到直线的距离

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 直线的点向式方程为: x − x 0 m = y

IEDA 默认集成依赖概述

IEDA 默认集成依赖概述 目录概述需求: 设计思路实现思路分析 1.Developer Tools:GraalVM Native supportGraphQL DGs Code GenerationSpring Boot DevToolsLombokSpring Configuration ProcessorDocker Compose supportSpring Modulith 2.WebWebSpring WebSpring Re…

应用层——HTTP协议(自己实现一个http协议)——客户端(浏览器)的请求做反序列化和请求分析,然后创建http向响应结构

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 之前的网络计算机是我们自定义的协议:传输的数据最终是什么样的结…

【NetTopologySuite类库】C#生成带约束(线、面)的Delaunay三角网

介绍 API地址:https://nettopologysuite.github.io/NetTopologySuite/api/NetTopologySuite.Triangulate.ConformingDelaunayTriangulationBuilder.html#NetTopologySuite_Triangulate_ConformingDelaunayTriangulationBuilder_Constraints 约束为线 效果图 红色…

基于SSM+Jsp的高校信息资源共享平台

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

海康威视综合安防管理平台 多处 FastJson反序列化RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 由于…

【Redis】 Redis 集成到 Spring Boot上面

文章目录 🍃前言🎄Spring Boot连接redis客户端🚩项目的创建🚩配置端⼝转发🚩配置 redis 服务地址🚩更改 Redis 配置文件🚩使用 StringRedisTemplate 类操作 🎍Spring Boot操作Redis客…

JAVA网络编程,反射及注解知识总结

文章目录 网络编程软件架构三要素IP端口号协议UDP协议发送数据接收数据三种通信方式 TCP协议客户端服务器端三次握手四次挥手 反射获取字节码文件获取构造方法获取成员变量获取成员方法反射的作用 动态代理注解作用格式使用位置注解的原理常见注解元注解自定义注解解析注解 网络…

安装windows11系统跳过微软账号登录,使用本地账号登录方法

在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的ShiftF10按键(部分电脑是FnShiftF10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代码oobe\bypassnro.cmd然后回车…

[AI Google] 双子座模型家族迎来新突破:更快的模型、更长的上下文、AI代理等更多功能

Google发布了Gemini模型家族的更新,包括新的1.5 Flash模型,该模型旨在提高速度和效率,以及Project Astra,这是对未来AI助手愿景的展示。1.5 Flash是专为大规模高频任务优化的轻量级模型,具有突破性的长上下文窗口。同时…

积累常用css

1、封面文字,垂直居中,可以两列并排 font-size: 20px;font-weight: 600;color: #333;line-height: 20px;display: block;word-wrap: break-word;writing-mode: vertical-lr;height: 160px;margin: 0 auto; 2、宽border效果 .dashed-box { margin: 80px…

超详解——识别None——小白篇

目录 1. 内建类型的布尔值 2. 对象身份的比较 3. 对象类型比较 4. 类型工厂函数 5. Python不支持的类型 总结: 1. 内建类型的布尔值 在Python中,布尔值的计算遵循如下规则: None、False、空序列(如空列表 [],空…

webapi跨越问题

由于浏览器存在同源策略,为了防止 钓鱼问题,浏览器直接请求才不会有跨越的问题 浏览器要求JavaScript或Cookie只能访问同域下的内容 浏览器也是一个应用程序,有很多限制,不能访问和使用电脑信息(获取cpu、硬盘等&#…

YOLOv5车流量监测系统研究

一. YOLOv5算法详解 YOLOv5网络架构 上图展示了YOLOv5目标检测算法的整体框图。对于一个目标检测算法而言,我们通常可以将其划分为4个通用的模块,具体包括:输入端、基准网络、Neck网络与Head输出端,对应于上图中的4个红色模块。Y…

java 类加载器及双亲委派机制

1、 有哪些类加载器 还有自定义类加载器。最上面的为父加载器,加载类的路径是不一样的 2、 什么是双亲委派机制: 1. 加载时,先去找父类,父类无法加载时,在由儿子加载 3、 为什么用双亲委派: 沙箱安全&…

旧衣回收小程序开发,轻松回收旧衣物

随着环保理念的增强,回收市场得到了快速发展,吸引了不少年轻人进入到市场中创业。除了传统的废品回收外,旧衣回收也受到了大众的重视,市场规模迅速扩大,大众浪费的衣物也获得了归处。 目前旧衣回收的方式主要是线上与…

D-Day 上海站回顾丨以科技赋能量化机构业务

5月31日下午,DolphinDB 携手光大证券,在上海成功举办 D-Day 行业交流会。三十余位来自私募机构的核心策略研发、量化交易员、数据分析专家们齐聚现场,深入交流量化投研交易过程中的经验、挑战及解决方案。 DolphinDB 赋能机构业务平台 来自光…

标准发布实施 |《新能源电池工业废水处理技术指南磷酸铁锂电池》

T/ACEF 130-2024《新能源电池工业废水处理技术指南磷酸铁锂电池》欢迎各单位引用执行!有课题也可联合立项! 发布日期:2024年02月04日 实施日期:2024年03月01日 主要起草人:刘愿军、孙冬、丁炜鹏、何小芬…

网络基础_02

1.ARP协议 地址解析协议(Address Resolution Protocol) 已知对方的三层ip地址,需要二层mac地址 当一台设备(请求方)需要知道某个 IP 地址对应的 MAC 地址时,会使用 ARP封装一个数据帧。这台设备的网络层以…