目录
upstream概念及作用
upstream是Kong网关将流量转发到的多个target的集合,target可以是域名、ip,不同target可以有不同的port,且可分配不同的权重。通过使用upstream,Kong网关提供如下功能:
- 健康检查:Kong网关以特定策略,对target进行探活探死,若target不可用,Kong会将流量转发至其它健康的target;
- 熔断:根据健康检查的状态,对客户端请求进行熔断,防止后端级联服务雪崩;
- 负载均衡:使用ring-blancer将客户端流量均衡负载到健康的target上。
在实际生产环境中,upstream取代service中配置的单个host,结构图如下:
健康检查
健康检查方式
健康检查的目的是动态地将target标记为健康或不健康的状态。每个Kong服务节点分别确定target的健康状况,不会在集群范围内同步target的健康信息。因为Kong服务节点1可成功连接到target,而此时Kong服务节点2则可能因网络原因无法连接到target,第一个Kong服务节点1将target标记为健康状态,可正常路由客户端请求,第Kong服务节点2将target标记为不健康,将流量路由到其它健康的target。
Kong支持两种模式的健康检查,可以单独使用或结合使用:
主动检查(active checks):定期请求target的特定的HTTP或HTTPS的endpoint,根据其响应确定目标的健康状况;
被动检查(passive checks):也被称为断路器模式,该模式下Kong通过分析所代理的实时流量,根据target的响应状态确定target的健康状况。
判定target是否健康
Kong的两种健康检查方式都会产生用于判断target是否健康的数据,一次客户端调用可能会产生TCP错误、连接超时或产生特定的HTTP状态码,根据这些信息,Kong的健康检查程序会更新内部的相关计数器:
- 如果target返回的状态码为“健康”状态,会增加target的“成功”计数器,并清除所有其他计数器;
- 如果Kong和target连接失败,将增加target的“TCP失败”计数器,并清除“成功”计数器;
- 如果Kong获取target的响应超时,将增加target的“超时”计数器,并清除“成功”计数器;
- 如果target返回“不健