降级

降级

要做一个基于kong的降级先关服务。
网上找到一个用 balancer_by_lua 加上 https://github.com/rrfeng/lua-resty-upstream-etcd 实现了基于 etcd 的简单服务发现。

然后如果后端不够稳定或者流量过高的时候可能会直接压垮,所以通常服务治理框架都有熔断机制,即在发现后端失败率过高的时候,限制访问频率,进行服务降级等。

例如在某个 phase 统计 upstream peer 返回的错误数量,达到比如 10% 就减少 10% 的流量(随机丢弃,返回空数据等)。

特定 phase 或 back worker 收集后端任务健康信息,并计算好每个负载自身的状态,比如权重等。

balancer_by_lua 里,直接使用这些状态值,从而达到熔断或降级目的。
暂时想到两种办法,一种是 balancer 里通过 get_last_failure 来统计,这样的话比较切入自己编写的 balancer 模块。但是可能需要一些额外的配置,比如 proxy_next_upstream off 的情况下就不行了。并且可能需要在 set_current_peer 同时将 peer 保存到 ctx 里(不知道是否 retry 的时候 last tried peer 是否会带进来的)?

另一种是在 log phase,统计各种状态码,然后将统计信息反馈到 balancer module 里去。

posted @ 2017-06-13 20:00  mentalidade  阅读(646)  评论(0编辑  收藏  举报