0%

zuul简介

zuul是Netflix开源的微服务网关,包含了对请求的路由和过滤两个主要的功能

  • 路由,负责将外部请求转发到具体的微服务实例上,实现外部访问统一入口的基础
  • 过滤,负责对请求的过程进行干预,实现请求校验、服务聚合等功能

将zuul注册到注册中心中,同时从注册中心中获取其他微服务的消息,之后访问其他微服务都是通过zuul进行跳转的

阅读全文 »

Hystrix服务监控

Hystrix除了熔断降级之外,还提供了准实时的调用监控,持续的记录所有通过Hystrix发起的请求的执行信息,并已统计报表的形式展示出来,包括有每秒执行多少请求,多少成功,多少失败等,通过hystrix-metrics-event-stream实现对以上指标的监控

阅读全文 »

Hystrix简介

多个微服务之间调用的时候,微服务A调用微服务B,微服务B调用微服务C,如果微服务C出现问题或者响应时间过长,就会导致微服务A占用越来越多的系统资源,进而导致系统崩溃,称为服务雪崩,其是由于提供者不可用导致消费者不可用,并将不可用逐渐放大的过程

如何防止雪崩呢?

  • 为网络请求设置超时
  • 使用断路器模式

Hystrix是什么

Hystrix是由Netflix开源的一个用于处理分布式系统的延迟和容错的开源库,在分布式系统,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性,”断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间等待或抛出调用方无法处理的异常,保证了调用方的线程不会被长时间的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩

阅读全文 »

Feign简介

Feign是Netflix开发的一个声明式的HTTP客户端(远程服务调用组件),只需要接口+注解即可完成对于微服务的调用,不需要使用RestTemplate+Ribbon来对微服务进行访问,简化了编程,其是基于动态代理机制,目标是减少HTTP调用的复杂性

依赖

1
2
3
4
5
<!-- feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
阅读全文 »

Ribbon的负载均衡算法

提供的负载均衡算法

Ribbon中有七种负载均衡算法可供选择

  • RoundRobinRule,轮询

  • RandomRule,随机

  • AvailabilityFilteringRule,会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务(可以通过niws.loadbalancer..connectionFailureCountThreshold来配置连接失败的次数),还有并发的连接数量超过阈值的服务(可以通过.ribbon.ActiveConnectionsLimit来配置最高并发数),然后对剩余的服务列表按照轮询策略进行访问

  • WeightedResponseTimeRule,根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule

  • RetryRule,先按照轮询策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用服务

  • BestAvailableRule,会先过滤掉由于多次访问故障而处于跳闸状态的服务,然后选择一个并发量最小的进行访问

  • ZoneAvoidanceRule,复合判断server所在区域的性能和server的可用性选择

阅读全文 »