29、架构-技术方法论之向微服务迈进
治理:理解系统复杂性
微服务架构的引入增加了系统的复杂性,这种复杂性不仅体现在技术层面,还包括组织、管理和运维等各个方面。本节将详细探讨微服务架构的复杂性来源,并介绍一些应对复杂性的治理策略。
1. 什么是治理
治理是指让系统能够符合预期地稳定运行,并能够持续保持在一定的质量水平上。治理的核心是确保系统的正确执行和持续保持。治理分为静态治理和动态治理两部分。
静态治理:确保系统能够按照预期正常运行。这需要在系统设计和实现阶段采取措施,保证系统的结构和行为符合设计规范和业务需求。
动态治理:确保系统能够在运行过程中持续保持一定的质量水平。这需要在系统运行阶段采取措施,监控系统的状态,发现并解决问题,保证系统的稳定性和可靠性。
2. 复杂性的来源
在软件研发中,复杂性主要来自两个方面:认知负荷和协作成本。
认知负荷(Cognitive Load):指团队成员在理解业务、概念、模型、设计、接口和代码等方面所需的认知努力。系统的复杂性越高,团队成员的认知负荷就越大。这就解释了为什么治理一个国家比治理一群蚂蚁要复杂得多,因为国家的治理涉及更多的业务和概念。
协作成本(Collaboration Cost):指团队成员在共同研发时付出的沟通和管理成本。系统个体间协作的成本越高,系统的复杂性就越高。这就解释了为什么治理一个国家比治理一个小饭馆要复杂得多,因为国家的治理涉及更多的人员和部门,需要更高的协作成本。
3. 静态治理
定义:静态治理是指在系统设计和实现阶段,通过结构化的方法和工具,确保系统能够按照预期正常运行。
具体措施:
- 接口定义:统一服务的接口规范,确保服务之间的调用一致性。
- 版本管理:为服务接口和实现版本进行管理,确保新旧版本的兼容性。
- 文档管理:详细记录系统的设计、实现和使用文档,帮助团队成员理解系统结构和行为。
- 代码审查:通过代码审查和测试,确保代码质量和系统稳定性。
案例:在一个大型电商平台中,通过统一定义各个微服务的API接口和数据模型,确保不同团队开发的服务能够无缝集成和互操作。同时,通过版本管理和代码审查,确保每个服务的更新不会破坏系统的整体稳定性。
4. 动态治理
定义:动态治理是指在系统运行阶段,通过监控和管理工具,确保系统能够持续保持一定的质量水平。
具体措施:
- 实时监控:通过监控工具(如Prometheus、Grafana),实时监控系统的运行状态,收集和分析系统指标(如CPU使用率、内存使用率、请求延迟、错误率等)。
- 日志管理:通过日志收集和分析工具(如ELK Stack),收集、存储和分析系统日志,快速定位和解决问题。
- 自动化恢复:通过自动化工具,检测并自动恢复故障服务,确保系统的高可用性。
- 告警机制:设置合理的告警阈值,通过邮件、短信、电话等方式及时通知相关人员,确保问题能够在第一时间被发现和处理。
案例:在一个金融交易系统中,通过部署Prometheus和Grafana实时监控系统的运行状态,及时发现和处理系统中的异常情况。同时,通过ELK Stack收集和分析系统日志,快速定位和解决交易失败的问题,确保系统的高可用性和可靠性。
5. 复杂性的治理策略
在治理微服务架构的复杂性时,可以采取以下策略:
分治思想:微服务的核心思想是分治,即通过将系统拆分为多个小的、独立的服务来减少单个服务的复杂性。分治思想不仅适用于系统设计,也适用于团队管理和协作。
自动化和监控:通过自动化工具和监控系统,减少人为操作和管理的复杂性。自动化可以提高效率和准确性,而监控可以及时发现和解决问题。
持续改进:系统的治理是一个持续改进的过程。需要定期评估系统的运行状况,发现和解决问题,优化系统结构和流程,提升系统的整体质量。
敏捷开发:采用敏捷开发方法,通过短周期的迭代和反馈,快速响应业务需求和技术变化,减少开发和运维的复杂性。
6. 复杂性管理案例
以下是一些复杂性管理的实际案例:
案例1:Netflix:Netflix通过引入微服务架构,将庞大的单体应用拆分为数百个独立的微服务。每个微服务由一个小团队负责,独立开发、测试和部署。同时,Netflix构建了一套完善的自动化和监控系统,实时监控系统的运行状态,快速发现和处理问题,确保系统的高可用性和可靠性。
案例2:Amazon:Amazon通过采用分治思想,将庞大的电商系统拆分为多个微服务。每个微服务负责一个独立的业务功能,如用户管理、订单处理、支付处理等。通过统一的接口规范和版本管理,确保不同团队开发的服务能够无缝集成和互操作。同时,Amazon部署了一套完善的监控和日志分析系统,实时监控系统的运行状态,收集和分析系统日志,快速定位和解决问题。
总结
微服务架构的治理涉及系统设计、实现和运行的各个阶段。通过静态治理和动态治理相结合,可以有效管理和应对系统的复杂性。分治思想、自动化和监控、持续改进和敏捷开发是治理微服务复杂性的关键策略。通过合理的治理措施,可以确保系统的稳定性、可维护性和高可用性。
相关文章:

29、架构-技术方法论之向微服务迈进
治理:理解系统复杂性 微服务架构的引入增加了系统的复杂性,这种复杂性不仅体现在技术层面,还包括组织、管理和运维等各个方面。本节将详细探讨微服务架构的复杂性来源,并介绍一些应对复杂性的治理策略。 1. 什么是治理 治理是指…...

点云处理实操 1. 求解点云法向
目录 一、点云法向的定义 二、如何计算计算法向量 三、实操 四、代码 main.cpp CMakeList.txt 一、点云法向的定义 点云法向量是指点云中某个点的局部表面法向量(Normal Vector)。法向量在三维空间中用来描述表面在该点处的方向属性,它是表面几何特征的重要描述工具。…...

XSS+CSRF组合拳
目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 (案例中将使用cms靶场来进行演示) 在实战中CSRF利用条件十分苛刻,因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…...

PasteSpiderFile文件同步管理端使用说明(V24.6.21.1)
PasteSpider作为一款适合开发人员的部署管理工具,特意针对开发人员的日常情况做了一个PasteSpiderFile客户端,用于windows上的开发人员迅速的更新发布自己的最新代码到服务器上! 虽然PasteSpider也支持svn/git的源码拉取,自动编译…...

NLP中两种不同的中文分词形式,jieba和spaCy
1. jieba分词 import jiebatext在中国古代文化中,书法和绘画是艺术的重要表现形式。古人常说,‘文字如其人’,通过墨迹可以窥见作者的性情和气质。而画家则以笔墨搏击,表现出山川河流、花鸟虫鱼的灵动。这些艺术形式不仅仅是技艺…...

【数据库】四、数据库编程(SQL编程)
四、数据库编程 另一个大纲: 5.1存储过程 5.1.1存储过程基本概念 5.1.2创建存储过程 5.1.3存储过程体 5.1.4调用存储过程 5.1.5删除 5.2存储函数 5.2.1创建存储函数 5.2.2调用存储函数 5.2.3删除存储函数 目录 文章目录 四、数据库编程1.SQL编程基础1.1常量1.2变…...

17.RedHat认证-Ansible自动化运维(下)
17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量,包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制,主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能,能将value存储到…...

React Suspense的原理
React Suspense组件的作用是当组件未完成加载时,显示 fallback 组件。那么 Suspense 是如何实现的呢?React 的渲染是通过 Fiber 进行的,Suspense 的更新机制也是要围绕 Fiber 架构进行的。Suspense 是由两部分组成,实际 UI 子组件…...

React的生命周期函数详解
import React,{Component} from "react";import SonApp from ./sonAppclass App extends Component{state{hobby:爱吃很多好吃的}// 是否要更新数据,这里返回true才会更新数据shouldComponentUpdate(nextProps,nextState){console.log("app.js第一步…...

DoubleSummaryStatistics 及其相关类之-简介
1. DoubleSummaryStatistics 使用简介 在Java 8中,DoubleSummaryStatistics 类被引入作为 java.util 包的一部分。它是一个用于收集统计数据(如计数、最小值、最大值、和、平均值等)的类,特别适用于处理 double 类型的数据。 Do…...

java线程间的通信 - join 和 ThreadLocal
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

差分GPS原理
双差RTK(Real-Time Kinematic)算法是基于差分全球卫星导航系统(GNSS)技术的一种高精度定位方法。它利用至少两个接收机(一个为基站,其他为移动站)接收自同一组卫星的信号来实现精确测量。双差处…...

【栈与队列】前k个高频元素
题目:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 分析:首先我们需要计算数组中元素出现的频率,前几篇文章讲解了哈希表的应用,所以这里我们很容易想到用…...

B端产品竞品分析-总结版
B端竞品分析的难点 分析维度-业务逻辑复杂 B端产品与C端产品业务模型不同,B端产品主要以业务为导向,因此其业务流程与业务逻辑梳理起来也会较C端产品复杂的多,对于个人能力也有一定的要求,需要我们具备相关领域或行业专业知识。…...

刷代码随想录有感(116):动态规划——单词拆分
题干: 代码: class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string>set(wordDict.begin(), wordDict.end());vector<bool>dp(s.size() 1, false);dp[0] true;for(int j 0; j &…...

CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)
CSS 的本质就是声明规则 ——《深入解析CSS》 文章目录 CSS层叠和优先级用户代理样式请和用户代理样式和谐相处 选择器单选择器的优先级选择器组的优先级关于选择器的其他源码顺序尽可能的选择优先级低的选择器 内联样式内联样式和JavaScript !important多个 !important 碎碎念…...

科技赋能冷链园区:可视化带来全新体验
应用图扑可视化技术,冷链园区能够更加直观地监控和管理资源,优化运作流程,提高运营效率与服务质量。...

高通安卓12-安卓系统定制2
将开机动画打包到system.img里面 在目录device->qcom下面 有lito和qssi两个文件夹 现在通过QSSI的方式创建开机动画,LITO方式是一样的 首先加入自己的开机动画,制作过程看前面的部分 打开qssi.mk文件,在文件的最后加入内容 PRODUCT_CO…...

高中数学:数列-解数列不等式问题的常用放缩技巧(重难点)
一、放缩技巧 技巧1 例题 证明:Sn<1 解: 变形 解: 由于第一种情况,我们证明了Sn<1,n≥1,是从第一项就开始放缩的。 发现,无法精确到 3 4 \frac{3}{4} 43 这时&am…...

[图解]企业应用架构模式2024新译本讲解17-活动记录1
1 00:00:01,070 --> 00:00:04,180 下一个我们要说的就是 2 00:00:04,190 --> 00:00:06,740 活动记录模式了 3 00:00:07,640 --> 00:00:11,210 同样是数据源架构模式 4 00:00:12,300 --> 00:00:18,480 里面的一个,活动记录 5 00:00:18,490 --> 00…...

[C++深入] --- malloc/free和new/delete
1 new运算符的拓展 1.1 自由存储区与堆的概念 在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。 new操作符从自由存储区(free st…...

Spcok测试代码抛异常场景
测试代码抛异常场景 class ExceptionSpec extends Specification {def validateService new ValidateService()Unrolldef "验证UserInfo"() {when: "调用校验方法"validateService.validateUser(user)then: "捕获异常并设置需要验证的异常值&qu…...

【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)
0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备…...

新手如何入门Web3?
一、什么是Web3? Web3是指下一代互联网,它基于区块链技术,致力于将各种在线活动变得更加安全、透明和去中心化。Web3是一个广义的概念,涵盖了包括数字货币、去中心化应用、智能合约等在内的多个方面。它的主要特点包括去中心化、…...

React.FC`<ChildComponentProps>`解释
代码场景 ParentComponent.tsx import React, { useState } from react; import ChildComponent from ./ChildComponent;function ParentComponent() {const [childData, setChildData] useState<string>();const handleChildData (data: string) > { // 可以直接…...

2024-06-24力扣每日一题
链接: 503. 下一个更大元素 II 题意 循环数组,找出每个元素的往后最近且大于它的元素 解: 今天没试暴力啊,大概率是过不了的 思路就是先找到最大的数,最大数的结果肯定是-1,然后倒着遍历数组…...

pyhon模块以及常用的第三方模块
import my_info as info print(info.name) info.show()from my_info import * print(name) show() pyhon中包的导入 import admin.my_admin as ad # 包名.模块名 admin是包名,my_admin是模块名print(ad.name) print(ad.info())from admin import my_admin as ad # …...

shell脚本—快速修改centos网络配置
shell-文本中自行修改想要的配置 #!/bin/bash# 网卡名称 eth"eth0"# IP 地址 ipaddr"192.168.1.100"# 子网掩码 netmask"255.255.255.0"# 网关 gateway"192.168.1.1"# 写入配置文件 echo "BOOTPROTOstatic" > /etc/sysc…...

线程池概念、线程池的不同创建方式、线程池的拒绝策略
文章目录 💐线程池概念以及什么是工厂模式💐标准库中的线程池💐什么是工厂模式?💐ThreadPoolExecutor💐模拟实现线程池 💐线程池概念以及什么是工厂模式 线程的诞生是因为,频繁的创…...

示例:WPF中如何绑定ContextMenu和Menu
一、目的:开发过程中,有些模块的右键ContextMenu菜单是需要动态显示的,既是根据不同条件显示不同的菜单,很多是通过代码去生成ContextMenu的MenuItem,本文介绍通过绑定的方式去加载ContextMenu,Menu菜单栏的…...