如何实现服务降级处理

我在思考一个问题:服务如何降级处理?

比如说,之前有一个接口,要通过另外3个接口来确定一个平均值。假设啊,不一定合理。要获取用户的位置,先去请求高德地图,然后请求百度地图,然后请求腾讯地图。最后三个数据结果对比之后返回给客户端一个综合结果。

那么降级之后,就只需要请求一个接口或者直接不请求,把上次缓存的数据直接返回给用户了。

但是一般情况下,就比如就是一个查DB的请求,如何降级了?

之前看书有说过,定义多个接口权重,比如下面:

  1. 相当重要
  2. 重要
  3. 一般
  4. 可要可不要

这样当服务器负载不过来的时候,可以优先抛弃level 4->level 3...

但是怎么才算负载不过来呢,同时,抛弃的规则应该是什么样的了?

有或者客户端降级,就是客户端统计每个接口的请求和正常响应情况。当大量返回500时,说明服务器负载高的可以,应该避免大量请求。客户端直接告诉用户失败了,而不去请求服务端

规则貌似还是:一段时间内:

canRequest = requestCount - N * responseCount > 0

就是说当正常请求了requestCount个,但是只有responseCount个成功了,其他都返回失败了。

有这么玩的吗?

有人可以具体举个生产环境的例子吗

阅读 8.3k
2 个回答

可以提供一个思路,一个可用的服务列表,一个一场服务列表,每次只从可用服务列表顶部去拿服务,这里可以按照不同的规则给权重排序什么的,异常的服务列表,可以开一个线程去检测恢复情况,如果判断恢复了,重新移回正常的服务列表~

降级的实现方式很多,你这样的情况适合与熔断,采用组合熔断即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题