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

微服务核心知识点深度解析:从组件到架构设计

微服务核心知识点深度解析:从组件到架构设计

  • 微服务核心知识点深度解析:从组件到架构设计
    • 一、Spring Cloud 5 大核心组件详解
    • 二、服务注册与发现:微服务的 “通讯录”
      • 概念解析
      • Spring Cloud 中的实现
    • 三、Nacos:不止是注册中心
      • 核心功能
      • 项目实践
    • 四、负载均衡的实现:让请求 “雨露均沾”
      • 项目中的实现方式
    • 五、Ribbon 负载均衡策略全解析
    • 六、自定义负载均衡策略:打造专属分配逻辑
      • 实现步骤
    • 七、服务雪崩:分布式系统的 “多米诺危机”
      • 概念与成因
      • 解决方案
    • 八、微服务监控:让系统运行 “透明化”
      • 监控方案
      • 项目实践
    • 九、项目限流实践:守护系统流量防线
      • 实现方式
    • 十、限流常见算法:流量控制的核心逻辑
    • 十一、CAP 理论:分布式系统的 “不可能三角”
      • 理论解析
    • 十二、为何分布式系统无法同时保证 CAP?
      • 原理分析

微服务核心知识点深度解析:从组件到架构设计

一、Spring Cloud 5 大核心组件详解

在这里插入图片描述

在微服务架构中,Spring Cloud 提供了完善的工具链,其核心组件包括:

  1. 服务注册与发现组件(如 Eureka/Nacos):负责服务实例的注册与发现,让服务间能感知彼此存在。例如 Eureka Server 作为注册中心,服务提供者启动时向其注册,服务消费者通过它获取可用服务列表。
  2. 服务调用组件(Feign):基于动态代理实现声明式服务调用,简化 RESTful 接口调用代码。只需定义接口并添加注解,即可远程调用其他微服务接口。
  3. 负载均衡组件(Ribbon):为服务调用提供负载均衡能力,支持多种策略,确保请求均匀分配到多个服务实例。
  4. 服务容错组件(Hystrix):通过熔断、降级等机制,防止服务间故障蔓延,保障系统稳定性。当依赖服务不可用时,快速返回兜底响应。
  5. 网关组件(Zuul/Spring Cloud Gateway):作为微服务入口,处理路由转发、请求过滤、权限校验等功能,统一管理外部请求流量。

二、服务注册与发现:微服务的 “通讯录”

概念解析

服务注册与发现是微服务架构的基础能力。服务启动时,将自身信息(如 IP、端口、服务名)注册到注册中心;其他服务需要调用时,从注册中心获取目标服务实例列表。这就像通讯录,让服务间能 “找到彼此”。

Spring Cloud 中的实现

  • Eureka:Spring Cloud 早期常用方案,由 Eureka Server(注册中心)和 Eureka Client 组成。Client 向 Server 注册并续约,Server 维护服务列表。
  • Nacos:阿里巴巴开源的更全能方案,不仅支持服务注册发现,还集成配置管理、动态 DNS 等功能,在 Spring Cloud 中通过 spring-cloud-starter-alibaba-nacos-discovery 集成。
  • 在这里插入图片描述

三、Nacos:不止是注册中心

核心功能

  1. 服务注册与发现:支持 HTTP、gRPC 等多种协议的服务注册,提供健康检查机制,剔除不健康实例。
  2. 动态配置管理:集中管理微服务配置,支持配置热更新,无需重启服务。
  3. 服务元数据管理:存储服务描述、标签等元数据,方便服务治理。

项目实践

在项目中,引入 Nacos 作为注册中心,只需在配置文件定义 spring.cloud.nacos.discovery.server-addr,服务启动自动注册。配合 Nacos 控制台,可直观查看服务健康状态、调用链路等,提升运维效率。

四、负载均衡的实现:让请求 “雨露均沾”

项目中的实现方式

  • Ribbon 负载均衡:集成在 Feign 中,默认对服务调用做负载均衡。例如在服务调用接口上添加 @FeignClient,Ribbon 自动对目标服务实例负载均衡。
  • Nacos 负载均衡:Nacos 自带负载均衡能力,支持权重配置。服务消费者从 Nacos 获取服务实例时,Nacos 按策略返回实例,如基于权重的随机策略。

五、Ribbon 负载均衡策略全解析

  1. 轮询策略(RoundRobinRule):默认策略,按顺序依次选择服务实例,简单均匀分配流量。
  2. 随机策略(RandomRule):随机选择实例,适用于对均衡性要求不高的场景。
  3. 权重策略(WeightedResponseTimeRule):根据服务响应时间动态计算权重,响应快的实例分配更多请求。
  4. 最少并发策略(BestAvailableRule):过滤掉故障实例,选择当前并发请求最少的实例。
  5. 重试策略(RetryRule):对选定策略结果进行重试,若调用失败,尝试其他实例。

六、自定义负载均衡策略:打造专属分配逻辑

实现步骤

  1. 定义策略类:继承 AbstractLoadBalancerRule,重写 choose 方法,编写自定义逻辑。

java

public class CustomLoadBalanceRule extends AbstractLoadBalancerRule {  @Override  public Server choose(Object key) {  // 自定义逻辑:如根据服务实例标签筛选  LoadBalancerContext context = getLoadBalancerContext();  ServiceInstanceList instances = context.getServiceInstances();  // 遍历筛选实例,返回目标 Server  }  
}  
  1. 配置策略:通过配置类将自定义策略注入容器。

java

@Configuration  
public class RibbonConfig {  @Bean  public CustomLoadBalanceRule customLoadBalanceRule() {  return new CustomLoadBalanceRule();  }  
}  
  1. 指定策略:在 @FeignClient 中通过 configuration 指定配置类。

java

@FeignClient(name = "target-service", configuration = RibbonConfig.class)  
public interface TargetServiceClient {  // 接口定义  
}  

七、服务雪崩:分布式系统的 “多米诺危机”

概念与成因

服务雪崩指某个微服务故障,引发级联失败,最终导致整个系统不可用。常见原因:服务依赖链中某环节超时、重试过多占用资源、流量突增压垮服务。

解决方案

  1. 熔断机制:如 Hystrix,当服务调用失败率超过阈值,触发熔断,直接返回降级响应,避免资源耗尽。
  2. 限流降级:对高并发服务限流,超出阈值的请求快速失败;同时提供降级接口,返回简化响应。
  3. 服务隔离:采用线程池隔离或信号量隔离,限制服务调用的资源占用,防止故障扩散。

八、微服务监控:让系统运行 “透明化”

监控方案

  1. 指标监控:利用 Prometheus + Grafana,采集微服务的 CPU、内存、接口响应时间等指标,可视化展示。
  2. 链路追踪:集成 SkyWalking 或 Sleuth + Zipkin,追踪请求在微服务间的调用链路,定位性能瓶颈。
  3. 日志监控:通过 ELK(Elasticsearch + Logstash + Kibana)集中管理日志,支持关键词搜索、日志聚合分析。

项目实践

在项目中,各微服务引入 Prometheus 客户端库,暴露监控指标接口。部署 Prometheus 定时拉取指标,Grafana 配置仪表盘展示服务健康状态,实现实时监控。

九、项目限流实践:守护系统流量防线

实现方式

  1. 基于框架工具:使用 Sentinel 或 Spring Cloud Gateway 限流。例如 Sentinel 可通过注解或规则配置,对接口限流。

java

@SentinelResource(value = "api", blockHandler = "handleBlock")  
public String api() {  // 业务逻辑  
}  
public String handleBlock(BlockException ex) {  return "请求过多,请稍后再试";  
}  
  1. 自定义实现:基于 Redis 记录请求次数,结合 Lua 脚本实现原子计数,达到阈值时拒绝请求。

十、限流常见算法:流量控制的核心逻辑

  1. 计数器算法:固定时间窗口内统计请求数,超过阈值限流。实现简单,但存在临界问题(如窗口切换时突发流量)。
  2. 滑动窗口算法:将时间窗口划分为多个小窗口,统计滑动范围内的请求数,更精准控制流量。
  3. 漏桶算法:请求如 “水” 流入漏桶,按固定速率流出。超出漏桶容量的请求丢弃,平滑处理流量。

在这里插入图片描述

  1. 令牌桶算法:以固定速率生成令牌,请求需获取令牌才能处理。可应对突发流量,允许短时间内的流量突发。

在这里插入图片描述

十一、CAP 理论:分布式系统的 “不可能三角”

理论解析

CAP 指分布式系统的三个核心特性:

  • 一致性(Consistency):所有节点在同一时间看到相同数据。
  • 可用性(Availability):非故障节点能一直处理请求。
  • 分区容错性(Partition Tolerance):系统能容忍网络分区(部分节点间通信中断)。
    理论证明,三者无法同时满足,需根据场景取舍。

十二、为何分布式系统无法同时保证 CAP?

原理分析

网络分区是分布式系统的必然场景(如节点间网络故障)。若保证分区容错性,当分区发生:

  • 若追求强一致性,主节点故障时,从节点需停止服务等待同步,牺牲可用性。
  • 若追求可用性,节点在分区时继续处理请求,可能导致数据不一致。
    因此,分布式系统中通常优先保证分区容错性,再在一致性和可用性间权衡,如 CP(ZooKeeper)或 AP(Redis 集群)架构。

网络分区是分布式系统的必然场景(如节点间网络故障)。若保证分区容错性,当分区发生:

  • 若追求强一致性,主节点故障时,从节点需停止服务等待同步,牺牲可用性。
  • 若追求可用性,节点在分区时继续处理请求,可能导致数据不一致。
    因此,分布式系统中通常优先保证分区容错性,再在一致性和可用性间权衡,如 CP(ZooKeeper)或 AP(Redis 集群)架构。

通过对这些微服务核心知识点的梳理,无论是架构设计还是日常开发,都能更深入理解技术原理与实践方法,为构建稳定高效的微服务系统夯实基础。

相关文章:

微服务核心知识点深度解析:从组件到架构设计

微服务核心知识点深度解析:从组件到架构设计 微服务核心知识点深度解析:从组件到架构设计一、Spring Cloud 5 大核心组件详解二、服务注册与发现:微服务的 “通讯录”概念解析Spring Cloud 中的实现 三、Nacos:不止是注册中心核心…...

SpringBoot3+EasyExcel通过WriteHandler动态实现表头重命名

方案简介 为了通过 EasyExcel 实现动态表头重命名&#xff0c;可以封装一个方法&#xff0c;传入动态的新表头名称列表&#xff08;List<String>&#xff09;&#xff0c;并结合 WriteHandler 接口来重命名表头。同时&#xff0c;通过 EasyExcel 将数据直接写入到输出流…...

Python小练习系列 Vol.11:回文数筛选(filter + 字符串反转)

&#x1f9e0; Python小练习系列 Vol.11&#xff1a;回文数筛选&#xff08;filter 字符串反转&#xff09; &#x1f50d; 本期我们用 Python 的 filter() 函数结合字符串反转技巧&#xff0c;一行代码搞定“回文数”的判断与筛选&#xff01; &#x1f9e9; 一、题目描述 回…...

BUUCTF-web刷题篇(5)

13.upload1 文件上传漏洞&#xff08;上传图片&#xff09; 按照传统方法&#xff0c;新建文件&#xff08;xinjian&#xff09;写一句话木马&#xff0c;利用Windows文件后缀识别的特点&#xff0c;将后缀名改为图片后缀名(xinjian.jpg)&#xff0c;上传文件&#xff0c;抓包…...

NestJS——创建项目、编写User模块

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务

《Python Web部署应知应会》No2&#xff1a;如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务&#xff08;上&#xff09; 摘要&#xff1a; 在 FastAPI 和 OLLAMA 架构中实现高并发 AI 推理服务&#xff0c;并优化性能指标采集和缓存策略&#xff0c;可以充分利用 asy…...

NUUO摄像头debugging_center_utils命令执行漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 NUUO NVR是中国台湾省NUUO公司旗…...

uv 命令用conda命令解释

uv&#xff1a;安装 | uv-zh-cn 功能 | uv-zh-cn #showkey -a 可看按键的"\eOP"转义序列是啥# 绑定快捷键 f1 到 source .venv/bin/activate函数 bind "\eOP": "source .venv/bin/activate " #conda activate# 绑定快捷键 f2 到uv add函数 …...

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误 环境设置 操作系统: macOS硬件平台: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 项目时&#xff0c;我们尝试集成 vite-plugin-top-level-await 插件以支持顶层 await 语法。然而&#xff…...

2.pycharm部署Ai - 编程好助手

一、pycharm安装continue插件 1.提前安装好pycharm&#xff0c;并双击打开 2.File – Setting 3.Plugins – 搜索Continue &#xff0c; 点击Install安装 4.点ok 二、获取硅基流动API 1.登入网站&#xff1a;https://siliconflow.cn/zh-cn/#/&#xff0c;并注册登入 2.获取AP…...

uniapp + Axios + 小程序封装网络请求

前言 小程序自带的网络请求使用起来比较麻烦&#xff0c;不便于管理&#xff0c;就需要封装网络请求&#xff0c;减少繁琐步骤&#xff0c;封装最终效果&#xff0c;根据类别将网络请求封装在文件中&#xff0c;使用得时候调用文件名名称加文件中得自定义名称&#xff0c;就可…...

初始数据库--MySQL

一&#xff0c;数据库&#xff08;DataBase&#xff09;概述 思考程序开发中数据存储问题&#xff1f; 变量 int c 10; 对象{名字&#xff0c;价格&#xff0c;颜色} 集合类-->对象 以上方式存储数据都是在内存中存储 程序运行结束后数据都释放了 …...

ENSP学习day12

链路聚合–LACP&#xff08;Link Aggregation Control Protocol&#xff09; 链路聚合是指将多条物理链路通过一种技术进行绑定&#xff0c;从而形成一个逻辑上更高带宽、更可靠的链路。这种技术能够提高网络传输速率和可靠性&#xff0c;同时实现负载均衡。链路聚合可以在不同…...

【LeetCode 题解】算法:29.两数相除

在算法的世界里&#xff0c;常常会出现一些打破常规、挑战思维的题目。LeetCode 第 29 题 “两数相除” 便是其中之一。这道题不仅要求我们在不能使用乘法、除法和取余运算的前提下实现两数相除&#xff0c;还需要处理 32 位有符号整数的溢出问题&#xff0c;对编程者的逻辑思维…...

打包python文件生成exe

下载PyInstaller 官网 pip install pyinstaller验证是否安装成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"会生成.spec,build,dist三项&#xff0c;其中build,dist为文件夹&#xff0c;dist是最后的可执行文件&a…...

【NLP】13. NLP推理方法详解 --- 穷举和贪心搜索

NLP推理方法详解 — 穷举和贪心搜索 在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;推理&#xff08;Inference&#xff09;是指在给定模型的情况下&#xff0c;找到最可能的输出序列。由于模型通常是神经网络&#xff0c;它会为每个可能的输出分配一个概率&am…...

Redis延时队列在订单超时未报到场景的应用分享

一、引言 在电商、医疗预约等众多业务场景中&#xff0c;经常会遇到需要处理超时任务的情况。比如医疗预约订单&#xff0c;如果患者在支付成功后&#xff0c;到了预约结束时间还未报到&#xff0c;系统需要自动取消订单。为了实现这样的功能&#xff0c;我们可以利用 Redis 延…...

精心整理-2024最新网络安全-信息安全全套资料(学习路线、教程笔记、工具软件、面试文档).zip

2024最新网络安全-信息安全全套资料&#xff08;学习路线、教程笔记、工具软件、面试文档&#xff09;&#xff0c;视频教程文档资料共55GB。 一、网络安全-信息安全学习路线 0、网络安全-信息安全思维导图.jpg 1、网络安全大师课 V2024.pdf 2、网络安全行业白皮书.pdf 3、网络…...

多人协同进行qt应用程序开发应该注意什么?

多人协同进行Qt应用程序开发的注意事项 多人协同开发Qt应用程序时&#xff0c;需要注意以下几个关键方面以确保开发效率和代码质量&#xff1a; 1. 代码版本控制 使用Git&#xff1a;建立合理的分支策略&#xff08;如Git Flow&#xff09;.gitignore配置&#xff1a;确保忽…...

8.4考研408简单选择排序与堆排序知识点深度解析

考研408「简单选择排序与堆排序」知识点全解析 一、简单选择排序 1.1 定义与核心思想 简单选择排序&#xff08;Selection Sort&#xff09;是一种选择排序算法&#xff0c;其核心思想是&#xff1a; 每趟选择&#xff1a;从待排序序列中选择最小&#xff08;或最大&#x…...

C++中ShellExecute函数使用方法说明,如果一开始参数为隐藏,后面还能再显示出来吗

文章目录 一、ShellExecute基础用法函数原型关键参数 nShowCmd示例代码&#xff1a;启动程序并隐藏窗口 二、隐藏后能否重新显示窗口直接答案 三、实现隐藏后显示窗口的步骤1. 获取目标窗口句柄2. 显示窗口 四、完整流程示例五、注意事项六、总结 在C中使用ShellExecute函数时&…...

MySQL数据库精研之旅第五期:CRUD的趣味探索(上)

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、CRUD简介 二、Create新增 2.1. 语法 2.2. 示例 三、Retrieve检索 3.1. 语法 3.2. 示例 一、CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作&#xff1a;Create(创建)、Retrieve(检索…...

【文件上传】✈️大文件的上传服务器的简单实现

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时五分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…...

Windows DOS窗口12个命令

DOS 命令是指在 Windows 命令提示符&#xff08;CMD&#xff09;中使用的命令行工具&#xff0c;源于早期的 Disk Operating System。虽然现代 Windows 系统更多使用图形界面&#xff0c;但命令提示符仍然是测试人员的重要工具。测试人员通常需要执行文件操作、测试网络连接、监…...

AI加Python的文本数据情感分析流程效果展示与代码实现

本文所使用数据来自于梯田景区评价数据。 一、数据预处理 数据清洗 去除重复值、空值及无关字符(如表情符号、特殊符号等)。 提取中文文本,过滤非中文字符。 统一文本格式(如全角转半角、繁体转简体)。 中文分词与去停用词 使用 jieba 分词工具进行分词。 加载自定义词…...

Go语言手动内存对齐的四大场景与实践指南

Go语言手动内存对齐的四大场景与实践指南 引言&#xff1a;Go的内存对齐机制 Go语言通过编译器自动处理内存对齐问题&#xff0c;开发者通常无需关心底层细节。然而&#xff0c;在特定场景下&#xff0c;手动干预内存对齐是避免程序崩溃或数据错乱的必要操作。本文将深入探讨G…...

PDF多表格结构识别与跨表语义对齐:基于对抗迁移的鲁棒相似度度量模型

文章目录 一. 项目结构二.流程分析2.1 批处理器核心代码解析 三. 跨页表格相似度匹配原理3.1 表头内容相似度-特征向量归一化3.2 表头内容相似度-余弦相似度3.3 定时缓存清理 ocr扫描有其局限性。对于pdf文本类型这种pdfbox&#xff0c;aspose-pdf&#xff0c;spire直接提取文本…...

docker启动nacos+redis+seata

docker启动nacos 最新版本的nacos需要再启动的时候设置mysql的一些属性&#xff0c;【也可以先启动nacos&#xff0c;再到配置文件中找到application.yml设置mysql的一些属性】。 1.如果直接启动nacos设置的mysql我们需要确定两个容器的ip都是一样的。 查看mysql容器中的ip命令…...

从 select 到 epoll:拆解 I/O 多路复用的演进与实战

目录 一、引言&#xff1a;为什么需要 I/O 多路复用&#xff1f; 二、select 1.函数介绍 2.原理 3.样例代码 4.优缺点总结 三、poll 1.函数介绍 2.样例代码 3.优缺点总结 四、epoll 1.函数介绍 2.原理 3.LT和ET两种工作模式 4.优缺点总结 五、核心机制对比&…...

Go后端架构探索:从 MVC 到 DDD 的演进之路

Go语言 MVC 与 DDD 分层架构详细对比 MVC和DDD是后台开发两种流行的分层架构思想&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;是一种设计模式&#xff0c;主要用于分离用户界面、业务逻辑和数据模型&#xff0c;便于分层解耦&#xff0c;而DDD&#xff08;领…...