微服务治理:熔断、限流、降级区别
服务熔断、服务限流和服务降级是构建高可用、高弹性系统的三大基石,它们的目标一致(保证系统核心功能可用),但着眼点和实现方式不同。 一、核心概念对比 特性 服务熔断 (Circuit Breaker) 服务限流 (Rate Limiting / Throttling) 服务降级 (Service Degradation) 核心目标 快速失败,防止连锁故障。故障隔离。 控制流量,防止系统被突发流量冲垮。过载保护。 弃车保帅,牺牲非核心功能,保证核心功能可用。体验保全。 触发条件 依赖的下游服务失败率/超时率达到阈值。 流量/并发数达到预设的阈值(如QPS、线程数)。 1. 系统资源普遍不足(如CPU、线程池满)。2. 熔断或限流发生后。 作用对象 主要是对下游依赖服务的调用进行控制。 主要是对进入本服务的请求流量进行控制。 主要是对本服务提供的功能进行调整。 实现层面 通常集成在服务调用框架中(如Feign、Dubbo)。 通常位于网关/入口层或服务内部(如Sentinel、Hystrix)。 业务逻辑层,需要根据业务预...
高并发系统设计与开发指南
核心目标与原则在开始之前,我们必须明确高并发系统的核心目标: 高性能:低延迟、高吞吐量。 高可用性:系统能够持续提供服务,即使部分组件失败(SLA 可达 99.99%)。 可扩展性:能够通过增加资源来平滑地应对流量增长。 可维护性:系统易于理解、修改和运维。 遵循的原则包括:解耦、冗余、异步、分区、自动化。 一、系统设计系统设计关注宏观架构,如何将各个部件组合成一个有机整体。 1. 整体架构:水平扩展与分层摒弃传统的单体垂直扩展(Scale-up),采用分布式的水平扩展(Scale-out)架构。典型的现代高并发架构如下所示: 123用户 -> [CDN] -> [负载均衡器] -> [API 网关] -> [微服务集群] -> [数据层] | | | | | [静态资源] [流量分发] [鉴权/限流] [服务发现] [缓存/DB/消息队列] 各层核心设计要点: 客户端与 CDN: CDN:将静态资源(图...
分布式系统高并发处理策略
分布式系统处理高并发并非依靠单一的银弹,而是通过一套组合拳,从架构设计、技术选型到运维监控等多个层面进行系统性解决。其核心思想可以概括为:分而治之 和 冗余备份。 一、核心指导思想:可扩展性(Scalability)这是处理高并发的基石。可扩展性主要分为两种: 垂直扩展(Scale Up):提升单个服务器的性能(更强的CPU、更大的内存、更快的磁盘)。这种方法简单,但会遇到物理极限和成本急剧上升的问题,且存在单点故障风险。这不是分布式系统的核心思路。 水平扩展(Scale Out):通过增加更多的服务器来分担负载。这是分布式系统处理高并发的根本方法。它的优点是理论上可以无限扩展,成本相对线性,且通过冗余提高了系统的可用性。 二、关键技术与架构模式以下是分布式系统为实现水平扩展、应对高并发所采用的具体技术和模式。 1. 负载均衡这是水平扩展的入口和关键。所有外部请求首先到达负载均衡器。 作用:将涌入的海量请求,按照预设的规则(如轮询、最小连接数、IP哈希等)分发到后端的多个服务器上。 实现:可以是硬件设备(如F5),也可以是软件(如Nginx, LVS, HAProxy)...
分布式幂等设计方案
什么是分布式幂等核心定义: 在分布式系统中,一个接口或操作被多次执行所产生的影响,与仅执行一次所产生的影响是完全相同的。 简单来说: 无论客户端因为何种原因(如网络超时、服务抖动等)发起了多次重复的请求,服务器端都只处理一次真实的业务逻辑,并返回相同的结果。 为什么需要幂等在分布式环境下,网络是不可靠的。一个常见的场景是:客户端调用一个服务接口后,没有及时收到响应(可能是网络延迟、请求已经到达服务器但处理耗时较长导致客户端超时等),客户端会尝试重试。如果这个接口不是幂等的,那么这次重试就可能导致数据被错误地重复处理(例如:重复扣款、重复创建订单、重复发放优惠券等)。 一个生动的例子:支付 非幂等操作: 订单支付 接口。如果客户端连续调用两次 pay(订单ID),并且没有幂等控制,那么用户可能会被扣款两次。 幂等操作: 查询订单状态 接口。无论你调用多少次 getOrderStatus(订单ID),它都不会改变订单的状态,只会返回相同的结果。这个操作天生就是幂等的。 幂等的关键点: 副作用: 幂等关注的是多次执行的副作用是否一致,而不仅仅是返回值。即使第二次请求返回操作已执行...
分布式锁实现方案
什么是分布式锁分布式锁是在分布式系统环境下,用于控制多个节点上的进程或服务对共享资源进行互斥访问的一种同步机制。 为什么需要它在单机单进程时代,我们可以用编程语言自带的锁(如 Java 的 synchronized 或 ReentrantLock)来保证线程安全。但在分布式系统中,应用被部署在多台机器上,这些本地锁只对当前 JVM 进程有效,无法跨网络影响到其他机器上的服务。 典型场景: 避免重复处理:比如一个定时任务被部署了多个实例,在某一时刻只能有一个实例执行。 防止超卖:秒杀场景中,多个用户的请求被分发到不同的服务器节点,需要保证库存扣减的原子性。 保证数据一致性:对同一个共享数据进行读写操作时,需要防止并发导致的数据错乱。 分布式锁的核心特性一个合格的分布式锁必须具备以下特性: 互斥性:这是最基本的要求。在任意时刻,只有一个客户端能持有锁。 安全性:锁只能由持有它的客户端释放,不能被其他客户端释放(包括意外释放)。 避免死锁:即使获取锁的客户端崩溃或者发生网络分区,锁最终也一定能被释放,从而保证其他客户端后续可以获取锁。这通常通过给锁设置一个过期时间(租约)来实现...
分布式事务实现方案
什么是分布式事务核心定义:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。简单来说,一个业务操作需要调用多个服务,这些服务使用不同的数据库,要保证这些服务的数据操作要么全部成功,要么全部失败。 为什么它很复杂在单体应用中,我们可以依赖数据库的 ACID 事务(原子性、一致性、隔离性、持久性)来保证数据一致性。但在分布式系统中,数据分散在不同的服务、不同的数据库中,传统的单数据库事务无法跨库、跨服务生效。 理论基础:CAP 和 BASE要理解分布式事务的解决方案,必须先了解两个理论: CAP 定理:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 一致性 (C):所有节点在同一时间看到的数据是一样的。 可用性 (A):每个请求都能得到响应(不保证是最新数据)。 分区容错性 (P):系统在遇到网络分区(节点之间无法通信)时仍然能继续工作。 由于网络分区无法避免,分布式系统必须选择 P。因此,实际是在 CP ...
分布式ID生成方案
一、什么是分布式ID分布式ID(Distributed ID)是指在分布式系统环境下,由多个服务节点协同或者独立生成的、能够确保全局唯一性的数据标识符。 为什么需要它?—— 传统单机ID的局限性在单机数据库时代,我们通常使用数据库的自增主键(Auto Increment Primary Key) 来为数据赋予一个唯一的ID。这种方式简单可靠。 但是,在分布式系统(如微服务架构)中,问题变得复杂: 分库分表:数据被水平拆分到多个数据库或表中。如果每个库/表都使用自己的自增ID,很快就会产生重复的ID,无法保证全局唯一。 性能瓶颈:如果所有ID都从一个中央数据库的自增序列获取,这个数据库就会成为系统的单点瓶颈和潜在故障点,无法满足高并发场景。 安全性与连续性:直接暴露的自增ID很容易被猜出业务量(例如,通过ID大小推测订单数量),存在安全隐患。同时,自增ID通常是连续的,在某些场景下不希望被猜测。 分布式ID的核心需求一个理想的分布式ID生成方案,应该尽可能满足以下要求: 全局唯一:这是最基本的要求,绝不能出现重复的ID。 高性能高可用:生成服务必须能应对高并发请求,...
分布式系统数据一致性模型
数据一致性模型定义了对数据读写操作结果的可见性保证,是系统设计时在正确性、性能和可用性之间进行权衡的关键。 一、核心分类:强一致性与弱一致性首先,一致性模型可以分为两大阵营: 强一致性:任何读操作都会读到最新的写入值。系统表现得好像只有一份数据副本,所有操作是原子的、即时的。对用户来说,读写行为是可预测的。 弱一致性:读操作不保证一定能读到最新的写入值。系统在写入后,允许一个不一致的时间窗口,在此期间读操作可能读到旧值。最终,系统会收敛到一致状态。 二、主要的一致性模型详解1. 强一致性模型这类模型提供了最强的一致性保证,但通常以牺牲性能(高延迟)和可用性为代价。 线性一致性 定义:这是最强的一致性模型。它要求任何读操作都能读到某个时间点最近完成写入的值,并且所有进程的操作顺序与现实时间中的顺序一致,构成一个全局唯一的操作序列。 通俗比喻:就像一个全局唯一的公告板,任何人在任何时刻看(读)这个公告板,看到的都是最新贴上去(写)的内容,并且所有人看到的内容更新顺序都是一样的。 特点:实现难度大,延迟高。是CP系统(遵循CAP定理)的选择。 顺序一致性 定义:比线性一...
分布式系统CAP与BASE理论
CAP 理论CAP理论是分布式系统领域的基石理论,它帮助我们在设计系统时理解并做出关键的权衡。 什么是CAP理论?CAP理论指出,一个分布式系统最多只能同时满足以下三项中的两项: C - Consistency (一致性):所有节点在同一时间看到的数据是完全相同的。换句话说,一次写操作成功后,所有节点的读操作都必须能读到这个新值。这等同于线性一致性,是最高级别的一致性。 A - Availability (可用性):每一个非故障的节点必须对每一个请求给出一个非错误的响应。也就是说,系统一直可用,不会出现操作失败或者超时的情况。 P - Partition Tolerance (分区容错性):即使系统中存在网络分区(Partition),即网络中的消息丢失或延迟,导致部分节点之间无法通信,系统仍然能够继续正常运行。 核心思想与权衡CAP理论的核心在于,在分布式系统中,网络分区(P)是必然发生的,无法避免。网络硬件故障、带宽拥塞、机房中断等都可能导致网络分区。因此,P 是必须选择的。 这就引出了著名的三选二实际上变成了二选一: CP - 选择一致性和分区容错性 场景:当网络分...
Dubbo负载均衡算法
Dubbo提供了多种负载均衡算法,默认采用的是加权随机算法(Random LoadBalance)。 Dubbo的负载均衡算法Dubbo主要提供了以下几种负载均衡策略: 算法 配置值 核心特点 适用场景 加权随机 (Random LoadBalance) random 默认策略。按权重设置随机概率,调用量越大分布越均匀。 通用场景,性能相对均衡的集群。 加权轮询 (RoundRobin LoadBalance) roundrobin 按公约后的权重设置轮询比率,借鉴Nginx的平滑加权轮询算法。 希望请求绝对均匀分布,但需注意慢提供者累积请求问题。 最少活跃调用数 (LeastActive LoadBalance) leastactive 优先调用活跃数低(处理能力更强)的提供者,相同活跃数时加权随机。 处理能力差异较大的集群,实现“能者多劳”。 最短响应时间 (ShortestResponse LoadBalance) shortestresponse 优先选择响应时间短的提供者(基于滑动窗口平均响应时间),相同响应时间时加权随机。 对响应速度敏感的场...
