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…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
