背景:现在比较流行的rpc框架,如:spring cloud,dubbox等,现在公司内部由于服务之间的依赖关系复杂,故其一服务down了,我们必须保证调用方的服务是可用的,而不必要一直请求调用方,这样只会浪费本服务的资源,影响对外的相应,故引入相应的服务熔断降级。
一、前言
目前,公司采用的rpc框架是dubbox,故可以依赖dubbox提供的调用方,使用hystrix,实现消费者的filter接口,来实现,具体可见:https://github.com/liaomengge/dubbo-hystrix-support,但是此做法存在很多缺陷。具体如下:
1. 此做法必须要消费者和生产者两端都使用dubbox框架,但目前,公司的消费端,依旧使用的php
2.由于hystirx本身的限制,必须明确各服务之间调用的线程数,故对于很平滑的接口,是可以的,但目前对于公司来说,一天的量都会存在2个高峰,故此时线程数的设置不能很好的把控
二、解决方案(针对缺陷一)
针对方案一,我们可以不适用dubbox框架自带的,而是自己封装一套,具体可见:https://github.com/liaomengge/hystrix_demo
三、解决方案(针对缺陷二)
针对方案二,我们不依赖hystrix,采用自己写一个简单的熔断降级监控方案来实现,简单的熔断降级(可能不精确),当然网上也有其他的解决方案,比如:vertx,是基于Rxjava,来实现的,具体的没怎么研究。
待更新。。。
期待有其他更好的解决方案能一起分享