Spring Cloud 图解微服务 Sentinel Nacos Ribbon

  • 服务注册与发现:Nacos
  • 服务熔断限流:Sentinel
  • 服务通信调用:Feign
  • 配置中心:Nacos
  • 服务网关:Spring Cloud Gateway
  • 分布式事务:Seata
  • 消息队列:RocketMQ
  • 调用链监控:Sleuth+Zipkin

Hystrix 替换成了 Sentinel,Hystrix 也停止了开发,这个时候 Spring Cloud Alibaba 中的 Sentinel 的优势就很明显了,Sentinel 支持多样化的流量控制,熔断降级等功能,完全可以替代 Hystrix。

Ribbon和Nginx的区别

Nginx是客户端所有请求统一交给Nginx,由Nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求由Nginx服务器端进行转发。客户端负载均衡Ribbon,Ribbon是从Eureka注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。既在客户端实现负载均衡。

应用场景的区别

Nginx适合于服务器端实现负载均衡,比如:Tomcat,Ribbon适合与在微服务中RPC远程调用实现本地服务负载均衡,比如:Dubbo、Spring Cloud中都是采用本地负载均衡。

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避兔的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。Hystrix的出现就是为了解决雪崩效应。

服务降级

整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。

  • 首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
  • 接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
  • Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址

Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法

 Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题

 

ZookeeperConsul, Eureka 

 

 

 这就叫服务雪崩。妈耶,上面两个熔断和降级你都没给我解释清楚,你现在又给我扯什么服务雪崩?

/>所谓熔断就是服务雪崩的一种有效解决方案。当指定时间窗内的请求失败率达到设定阈值时,系统将通过断路器直接将此请求链路断开。

 首先我们会有个桶,如果里面没有满那么就会以一定固定的速率会往里面放令牌,一个请求过来首先要从桶中获取令牌,如果没有获取到,那么这个请求就拒绝,如果获取到那么就放行。很简单吧,啊哈哈、

########################ribbon 负载配置###################
ribbon:
#本地负载规则 最小的并发
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule
#对所有操作请求都进行重试,默认false
OkToRetryOnAllOperations: false
#负载均衡超时时间,默认值5000ms
ReadTimeout: 3000
#ribbon请求连接的超时时间,默认值2000ms
ConnectTimeout: 50000
#对当前实例的重试次数,默认0
MaxAutoRetries: 0
#对切换实例的重试次数,默认1
MaxAutoRetriesNextServer: 0
小蚊子大人
原文地址:https://www.cnblogs.com/ywsheng/p/14949588.html