阅读过的书:
Java从入门到精通、Java编程思想、Java并发编程的艺术、深入理解 Java 虚拟机
1. Hystrix熔断框架
用来保障第三方服务调用的可靠性,防止服务雪崩;
使用方法:继承HystrixCommand,命令逻辑写在run方法里,熔断打开时,请求过来执行getFallBack方法;
Hystrix的Metrics中保存了当前服务的健康状况,包括服务调用总次数和服务调用失败次数等。根据Metrics的计数,熔断器从而能计算出当前服务的调用失败率,用来和设定的阈值比较从而决定熔断器的状态切换逻辑,因此Metrics的实现非常重要。
熔断半开,恢复探测。
- 将远程服务调用逻辑封装进一个HystrixCommand。
- 对于每次服务调用可以使用同步或异步机制,对应执行execute()或queue()。
- 判断熔断器(circuit-breaker)是否打开或者半打开状态,如果打开跳到步骤8,进行回退策略,如果关闭进入步骤4。
- 判断线程池/队列/信号量(使用了舱壁隔离模式)是否跑满,如果跑满进入回退步骤8,否则继续后续步骤5。
- run方法中执行了实际的服务调用。
a. 服务调用发生超时时,进入步骤8。 - 判断run方法中的代码是否执行成功。
a. 执行成功返回结果。
b. 执行中出现错误则进入步骤8。 - 所有的运行状态(成功,失败,拒绝,超时)上报给熔断器,用于统计从而影响熔断器状态。
- 进入getFallback()回退逻辑。
a. 没有实现getFallback()回退逻辑的调用将直接抛出异常。
b. 回退逻辑调用成功直接返回。
c. 回退逻辑调用失败抛出异常。 - 返回执行成功结果。
2. 插件扩展机制
定义插件接口,所有插件实现该接口,并在实现类上打上自定义的注解,里面的name就定义为插件名,使用Autowired自动注入所有实现接口的插件类到一个list中,缓存到map中,key值为插件名,后面就根据插件名路由调用插件。
3. 异步回调
使用CompletableFuture类
4. Quartz任务调度框架
scheduler、job、trigger
5. Guava
缓存
缓存定时回收
异步事件总线Event Bus