一种低配版服务降级方法
h3l · 2018-10-22 20:30:02

现在微服务是潮流,大多数时候,不管基础的微服务设施有没有搭建好,大项目能拆出来一个是一个,反正拆开了就是微服务。

所以系统从原来的函数调用,变成了 http 调用或者是 rpc 的调用。

原意是为了方便管理项目,提高灵活性等等,可是变为 http 调用后,服务变得不那么可靠了。

这个时候也没有所谓的熔断器等等的基础设施。

那么有一种低配版的服务降级方法,就是借助 redis 来实现。伪代码如下:

// 获取当前被阻塞数
unhandledCount := redis.Get("unhandledCount_FUNC_NAME")
// 大于被阻塞数,直接返回失败
if unhandledCount > MAX_UNHANDLED_COUNT{
    return fail
}else{
    redis.Incr("unhandledCount_FUNC_NAME)
    resp := http.get("http://url")
    redis.Decr("unhandledCount_FUNC_NAME")
    return resp
}

这种方法和 timeout 的方法来比的话,最大的好处就是,别的系统再怎么炸,就不会影响自己的系统。所以这种方法不仅适用与微服务的系统调用,所有依赖第三方的调用也可以通过这种方法保障自身服务稳定。

最后,这也只是一个变通的,低配版的方案,要实实在在的解决这个问题,还是要靠正统的方法。

back