Java技术栈选择初级指南
一文读懂Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系
限流和熔断:Sentinel、Hystrix、Resillience4j
参考: 书籍《spring cloud微服务架构 实战派》龙中华-电子工业出版社-P157
Sentinel | Hystrix | Resilience4j | |
---|---|---|---|
隔离策略 | 信号量隔离(并发线程数限流) | 线程池隔离/信号量隔离 | 信号量隔离 |
熔断降级策略 | 基于响应时间、异常比率、异常数 | 基于异常比率 | 基于异常比率、响应时间 |
实时统计实现 | 滑动窗口(LeapArray) | 滑动窗口(基于RxJava) | 环形缓冲器(Ring Bit Buffer) |
动态规则配置 | 支持多种数据源 | 支持多种数据源 | 有限支持 |
扩展性 | 多个扩展点 | 插件的形式 | 接口的形式 |
基于注解的支持 | 支持 | 支持 | 支持 |
限流 | 基于QPS,支持基于调用关系的限流 | 有限的支持 | rate limit |
流量整形 | 支持预热模式、匀速器模式、预热排队模式 | 不支持 | 简单的Rate Limiter模式 |
系统自适应保护 | 支持 | 不支持 | 不支持 |
控制台 | 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 | 简单的监控查看 | 不提供控制台,可对接其他监控系统 |
微服务网关:Zuul、Spring Cloud Gateway
参考: 微服务网关对比和选型:Zuul、Spring Cloud GetWay、Kong和Traefik - 掘金
Spring Cloud Gateway VS Zuul 比较,怎么选择? 书籍《spring cloud微服务架构 实战派》龙中华-电子工业出版社-P172
组件 | Zuul 1.x | Spring Cloud Gateway |
---|---|---|
底层实现 | Servlet 2.5 | Spring 5+ |
API特点 | 阻塞式API、不支持websockets | 非阻塞式API、支持websockets |
请求方式 | 同步请求 | 异步请求 |
服务器 | tomcat | netty(不支持tomcat) |
WebSockets 它可以在用户的浏览器和服务器之间打开交互式通信会话。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
spring cloud gateway实现了熔断和限流
Zuul 2.x 在底层上有了很大的改变,使用了异步无阻塞式的 API,性能改善明显,不过现在 Spring Cloud 也没集成 Zuul 2.x,也无计划整合Zuul2.x. Netflix旗下产品均进入漫长的停更期,知名产品有eureka、hystrix、zuul、ribbon. 在spring cloud 2021更新后,除了eureka仍在使用,其他产品均不再支持。
eureka从1.x于2022年12月升级到了2.x,但此次更新并非Netflix官方,而是由spring完成. eureka2.x最低springboot版本要求3.x
基础工具类:Guava、Hutool
JSON处理:JackSon
安全:Spring Security、Sa-Token
日志:Logback、Log4j2
接口文档:Swagger-UI、Knife4j
负载均衡:ribbon
序号 | 实现类 | 负载均衡策略 |
---|---|---|
1 | RoundRobinRule | 按照线性轮询策略,即按照一定的顺序依次选取服务实例 |
2 | RandomRule | 随机选取一个服务实例 |
3 | RetryRule | 按照 RoundRobinRule(轮询)的策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试(重试时获取服务的策略还是 RoundRobinRule 中定义的策略),如果超过指定时间依然没获取到服务实例则返回 null 。 |
4 | WeightedResponseTimeRule | WeightedResponseTimeRule 是 RoundRobinRule 的一个子类,它对 RoundRobinRule 的功能进行了扩展。 |
根据平均响应时间,来计算所有服务实例的权重,响应时间越短的服务实例权重越高,被选中的概率越大。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到 WeightedResponseTimeRule。 | | 5 | BestAvailableRule | 继承自 ClientConfigEnabledRoundRobinRule。先过滤点故障或失效的服务实例,然后再选择并发量最小的服务实例。 | | 6 | AvailabilityFilteringRule | 先过滤掉故障或失效的服务实例,然后再选择并发量较小的服务实例。 | | 7 | ZoneAvoidanceRule | 默认的负载均衡策略,综合判断服务所在区域(zone)的性能和服务(server)的可用性,来选择服务实例。在没有区域的环境下,该策略与轮询(RandomRule)策略类似。 |