分布式项目通过业务拆分将项目整体拆分成一个个单独的微服务,通过微服务之间的相互调用来实现整体的功能。
由于每个微服务都是一个独立运行的进程,某个微服务异常就导致依赖它的业务模块都不可用
例:金额录入服务异常。
结果:客户充值、客户付款、商家收款等功能都无法正常使用,从而引申出客户下单失败(系统无法正常记录金额信息,故而订单无法正式生产【网站下一个订单,30分钟无法付款成功,订单自动取消】)
简易图:
服务雪崩:
某个微服务提供者异常可能造成其消费者的线程阻塞(消费者等待提供者返回信息,提供者异常无法正常返回,消费者一直等待),从而消耗掉该调用者服务器的所有资源导致消费者服务器崩掉。以此类推底层服务的异常导致其上游服务器的层层异常、崩溃,从而出现服务雪崩问题。
简图:
服务不可用原因:
- 代码错误
- 网络延迟(网络故障)
- 服务器宕机
- 缓存击穿导致服务器超负荷运行
- 并发超载
- 请求无响应(下级服务异常无返回信息)
基于分布式调用出现的该类问题,由此引申出服务熔断的概念,springcloud通过hystrix组件来实现服务熔断功能从而避免服务雪崩等问题。