当前位置: 首页 > 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…...

力扣2762. 不间断子数组

力扣2762. 不间断子数组 multiset法 multiset&#xff1a;元素从小到大排序 begin()返回头指针 (最小)rbegin()返回尾指针 (最大) class Solution {public:long long continuousSubarrays(vector<int>& nums) {int n nums.size();long long res 0;multiset<…...

OpenCV学习(4.8) 图像金字塔

1.目的 在这一章当中&#xff0c; 我们将了解图像金字塔。我们将使用图像金字塔创建一个新的水果&#xff0c;“Orapple”我们将看到这些功能&#xff1a; cv.pyrUp&#xff08;&#xff09; &#xff0c; cv.pyrDown&#xff08;&#xff09; 在通常情况下我们使用大小恒定…...

【TB作品】msp430f5529单片机,dht22,温湿度传感器,OLED显示屏

使用DHT22温湿度传感器和OLED显示屏的单片机项目 博客名称 利用MSP430单片机读取DHT22并显示温湿度 作品功能 本项目利用MSP430单片机读取DHT22温湿度传感器的数据&#xff0c;并将温湿度信息显示在OLED显示屏上。通过这个项目&#xff0c;您可以学习如何使用单片机与传感器…...

Kotlin 异常处理

文章目录 什么是异常抛出异常通过异常信息解决异常捕获异常 什么是异常 我们在运行程序时&#xff0c;如果代码出现了语法问题或逻辑问题&#xff0c;会导致程序编译失败或退出&#xff0c;称为异常。运行结果会给出一个一长串的红色字&#xff0c;通常会给出异常信息&#xf…...

nltk下载报错

捣鼓voice_clone时报错&#xff1a; 报错信息&#xff1a; mport nltk nltk.download(‘cmudict’)For more information see: https://www.nltk.org/data.htmlAttempted to load tokenizers/punkt/PY3/english.pickleSearched in: - ‘/home/zhangshuai/nltk_data’ - ‘/hom…...

Vulnhub-DC5

靶机IP:192.168.20.139 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫下端口及版本 dirsearch扫下目录 LinuxphpNginx 环境 我们再去看前端界面&#xff0c;发现在contact界面有能提交的地方&#xff0c;但是经过测试不…...

pytorch 笔记:pytorch 优化内容(更新中)

1 Tensor创建类 1.1 直接创建Tensor&#xff0c;而不是从Python或Numpy中转换 不要使用原生Python或NumPy创建数据&#xff0c;然后将其转换为torch.Tensor直接用torch.Tensor创建或者直接&#xff1a;torch.empty(), torch.zeros(), torch.full(), torch.ones(), torch.…...

vue 创建一个新项目 以及 手动配置选项

【Vue】3.0 项目创建 自定义配置_vue3.0-CSDN博客...

c#快速获取超大文件夹文件名

c#快速获取超大文件夹文件名 枚举集合速度快&#xff1a;(10万个文件) //by txwtech IEnumerable<string> files2 Directory.EnumerateFiles("d:\aa", "*.xml", SearchOption.TopDirectoryOnly);//过滤指定查询xml文件 慢&#xff1a; var fi…...

华为OD技术面试-最小异或-2024手撕代码真题

题目:最小异或 给你两个正整数 num1 和 num2 ,找出满足下述条件的正整数 x : x 的置位数和 num2 相同,且 x XOR num1 的值 最小 注意 XOR 是按位异或运算。 返回整数 x 。题目保证,对于生成的测试用例, x 是 唯一确定 的。 整数的 置位数 是其二进制表示中 1 的数目。 示…...

企业搭建网站的必要性/广州seo优化推广

安静的早餐Scala学习手册(Learning Scala)第二章1、值与变量定义2、命名3、数据类型及其转换(toType)4、字符串和内插5、元组1、值与变量定义值的定义值&#xff0c;即为常量&#xff0c;不可变&#xff0c;基本语法定义&#xff1a;val : ​创建一个名为a&#xff0c;类型为I…...

wordpress上传ftp/谷歌seo实战教程

经过一年的不健康的作息和饮食导致在体检的时候有轻度脂肪肝,脂肪肝危害还是挺大的,这个只是前兆,没准以后会出个啥病啥的,所以还是养成一个好的饮食生活习惯还是挺重要的。 一、人一天正常一日三餐大概摄入多少卡路里&#xff1f; (1) 饭量不同&#xff0c;吃的东西不同&#…...

cnnic网站/关键词优化排名的步骤

GP2.10 Review the activities,status,and results of XXX process with highter level management and resolve issues. 中文大意是&#xff1a;高级别的领导检查该过程的活动、状态和结果&#xff0c;并解决问题。 CMM中的要求是高层领导(hight management)&#xff0c;而CMM…...

网站开发技术经理职责/免费网络推广工具

笔记内容 插件 Markdown Mode for Emacs 用于在 Emacs 中编写 Markdonn 文档并预览&#xff0c;以及进行其他 Markdown 操作。 该笔记将整理&#xff1a;与该插件有关的内容。 插件信息 Version: 20201015.1327 GitHub: https://github.com/jrblevin/markdown-mode 安装插件 安…...

建设网站的相关费用/百度打广告收费表

dd单链据结构定义 typedef struct LNode {int data;struct LNode *next; }LNode,*LinkList; 单链表的初始化 void InitList(LinkList&L) {Lnew LNode;;L->nextNULL; } 单链表的插入 1.把结点插入链表最后一位&#xff0c;如果想插入特定位置只需要改变while条件 v…...

wordpress跳过短代码/广州市口碑seo推广外包

有时需引入外部字体&#xff0c;字体文件过大&#xff0c;页面加载很慢&#xff0c;故使用此方法压缩。 安装 npm install font-spider -g 使用 新建【font】目录&#xff0c;html文件&#xff0c;将项目里需要压缩的文字写入html&#xff1b;将字体文件放入目录&#xff1…...