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…...
Simple Form终极测试覆盖率指南:如何达成团队质量目标
Simple Form终极测试覆盖率指南:如何达成团队质量目标 【免费下载链接】simple_form Forms made easy for Rails! Its tied to a simple DSL, with no opinion on markup. 项目地址: https://gitcode.com/gh_mirrors/si/simple_form Simple Form作为Rails生态…...
突破Twitter数据限制:Rettiwt-API开源工具零成本数据获取指南
突破Twitter数据限制:Rettiwt-API开源工具零成本数据获取指南 【免费下载链接】Rettiwt-API An API for fetching data from Twitter for free! 项目地址: https://gitcode.com/gh_mirrors/re/Rettiwt-API 在社交媒体数据驱动决策的时代,Twitter作…...
技术赋能B端拓客:号码核验行业的破局与价值深耕,氪迹科技法人股东核验筛选系统,阶梯式价格
2026年,B端市场进入存量竞争的深水区,“精准获客、降本增效”不再是企业的加分项,而是生存发展的必选项。号码核验作为B端拓客流程的前置筛选环节,直接决定了线索质量、人力效能与投入回报比,成为影响企业拓客竞争力的…...
Apollo配置中心:从基础概念到实战应用全解析
1. Apollo配置中心初探:为什么我们需要它? 想象一下你正在开发一个电商系统,数据库连接地址、支付接口密钥、商品库存阈值等配置信息散落在20个不同的properties文件里。每次修改配置都需要重新打包部署,半夜三点被叫起来改生产环…...
LFM2.5-1.2B-Thinking-GGUF集成Python爬虫实战:智能数据采集与清洗
LFM2.5-1.2B-Thinking-GGUF集成Python爬虫实战:智能数据采集与清洗 1. 当爬虫遇上大模型:数据采集的新思路 传统爬虫开发就像在迷宫里摸索前行——你需要手动解析每个网站的HTML结构,针对不同反爬机制编写特定规则,还要处理杂乱…...
政务短信钓鱼攻击机理与防控研究 —— 以美国宾州 PennDOT 诈骗事件为例
摘要 2026 年 3 月 27 日,宾夕法尼亚州官方发布安全预警,提示公众警惕冒充 PennDOT(宾州交通局)的短信钓鱼诈骗。此类攻击以车辆管理、罚单缴费、证件状态异常为诱饵,通过仿冒政务身份诱导用户点击恶意链接,…...
VMware12虚拟机安装Mac系统全攻略:从环境配置到网络共享一站式指南
1. VMware12虚拟机安装Mac系统前的准备 在Windows环境下运行Mac系统听起来像是天方夜谭,但借助VMware12虚拟机,这件事变得出奇简单。我去年为了测试iOS应用就走过这条路,整个过程踩过不少坑,也积累了不少经验。首先需要明确的是&a…...
Electron打包踩坑实录:解决‘xx.asar does not exist‘报错的完整配置指南
Electron打包实战:彻底解决xx.asar does not exist报错的深度指南 当你满怀期待地运行electron-builder命令,却在终端看到刺眼的红色报错——"Application entry file xx.asar does not exist",那一刻的挫败感,每个Ele…...
OPC UA Web访问避坑指南:如何选择RESTful、WebSocket还是GraphQL?
OPC UA Web访问技术选型实战:RESTful、WebSocket与GraphQL深度对比 工业物联网领域的技术架构师们经常面临一个关键决策:如何为OPC UA服务器选择最合适的Web访问方式?这个问题看似简单,却直接影响着系统性能、开发效率和长期维护成…...
PyTorch Geometric安装避坑指南:从依赖冲突到版本匹配,手把手带你搞定PyG环境
PyTorch Geometric安装避坑指南:从依赖冲突到版本匹配 每次打开终端准备安装PyTorch Geometric(PyG)时,那种既期待又忐忑的心情,相信很多图神经网络(GNN)开发者都深有体会。明明按照官方文档一…...
