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的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
Zookeeper
,Consul
, Eureka
这就叫服务雪崩。妈耶,上面两个熔断和降级你都没给我解释清楚,你现在又给我扯什么服务雪崩?
/>所谓熔断就是服务雪崩的一种有效解决方案。当指定时间窗内的请求失败率达到设定阈值时,系统将通过断路器直接将此请求链路断开。
首先我们会有个桶,如果里面没有满那么就会以一定固定的速率会往里面放令牌,一个请求过来首先要从桶中获取令牌,如果没有获取到,那么这个请求就拒绝,如果获取到那么就放行。很简单吧,啊哈哈、