zuul简介
zuul是Netflix开源的微服务网关,包含了对请求的路由和过滤两个主要的功能
- 路由,负责将外部请求转发到具体的微服务实例上,实现外部访问统一入口的基础
- 过滤,负责对请求的过程进行干预,实现请求校验、服务聚合等功能
将zuul注册到注册中心中,同时从注册中心中获取其他微服务的消息,之后访问其他微服务都是通过zuul进行跳转的
多个微服务之间调用的时候,微服务A调用微服务B,微服务B调用微服务C,如果微服务C出现问题或者响应时间过长,就会导致微服务A占用越来越多的系统资源,进而导致系统崩溃,称为服务雪崩,其是由于提供者不可用导致消费者不可用,并将不可用逐渐放大的过程
如何防止雪崩呢?
Hystrix是由Netflix开源的一个用于处理分布式系统的延迟和容错的开源库,在分布式系统,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性,”断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间等待或抛出调用方无法处理的异常,保证了调用方的线程不会被长时间的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩
Ribbon中有七种负载均衡算法可供选择
RoundRobinRule,轮询
RandomRule,随机
AvailabilityFilteringRule,会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务(可以通过niws.loadbalancer.
WeightedResponseTimeRule,根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule
RetryRule,先按照轮询策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用服务
BestAvailableRule,会先过滤掉由于多次访问故障而处于跳闸状态的服务,然后选择一个并发量最小的进行访问
ZoneAvoidanceRule,复合判断server所在区域的性能和server的可用性选择