Sentinel 控制台用法与工作原理学习笔记
Sentinel 控制台用法与工作原理学习笔记一、流控规则配置 基础控制维度:支持对 QPS(每秒查询率)和并发线程数进行控制。 三种流控模式: 直接关系:直接针对接口配置流量规则,可设置 QPS 或并发线程数阈值,当触发阈值时直接对该接口进行限流。 关联关系:适用于存在关联的服务,例如调用 A 服务的请求过多时,可配置当 A 服务的 QPS 或并发线程数达到阈值后,对关联的 B 服务进行流量控制,避免因 A 服务过载影响 B 服务。 链路关系:针对具有调用关系的链路进行配置,可对链路上的特定节点或多个节点限流,进而控制整个链路的流量。需注意:1.7 版本后,链路控制功能需在配置文件中设置 WebContextUtile 参数为 false 才能生效。 三种流控类型: 快速失败:当接口请求超过设定阈值(QPS 或并发线程数)时,直接返回失败结果。 接口预热:服务启动时,通过模拟线程加载缓存等资源,避免刚启动就被大量流量击垮,逐渐提升接口处理能力至阈值。 排队等待:可设置超时时间,请求会进入队列等待处理。若超时则被剔除并返回失败;未超时则正常响应。例如,阈值设为 20 时,每秒...
Sentinel 学习笔记
一、Sentinel 基础概念与服务雪崩背景(一)服务雪崩现象剖析服务雪崩是微服务架构中的严重问题:当某服务因高并发不堪重负,其依赖链上的其他服务会受波及,影响层层传递,最终导致大量服务瘫痪。 服务不可用的核心原因包括: 程序 Bug:隐藏错误在特定场景(输入、环境、业务)下触发,导致服务异常。 高并发冲击:突发请求远超服务器承载能力,资源被耗尽,无法及时处理请求。 硬件故障:服务器硬件老化、损坏等物理问题,直接导致服务停运。 缓存击穿:热点数据缓存过期瞬间,大量请求穿透缓存直达后端,造成服务压力激增。 (二)服务雪崩解决方案概述应对服务雪崩的常见方案有四类: 超时机制:为服务调用设超时时间,超时未响应则返回默认结果(如 false),避免调用方长时间等待。 服务限流:限制单位时间内通过的请求数,拦截超额流量并返回“服务繁忙”提示,保护服务不被压垮。 资源隔离:划分独立资源池(线程池、数据库连接等)给不同服务/模块,某资源池耗尽不影响其他服务。 熔断降级:若被调用服务频繁错误或崩溃,直接返回默认结果,防止影响在服务链蔓延。 (三)微服务流量治理技术选型对比微服务...
Spring Cloud Nacos Config 配置中心源码学习
一、引言:Nacos Config 的核心定位在 Spring Cloud 微服务架构中,配置管理是保障服务弹性与可维护性的关键环节。Nacos Config 作为官方推荐的配置中心,不仅实现了配置的集中存储与动态推送,还通过SPI 机制适配 Spring Boot 自动配置,解决了传统本地配置“修改需重启”“环境配置混乱”等问题。 本文基于源码视角,从配置加载优先级、事件驱动的变更流程两大核心维度展开,同时补充一致性保障、多环境管理、安全加密等生产级关键特性,形成完整的 Nacos Config 知识体系。 二、配置文件加载逻辑与优先级排序Nacos Config 本质是 Spring Boot 自动配置的扩展,其配置加载依赖 Bootstrap 上下文与 Spring 环境(Environment) 的初始化顺序,最终形成明确的优先级规则(优先级从高到低): 优先级排序 配置文件类型 核心作用与场景 1(最高) 服务名-环境名.yaml 如 order-service-dev.yaml,针对特定服务+特定环境的精准配置(如开发环境的数据库地址),优先级最高,覆盖所...
Hexo + GitHub Actions 实现自动化部署完整指南
前言在使用 Hexo 搭建个人博客时,当我们终于把hexo生成的页面挂载到github页面后,每次提交博客都需要使用hexo clean && hexo g && hexo d来部署很麻烦,可以借助github actions来实现流水线布置,我们每次提交源代码到github存放源码的分支上,一旦监听到源代码的push事件,流水线就会就会自动拉取环境自动部署,所以我们需要一个存放源代码的分支,以及我们的发布分支,可以使用git命令创建这两个分支,自动CI/CD,github需要密钥用来保证项目拉取和部署的权限,需要在本地生成ssh的密钥,公钥用来拉取项目,私钥用来部署推送更新页面,而且github对于npm安装有频率限制,我们可以通过配置国内镜像源+缓存配置,避免每次全量拉取,提高依赖安装以及部署的速度 一.分支规划与准备工作为了清晰分离源代码和部署文件,我们需要创建两个分支: source 分支:存放 Hexo 源代码(包括 Markdown 文章、配置文件、主题文件等) main 分支:存放 Hexo 生成的静态网页文件,用于 Gi...
Nacos 2.X 核心源码学习笔记
一、引言Nacos 作为阿里开源的分布式服务发现与配置管理平台,2.X 版本在架构上进行了协议升级(HTTP→gRPC)、存储结构优化(嵌套 Map→扁平分层)、一致性增强(Distro→Raft) Nacos 2.X 主要核心优化: 协议升级:gRPC 长连接替代 HTTP,降低通信开销,提升实时性; 存储优化:扁平分层注册表替代嵌套 Map,提升查询与同步效率; 事件驱动:解耦模块依赖,增强扩展性; 健康检查:服务端主动探活替代客户端心跳,减少客户端负担; 一致性增强:Raft+Distro 混合协议,平衡一致性与性能。 二、服务注册核心源码剖析服务注册是 Nacos 的基础能力,2.X 版本通过 gRPC 长连接异步通信替代 1.X 的 HTTP 短连接,同时优化了实例存储与一致性逻辑。 (一)客户端:发起注册请求客户端核心是封装实例信息、建立 gRPC 连接并发送注册请求,关键类集中在 nacos-naming-client 模块。 入口类:NacosNamingService 客户端对外暴露的注册入口,负责参数预处理与代理分发: 1234567891011121...
Nacos 核心源码学习笔记
Nacos 核心源码学习笔记Nacos 作为微服务架构中核心的服务注册发现与配置中心,其底层设计与实现逻辑对理解微服务治理至关重要。本文从源码入口、服务注册、心跳检测、集群一致性四个核心维度,梳理 Nacos 关键机制的实现原理。 一、源码入口与初始化机制1. 源码入口定位分析 Nacos 源码时,可通过启动脚本定位启动类,或直接聚焦服务发现核心 Jar 包(如 nacos-discovery)。其初始化逻辑依赖 Spring Boot SPI 机制,核心流程如下: 在 META-INF/spring.factories 中配置自动配置类(如服务发现场景的 NacosDiscoveryAutoConfiguration); 启用 Jar 包时,Spring 容器通过 @EnableAutoConfiguration 触发自动配置类加载; 自动配置类初始化 NacosServiceRegistry(服务注册)、NacosDiscoveryClient(服务发现)等核心组件,并向 Nacos 服务端发起请求,建立基础通信链路。 二、服务注册流程与高并发设计1. 核心注册流程 客户...
Spring Cloud OpenFeign 学习笔记
一、服务调用方式对比在 Spring Cloud 中,引入 OpenFeign 之前,常使用 Ribbon(负载均衡器)与 RestTemplate 进行服务间调用。但此方式代码耦合性强,维护性与可读性差,修改不便。而 Spring Cloud OpenFeign 采用依赖注入方式调用,如同调用本地 service,极大提升了代码的简洁性与可维护性。 二、OpenFeign 使用步骤 引入依赖:在项目中引入 OpenFeign 的相关 Maven 依赖。 添加注解:在 Spring Boot 启动类上添加 @EnableFeignClients 注解,开启 Feign 客户端功能。 定义接口: 方式一:在自定义的 SDK 中定义带有 @FeignClient 注解的接口。 方式二:自行定义 OpenFeign 接口,该接口用于声明服务调用方法。 注入使用:将定义好的 Feign 接口注入到需要调用的地方,即可实现服务间的远程调用。三、OpenFeign 接口参数处理 默认 @RequestBody:若接口参数未添加其他注解,OpenFeign 默认添加 @Reque...
Hexo 博客文章发布教程
Hexo 博客文章发布教程本教程将详细介绍如何在 Hexo 博客中创建和发布文章,包括文章的基本结构、常用配置和发布流程。 创建新文章1. 使用命令行创建在博客根目录下,使用以下命令创建新文章: 1hexo new post "文章标题" 这将在 source/_posts 目录下创建一个新的 Markdown 文件,文件名格式为:年-月-日-文章标题.md 2. 手动创建你也可以直接在 source/_posts 目录下手动创建 Markdown 文件,但需要确保文件名格式正确。 文章结构每篇文章都包含两个主要部分: Front-matter:文章头部配置 正文内容:文章主体内容 Front-matter 配置Front-matter 是文章开头的配置部分,使用 --- 包裹。常用配置项包括: 123456789---title: 文章标题date: 年-月-日 时:分:秒tags: - 标签1 - 标签2categories: 分类cover: 封面图片路径--- 常用配置项说明: title: 文章标题 date: 文章创建时间 tags:...
今日学习笔记:Sentinel 核心原理与关键算法
一、Sentinel 对外部请求的感知机制 Sentinel 对请求的感知依赖于 Web 框架适配与拦截器机制,核心是通过自动装配实现请求链路的透明化监控,为后续流量控制提供数据基础。 实现基础:SPI 与 Spring Boot 自动装配 Sentinel 提供 sentinel-spring-webmvc-adapter 等适配模块,基于 Spring Boot 的 SPI 机制(META-INF/spring.factories) 实现自动配置,无需手动注入拦截器,降低集成成本。 启动流程 Spring Boot 容器启动时,Sentinel 自动加载并注册配置类 SentinelWebAutoConfiguration(用户原表述中“config-auto configuration”修正为标准类名)。 该配置类向 Spring 容器注入 SentinelWebInterceptor(网络拦截器),拦截所有符合规则的 HTTP 请求(默认拦截 /* 路径,可通过配置自定义)。 请求处理逻辑 拦截器的 preHandle 方法(...
Spring Cloud Gateway 学习总结(优化版)
一、核心原理补充(易混淆点)1. 响应式架构本质Spring Cloud Gateway 基于 WebFlux 框架实现,底层依赖 Netty 实现异步非阻塞通信,与传统 Spring MVC 框架存在本质区别: 严禁引入 spring-boot-starter-web 依赖,否则会因 Servlet API 与 Netty 通信模型冲突导致启动失败 核心优势:高并发场景下资源利用率更高,适合作为微服务入口网关承载大流量 2. 路由核心组件逻辑 断言(Predicate):路由匹配的”判断条件”,支持路径、请求头、参数等多种匹配规则,多个断言需同时满足才会触发路由 过滤器(Filter):路由执行的”动作处理器”,按顺序对请求/响应进行加工 局部过滤器:仅对当前路由生效 全局过滤器(Global Filter):对所有路由生效,适合实现认证、限流等通用功能 二、实战配置核心要点1. 基础依赖配置(Spring Boot 3.x)<!-- Gateway 核心依赖 --> <dependency> <groupId>o...