通过 Spring Cloud Tencent 实现就近路由,只需要在服务实例上打上以下环境变量即可。
- SCT_METADATA_CAMPUS
- SCT_METADATA_ZONE
- SCT_METADATA_REGION
2.4 服务限流(Spring Cloud Tencent Polaris Ratelimit)
随着业务发展的日益壮大,网络请求量也越来越多,导致在某些场景下,业务应用的服务端会出现爆发式的流量涌入,因此需要对服务提供方的给予一些保护手段。通过服务限流功能,开发者可以通过控制 QPS 的方式,以避免被瞬时的流量高峰冲垮,从而保障系统的高可用性。服务限流主要有两个应用场景, 过载保护 和 业务防刷 。过载保护是保护业务不被突发流量打垮,业务防刷是防止恶意用户发送过多流量影响其他正常用户。Spring Cloud Tencent 内置了针对 Spring Web 和 Spring WebFlux 场景的限流 Filter 帮助业务快速接入北极星的限流能力。
Spring Cloud Tencent 支持北极星提供的两种类型的服务限流能力,即单机限流与分布式限流。
单机限流
单机限流是针对单个被调实例的级别的限流,流量限额只针对当前被调实例生效,不共享,如下图所示。单机限流一般适用于保护服务自身不被打垮,按照每个服务集群单机的容量来计算配额。
(图:单机限流示例图)
单机限流的效果分为 快速失败 和 匀速排队 。快速失败指的是当 QPS 到达限流规则指定的配额时,立刻返回一个限流类型错误响应给所有超过阈值的请求。而匀速排队是一种基于漏桶算法实现的削峰填谷限流方式,帮助服务端能够在流量洪峰到达时,还能保证一个匀速处理的状态,让一部分请求在一段排队等待时间后还能被处理,而不是直接失败。关于匀速排队的详细介绍可以参考 Github 官方 Wiki。