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

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

目录

一、正向治理

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测试建立一套完善的业务效果评估体系,可以对每个变更的效果都可以度量。

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

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

相关文章:

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

目录 一、正向治理 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…...

normalizing flows vs 直方图规定化

normalizing flows名字的由来 The base density P ( z ) P(z) P(z) is usually defined as a multivariate standard normal (i.e., with mean zero and identity covariance). Hence, the effect of each subsequent inverse layer is to gradually move or “flow” the da…...

vite打包优化常用的技巧及思路

面试题:vitevue项目如何进行优化? 什么情况下会去做打包优化?一种是在搭建项目的时候就根据自己的经验把vite相关配置给处理好,另外一种是开发的过程中发现打包出来的静态资源越来越大,导致用户访问的时候资源加载慢&a…...

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例(1)部署一个服务(2)创建HPA对象(3)执行压测 前言…...

台式机ubuntu22.04安装nvidia驱动

总结一个极简易的安装方法 正常安装ubuntu 22.04正常更新软件 sudo apt update sudo apt upgrade -y参考ubuntu官方网站的说明https://ubuntu.com/server/docs/nvidia-drivers-installation#/ # 首先检查系统支持驱动的版本号 sudo ubuntu-drivers list我显示的内容如下&…...

C++ 11 【线程库】【包装器】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:C修炼之路⏪   🚚代码仓库:C高阶🚚   🌹关注我🫵带你学习更多C知识   🔝🔝 目录 前言 一、thread类的简单介绍 get_id…...

可视化数据科学平台在信贷领域应用系列四:决策树策略挖掘

信贷行业的风控策略挖掘是一个综合过程,需要综合考虑风控规则分析结果、效果评估、线上实时监测和业务管理需求等多个方面,以发现和制定有效的信贷风险管理策略。这些策略可能涉及贷款审批标准的调整、贷款利率的制定、贷款额度的设定等,在贷…...

数据查询深分页优化方案

大家好,我是冰河~~ 最近不少小伙伴在实际工作过程中,遇到了单表大数据量分页的问题,问我怎么优化分页查询。其实,这就是典型的深分页问题。今天趁着周末,给大家整理一些在深分页场景的简单处理方案。 一、普通分页查…...

Redis的主从复制

Redis主从复制是 Redis 内置的⼀种数据冗余和备份⽅式,同时也是分发读查询负载的⼀种⽅法。通过主从复制,可以有多个从服务器(Slave )复制⼀个主服务器(Master )的数据。在这个系统中,数据的复制…...

网络安全实战基础——实战工具与攻防环境介绍

一、实战集成工具 1. 虚拟机 VMware Workstation:大家熟知的虚拟机 Virtual Box:开源免费、轻量级 2. Kali Linux 工具集 信息收集 Nmap:免费开放的网络扫描和嗅探包,可探测主机是否在线,扫描主机端口和嗅探网络…...

vue2组件封装实战系列之tag组件

作为本系列的第一篇文章,不会过于的繁杂,并且前期的组件都会是比较简单的基础组件!但是不要忽视这些基础组件,因为纵观elementui、elementplus还是其他的流行组件库,组件库的封装都是套娃式的,很多复杂组件…...

VBA实战(Excel)(4):实用功能整理

1.后台打开Excel 用于查数据,工作中要打开多个表获取数据再关闭的场景,利用此函数可以将excel表格作为后台数据库查询,快速实现客户要求,缺点是运行效率不够高。 Sub openexcel(exl_name As String)If Dir(addr, 16) Empty Then…...

nginx mirror流量镜像详细介绍以及实战示例

nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题,可能希望线上的请求能够同步到测试…...

Android14 WMS-窗口添加流程(二)-Server端

Android14 WMS-窗口添加流程(一)-Client端-CSDN博客 本文接着上文"Android14 WMS-窗口添加流程(一)-Client端"往下讲。也就是WindowManagerService#addWindow流程。 目录 一. WindowManagerService#addWindow 标志1:mPolicy.checkAddPermission 标志…...

【传知代码】DETR[端到端目标检测](论文复现)

前言:想象一下,当自动驾驶汽车行驶在繁忙的街道上,DETR能够实时识别出道路上的行人、车辆、交通标志等目标,并准确预测出它们的位置和轨迹。这对于提高自动驾驶的安全性、减少交通事故具有重要意义。同样,在安防监控、…...

Edge浏览器十大常见问题,一次性解决!

Edge曾被称为最好用的浏览器,拳打Chrome脚踢firefox, 可如今却隐藏着像是播放卡顿、下载缓慢、广告繁多等诸多问题,不知道各位还在用吗? 今天小编收集整理了Edge浏览器十大烦人问题,并提供简单有效的解决办法,让你的E…...

lubuntu / ubuntu 配置静态ip

一、查看原始网络配置信息 1、获取网卡名称 ifconfig 2、查询网关IP route -n 二、编辑配置文件 去/etc/netplan目录找到配置文件,配置文件名一般为01-network-manager-all.yaml sudo vim /etc/netplan/01-network-manager-all.yaml文件打开后内容如下 # This …...

15、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、plot()函数默认格式画图 代码: x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) 2、X轴和Y轴显示范围/axis()函数 代码: x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) axis([0 21 -1.1 1.1])%设置范围 3、网格显示/grid on函数 代码: …...

调试环境搭建(Redis 6.X 版本)

今儿,我们来搭建一个 Redis 调试环境,目标是: 启动 Redis Server ,成功断点调试 Server 的启动过程。使用 redis-cli 启动一个 Client 连接上 Server,并使用 get key 指令,发起一次 key 的读取。 视频可见…...

postgres数据库报错无法写入文件 “base/pgsql_tmp/pgsql_tmp215574.97“: 设备上没有空间

解决思路: base/pgsql_tmp下临时表空间不够 需要新建一个临时表空间指定到根目录之外的其他目录 并且修改默认临时表空间参数 解决方法: select * from pg_settings where name temp_tablespaces;mkdir /home/postgres/tbs_tmp CREATE TABLESPACE tbs_t…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...