如果服务器出现了故障,应用程序能够很容易地检测到并且绕过它.
如果服务运行缓慢/性能不佳的时候,绕过它就比较困难了.
原因:
服务降级可以起始于间歇性问题,最终不可逆转.
一般对于远程服务调用,使用同步的方式.
服务的调用者没有超时的概念来阻止服务调用的永久挂起.
应用程序经常被设计为处理远程资源的彻底故障,而不是部分降级.
只要服务没有彻底失败,应用程序后续还会继续调用这项服务,并且不会快速失败.
如果服务器资源耗尽,客户端必须等待,直到要调用的资源变为可用.
所以使用一种方式:
? 远程服务器不可用或者性能不佳的时候,保护远程资源的客户端免于崩溃.
? 处理方式是让客户端快速失败,从而不再消耗服务器的数据库连接池/线程池....等的资源,也能够防止因为远程服务出 现的问题,向客户端的消费者传播.
客户端负载均衡模式
断路器模式
后备模式
舱壁模式
客户端负载均衡,让客户端在服务发现代理中查找服务的所有实例,缓存服务器的物理位置信息.每当客户端需要调用服务的时候,负载均衡器会在它维护的服务列表中返回一个位置信息.
模拟电路短路器的客户端弹性模式.
如果远程服务失效,会执行替代方案.服务不返回异常给客户端.
将远程资源的调用分配到线程池中,从而降低一个性能不佳的远程服务影响整个应用程序的风险.
不同线程池之间不会互相影响.
当前服务所在的线程池饱和也不会影响其它线程池的服务.
原文:https://www.cnblogs.com/reclusiveone/p/14877648.html