灰度发布与蓝绿部署方案
全量发布 = 赌博。灰度发布让你先拿 1% 的流量验证,没问题再逐步放量。配合蓝绿部署实现快速回滚。 一、发布策略概述 1.1 滚动发布——逐个替换实例 1.2 蓝绿部署——两套环境,切换流量 1.3 金丝雀发布(灰度)——逐步放量 1.4 A/B 测试——同一功能的不同版本对比 二、蓝绿部署的实现 2.1 蓝环境(当前版本)+ 绿环境(新版本) 2.2 流量一次切换——Nginx / Gateway 修改 upstream 2.3 优点——瞬时回滚 2.4 缺点——双倍资源 三、灰度发布的实现 3.1 基于权重的灰度——Gateway 按比例分发 ...
SkyWalking Agent 无侵入原理
SkyWalking 的 Java Agent 不需要改一行代码,就能自动采集链路数据。Java Agent 字节码增强技术是如何做到”无侵入”的? 一、链路追踪的核心概念 1.1 Trace——一次完整的请求链路 1.2 Span——链路中的一个操作单元 1.3 TraceId / SpanId / ParentSpanId 1.4 数据模型——Segment / Span / Tag / Log 二、SkyWalking 整体架构 2.1 Agent——采集端,字节码增强 2.2 OAP Server——接收分析端 2.3 UI...
分布式调度框架对比
定时任务从单机 crontab 到分布式调度框架,解决了重复执行、故障转移、分片等问题。两大主流框架怎么选? 一、分布式调度的核心问题 1.1 避免任务重复执行——单点触发 1.2 故障转移——执行器宕机后自动切换 1.3 分片——大数据量任务的多机并行处理 1.4 可视化——任务管理、日志查看、报警 二、XXL-JOB 核心架构 2.1 调度中心(Admin)——触发任务、管理调度 2.2 执行器(Executor)——执行任务、上报结果 2.3 调度中心 HA——基于数据库锁 2.4 路由策略——第一个 / 最后一个 / 轮询 / 随机 /...
Nacos 配置热更新原理
改了 Nacos 上的配置,服务不需要重启就能生效。这背后是长轮询、MD5 对比和 Spring Cloud 的 RefreshScope 在起作用。 一、配置中心的核心能力 1.1 配置集中管理——告别每个服务一个 application.yml 1.2 动态刷新——运行时修改配置 1.3 版本管理——回滚历史配置 1.4 灰度发布——按 IP/标签下发配置 二、Nacos 客户端的配置获取 2.1 NacosPropertySourceLocator.locate()——启动时加载配置 2.2 本地快照——snapshot-tenant/group/dataId 文件...
Nacos AP/CP 模式切换原理
Nacos 同时支持 AP 和 CP 模式,它是怎么做到的?背后的 Raft 和 Distro 协议各自解决什么问题? 一、注册中心的 CAP 困境 1.1 为什么注册中心需要 CAP 选择 1.2 Eureka 的 AP 选择——优先可用性 1.3 ZooKeeper 的 CP 选择——优先一致性 1.4 Nacos 的混合选择——可切换 二、Nacos 的 AP 模式——Distro 协议 2.1 Distro 的设计目标——最终一致性 + 高可用 2.2 数据同步机制——每个节点都能写入 2.3 健康检查——临时实例的心跳检测 2.4 Distro 的一致性保证——异步复制 ...
服务调用超时与重试配置
一个服务挂了,因为重试风暴,整个系统都被拖垮。超时和重试配置不当,是分布式系统中 80% 雪崩的元凶。 一、超时配置的层次 1.1 连接超时(Connect Timeout)——建立连接的超时 1.2 读取超时(Read Timeout)——等待响应的超时 1.3 请求超时(Request Timeout)——整个请求的总体超时 1.4 链路上各层超时的关系——Nginx → Gateway → RPC → DB 二、超时时间的计算 2.1 基于 P99 响应时间 + 一定 buffer 2.2 上下游超时的关系——下游超时 < 上游超时 2.3 Dubbo 的超时配置——t...
网关自定义过滤器开发实践
Spring Cloud Gateway 基于 WebFlux 的响应式架构,比 Zuul 1.x 性能更好。本文从路由规则到自定义过滤器,一步步搭建生产可用的网关。 一、网关的核心职责 1.1 路由转发——请求分发到对应的微服务 1.2 统一鉴权——Token 校验、权限控制 1.3 限流——基于 Redis 的令牌桶 1.4 日志/监控——请求日志、调用链 1.5 协议转换——HTTP → gRPC / WebSocket 二、Spring Cloud Gateway 核心概念 2.1 Route——路由,ID + URI + Predicates + Fi...
分布式事务方案对比
分布式事务是微服务架构最难的问题之一。从 XA 到 TCC 到 Saga,5 种方案各有千秋,怎么选? 一、分布式事务的理论基础 1.1 CAP 理论——分布式事务最多满足两个 1.2 BASE 理论——最终一致性的哲学 1.3 刚性事务 vs 柔性事务 二、方案 1:XA 两阶段提交 2.1 两阶段提交的流程——Prepare → Commit 2.2 优点——强一致性 2.3 缺点——同步阻塞、单点故障、数据不一致风险 2.4 适用场景——单块应用中的多数据源 三、方案 2:TCC(Try-Confirm-Cancel) 3.1 Try——资源预留 3.2 Confirm——...
幂等方案设计
用户点了两次支付按钮,扣了两次钱。幂等设计是金融级系统的基本功。 一、幂等的定义与重要性 1.1 幂等的数学定义——f(f(x)) = f(x) 1.2 程序中——同一个操作执行一次和执行多次的结果相同 1.3 哪些场景需要幂等——支付、下单、消息消费、接口重试 二、接口层幂等——Token 机制 2.1 客户端先获取 Token——GET /token 返回唯一 ID 2.2 提交时带上 Token——POST /order + token 2.3 服务端校验 Token——Redis DEL 原子操作 2.4 Token 的过期时间设计 三、数据库层幂等 3.1 唯一索引——...
分布式 ID 与雪花算法
自增 ID 在分库分表后不好使了,UUID 不能排序,雪花算法成了主流。但雪花算法的时钟回拨问题怎么解决? 一、分布式 ID 的核心要求 1.1 全局唯一——最基本的 1.2 趋势递增——有利于 MySQL InnoDB 索引 1.3 单调递增——部分场景需要严格有序 1.4 高性能——不能成为瓶颈 1.5 信息安全——不能暴露业务量 二、方案 1:UUID 2.1 UUID 的 5 个版本 2.2 优点——无中心、本地生成 2.3 缺点——无序、字符串长、索引不友好 三、方案 2:数据库自增 ID 3.1 单库自增——单点瓶颈 3.2 多库自增——步长区分 3.3 号段模式——...