Sentinel 是阿里巴巴开源的分布式系统的流量控制组件,专注于限流、熔断、降级等功能。在微服务架构中,单机限流可能无法满足分布式系统的需求,因此 Sentinel 提供了集群限流功能,用于在分布式环境下实现全局的流量控制。
集群限流的核心思想
集群限流的目标是在分布式系统中,对某个资源的访问总量进行全局控制。例如,限制某个 API 在整个集群中的总 QPS(每秒查询数)不超过 1000。
Sentinel 的集群限流通过以下方式实现:
- Token Server:作为集群限流的中心节点,负责管理全局的流量配额。
- Token Client:每个微服务实例作为客户端,向 Token Server 申请令牌(Token)。
- 通信机制:Token Client 和 Token Server 之间通过 RPC 通信,实时获取和释放令牌。
集群限流的工作原理
- 初始化 Token Server:
- 在集群中部署一个或多个 Token Server,负责管理全局的流量配额。
- Token Server 会维护一个全局的令牌桶,用于控制流量。
- 微服务实例作为 Token Client:
- 每个微服务实例启动时,会注册为 Token Client,并与 Token Server 建立连接。
- Token Client 负责向 Token Server 申请令牌。
- 请求流量控制:
- 当微服务实例收到请求时,会向 Token Server 申请令牌。
- 如果 Token Server 有足够的令牌,则返回令牌,允许请求通过。
- 如果 Token Server 没有足够的令牌,则拒绝请求,返回限流错误。
- 令牌的申请和释放:
- Token Client 在请求通过后,会释放令牌,以便其他请求可以使用。
- Token Server 会根据配置的限流规则(如 QPS)动态调整令牌的发放速率。
- 故障处理:
- 如果 Token Server 不可用,Token Client 可以降级为本地限流模式,确保系统的高可用性。
集群限流的配置
在 Sentinel 中,集群限流的配置主要包括以下步骤:
- 部署 Token Server:
- 使用 Sentinel 提供的
ClusterTokenServer
启动 Token Server。 - 配置全局的限流规则(如 QPS、令牌桶大小)。
- 使用 Sentinel 提供的
- 配置 Token Client:
- 在每个微服务实例中,配置 Token Client 的连接信息(如 Token Server 的地址)。
- 配置本地限流规则,作为 Token Server 不可用时的降级策略。
- 定义资源规则:
- 在 Sentinel 控制台中,定义需要限流的资源(如 API 路径)。
- 配置集群限流的规则(如全局 QPS)。
集群限流的优点
- 全局流量控制:
- 在分布式系统中实现全局的流量控制,避免单机限流的局限性。
- 高可用性:
- 支持 Token Server 的高可用部署,确保集群限流的稳定性。
- Token Client 可以在 Token Server 不可用时降级为本地限流模式。
- 动态调整:
- 支持动态调整限流规则,适应系统的变化。
- 易于集成:
- 与 Spring Cloud、Dubbo 等微服务框架无缝集成。
集群限流的适用场景
- 高并发系统:
- 需要全局控制某个资源的访问总量,避免系统过载。
- 分布式系统:
- 在分布式环境下,单机限流无法满足需求时,使用集群限流。
- 多租户系统:
- 需要对不同租户的流量进行全局控制。
示例:Sentinel 集群限流配置
1. 部署 Token Server
public class ClusterTokenServerDemo {
public static void main(String[] args) throws Exception {
// 启动 Token Server
ClusterTokenServer tokenServer = new SentinelDefaultTokenServer();
tokenServer.start();
}
}
2. 配置 Token Client
public class ClusterTokenClientDemo {
public static void main(String[] args) {
// 配置 Token Client
ClusterClientConfig clientConfig = new ClusterClientConfig();
clientConfig.setServerHost("127.0.0.1");
clientConfig.setServerPort(18730);
// 初始化 Token Client
ClusterClientStateManager.applyNewConfig(clientConfig);
}
}
3. 定义资源规则
在 Sentinel 控制台中,定义资源规则:
- 资源名:
/api/test
- 限流模式:集群限流
- 全局 QPS:1000
总结
Sentinel 的集群限流通过 Token Server 和 Token Client 的协作,实现了分布式系统中的全局流量控制。它支持高可用性、动态调整和易于集成,适用于高并发、分布式和多租户系统。通过合理配置 Token Server 和 Token Client,可以有效保护系统的稳定性。
THE END
暂无评论内容