Spring Cloud 核心组件?
| 组件 | 第⼀代 Spring Cloud Netflix (SCN) | 第⼆代 Spring Cloud Alibaba(SCA) |
|---|---|---|
| 注册中⼼ | Netflix Eureka | 阿⾥巴巴 Nacos |
| 客户端负载均衡 | Netflix Ribbon | 阿⾥巴巴 Dubbo LB、SpringCloud Loadbalancer |
| 熔断器 | Netflix Hystrix | 阿⾥巴巴 Sentinel |
| ⽹关 | Spring Cloud Gateway | Spring Cloud Gateway |
| 配置中⼼ | Spring Cloud Config | 阿⾥巴巴 Nacos |
| 服务调⽤ | Netflix Feign(RestTemplate+Ribbon+Hystrix) | 阿⾥巴巴 Dubbo RPC |
| 消息驱动 | Spring Cloud Stream | |
| 链路追踪 | Spring Cloud Sleuth/Zipkin | |
| . | . | 阿⾥巴巴 seata 分布式事务⽅案 |
Spring Cloud 与 Dubbo 对比?
- Dubbo基于RPC调⽤
- Spring Cloud Netflix是基于HTTP的,所以效率上没有Dubbo⾼
- Dubbo体系的组件不全,不能够提供⼀站式解决⽅案,⽐如服务注册与发现需要借助于Zookeeper等实现,
- ⽽Spring Cloud Netflix则是真正的提供了⼀站式服务化解决⽅案,且有Spring⼤家族背景。
rpc:
RPC全称为remote procedure call,即远程过程调用。借助RPC可以做到像本地调用一样调用远程服 务,是一种进程间的通信方式。RPC并不是一个具体的技术,而是指整个网络远程调 用过程。
Eureka和ZooKeeper区别?
- ZooKeeper中的节点服务挂了就要选举在选举期间注册服务不可用的,选举就是改微服务做了集群,必须有一台主其他的都是从
- Eureka各个节点是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服务可用。
- Eureka本质上是一个工程,而ZooKeeper只是一个进程
Spring Cloud GateWay
1、介绍网关
提供统⼀的路由⽅式
基于过滤器链可以实现鉴权、流量控制、熔断、路径重写、⽇志监控等。
Spring Cloud GateWay的过滤器分为GateWayFilter和GlobalFilter两种
- GateWayFilter 应⽤到单个路由路由上
- GlobalFilter (全局过滤器) 应⽤到所有的路由上
使用nginx 可以实现GateWay的高可用
GateWay核⼼逻辑:路由转发+执⾏过滤器链
GateWay提供很多路由规则,可以使用正则匹配、请求方式匹配、指定Header正则匹配等,还可以动态路由配置,⾃动从注册中⼼中获取服务列表并访问。
2、网关在我们项目做了什么?
实现了GlobalFilter进行鉴权
鉴权过程:
- 1、定义不需要鉴权的url,如'/oauth','/user/login',
- 2、从请求的header里面拿到token,没有token且不是 不需要鉴权的url 返回401
- 3、从token里面拿到jwt对象
- 4、从jwt获取到userId,userName
- 5、将userId,userName放到请求的header里面,如果请求是忽略url,则过滤器直接放行了,用户信息就分发到下游的微服务
- 6、用户端不需要鉴权,只验证jwt
- 7、管理员端需要调用权限服务查询用户对该请求的url是否有权限
一句话: 将用户信息放到请求的header里面,忽略url直接放行,用户端只验证jwt,管理员端需要判断是否有权限。
Ribbon
Nginx与Ribbon的区别?
负载均衡⼀般分为服务器端负载均衡和客户端负载均衡
- 服务器端负载均衡:Nginx,Nginx是反向代理同时可以实现负载均衡,请求通过nginx服务器进行转发。
- 客户端负载均衡:Ribbon,Ribbon是Netflix发布的负载均衡器。Eureka⼀般配合Ribbon进⾏使⽤,Ribbon利⽤从Eureka中读取到服务信息,在调⽤服务提供者提供的服务时,会根据⼀定的算法进⾏负载。
Ribbon是怎么使用的?
不需要引⼊额外的Jar坐标,因为在服务消费者中我们引⼊过eureka-client,它会引⼊Ribbon相关Jar
通过 @LoadBalanced注解 开始开启客户端负载均衡。
Ribbon负载均衡策略?
- 轮询策略
- 随机策略
- 重试策略
- 最⼩连接数策略
- 可⽤过滤策略
- 区域权衡策略(默认策略):扩展了轮询策略除了过滤超时和链接数过多的server,还会过滤掉不符合要求的区域⾥⾯的所有节点,在⼀个区域/机房内的服务实例中轮询
Ribbon底层实现原理?
使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。
Hystrix
属于⼀种容错机制,具有服务降级,服务熔断,服务隔离,监控等一些防止雪崩的技术。
什么是微服务中的雪崩效应?
假设微服务A调⽤微服务B和微服务C,微服务B和微服务C⼜调⽤其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某 个微服务的调⽤响应时间过⻓或者不可⽤,对微服务A的调⽤就会占⽤越来越多的系统资源,进⽽引起系统崩溃,所谓的“雪崩效应”。
雪崩效应解决方案
服务熔断
- 服务熔断重点在“断”,切断对下游服务的调⽤
- 服务熔断和服务降级往往是⼀起使⽤的,Hystrix就是这样。
服务降级
返回兜底数据,通常是在Feign组件@FeignClient注解中定义fallback回调方法
服务限流
- 限制总并发数(⽐如数据库连接池、线程池)
- 限制瞬时并发数(如nginx限制瞬时并发连接数)
Feign
Feign和openFeign的区别?
Feign是⼀个以Java接⼝注解的⽅式调⽤Http请求的客户端,SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解 (OpenFeign)
Feign = RestTemplate+Ribbon+Hystrix
SpringCloud有几种调用接口方式
- Feign
- RestTemplate:需要自己去拼接url
Sentinel
Hystrix和Sentinel的区别
- 1、从隔离策略上来讲都是信号量隔离(根据并发线程数限流)
- 2、从熔断降级策略上来讲都基于响应时间、异常比率,Sentinel多了异常数
- 3、从功能上的实时统计实现来讲,Sentinel滑动窗口(LeapArray)Hystrix滑动窗口(基于 RxJava)
- 4、动态规则配置都是支持多种数据源
- 5、都具有扩展性和基于注解的支持
- 6、从限流上来讲Sentinel是基于 QPS,支持基于调用关系的限流,而Hystrix只有有限的支持
- 7、Sentinel支持流量整形支持预热模式、匀速器模式、预热排队模式(流量规则处可配置),而Hystrix不支持
- 8、Sentinel的控制台提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等,而Hystrix只有简单的监控查看
服务注册和发现是什么意思?Spring Cloud 如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。Eureka服务注册和发现可以在这种情况下提供帮助。 由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。
微服务rpc远程服务调用最核心的是什么?
服务的注册与发现,就是要做到高可用。试想你的注册中心只有一个服务,一旦挂了会导致整个服务不可用。搭建注册中心的集群,实现负载均衡和故障容错。