流量治理¶
服务网格的流量路由规则可以让您很容易的控制服务之间的流量和 API 调用。 服务网格简化了服务级别属性的配置,比如熔断器、超时和重试,并且能轻松的设置重要的任务。 它还提供了开箱即用的故障恢复特性,有助于增强应用的健壮性,从而更好地应对被依赖的服务或网络发生故障的情况。
服务网格的流量管理模型源于和服务一起部署的 Envoy 代理。 网格内服务发送和接收的所有流量(data plane 流量)都经由 Envoy 代理,这让控制网格内的流量变得异常简单,而且不需要对服务做任何的更改。
为了在网格中导流,服务网格需要知道所有的 endpoint 在哪和属于哪个服务。 为了定位到 service registry (服务注册中心),服务网格会连接到一个服务发现系统。 例如,如果您在 Kubernetes 集群上安装了服务网格,那么它将自动检测该集群中的服务和 endpoint。
使用此服务注册中心,Envoy 代理可以将流量定向到相关服务。 大多数基于微服务的应用程序,每个服务的工作负载都有多个实例来处理流量,称为负载均衡池。 默认情况下,Envoy 代理基于轮询调度模型在服务的负载均衡池内分发流量,按顺序将请求发送给池中每个成员,一旦所有服务实例均接收过一次请求后,重新回到第一个池成员。
服务网格基本的服务发现和负载均衡能力为您提供了一个可用的服务网格,但它能做到的远比这多的多。 在许多情况下,您可能希望对网格的流量情况进行更细粒度的控制。 作为 A/B 测试的一部分,您可能想将特定百分比的流量定向到新版本的服务,或者为特定的服务实例子集应用不同的负载均衡策略。 您可能还想对进出网格的流量应用特殊的规则,或者将网格的外部依赖项添加到服务注册中心。 通过使用服务网格的流量管理 API 将流量配置添加到服务网格,就可以完成这些工作,甚至还可以拓展更多的能力。
和其他服务网格配置一样,这些 API 也使用 Kubernetes 的自定义资源定义(CRDs)来声明,您可以使用 YAML 进行配置。
流量治理策略¶
-
限流
限流是流量限速(Rate Limit)的简称,指只允许指定的流量进入系统,超过阈值的流量将被拒绝服务、排队或等待、降级等。 限流是为了保障机器和整体业务的稳定性,避免系统雪崩。
-
降级
当服务器压力剧增时,根据实际业务情况及流量,对非核心、非关键的服务有策略地不处理或简化处理,从而释放部分服务器资源以保证核心服务正常运作或高效运作。 当整个微服务架构整体的负载超出了预设上限或即将到来的流量预计会超过设定的阈值时,可以做降级处理。
-
熔断
熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。 在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,超过设定的阈值时,上游服务会暂时切断对下游服务的调用,从而保护系统整体的可用性。 这种牺牲局部,保全整体的措施就叫做熔断。