#博学谷IT学习技术支持#
个人笔记后续会进行内容改进
SpringCloud 核心组件
l Eureka: 注册中心, 服务注册和发现
l Ribbon: 负载均衡, 实现服务调用的负载均衡
l Hystrix: 熔断器
l Feign: 远程调用
l Gateway: 网关
l Spring Cloud Config: 配置中心
(1)Eureka
提供服务注册和发现, 是注册中心. 有两个组件: Eureka 服务端和 Eureka 客户端
l Eureka 服务端: 作为服务的注册中心, 用来提供服务注册, 支持集群部署.
l Eureka 客户端: 是一个 java 客户端, 将服务注册到服务端, 同事将服务端的信息缓存
到本地, 客户端和服务端定时交互.
1. 原理
l Eureka-Server:就是服务注册中心(可以是一个集群),对外暴露自己的地址。
l 提供者:启动后向 Eureka 注册自己信息(地址,服务名称等),并且定期进行服务续
约
l 消费者:服务调用方,会定期去 Eureka 拉取服务列表,然后使用负载均衡算法选出一
个服务进行调用。
l 心跳(续约):提供者定期通过 http 方式向 Eureka 刷新自己的状态
2. 服务下线、失效剔除和自我保护
l 服务的注册和发现都是可控制的,可以关闭也可以开启。默认都是开启
l 注册后需要心跳,心跳周期默认 30 秒一次,超过 90 秒没发心跳认为宕机
l 服务拉取默认 30 秒拉取一次.
l Eureka 每个 60 秒会剔除标记为宕机的服务
l Eureka 会有自我保护,当心跳失败比例超过阈值(默认 85%),那么开启自我保护,不
再剔除服务。
l Eureka 高可用就是多台 Eureka 互相注册在对方上.
(2)Ribbon
l Ribbon 是 Netflix 发布的云中服务开源项目. 给客户端提供负载均衡, 也就是说
Ribbon 是作用在消费者方的.
l 简单来说, 它是一个客户端负载均衡器, 它会自动通过某种算法去分配你要连接的机
器.
l SpringCloud 认为 Ribbon 这种功能很好, 就对它进行了封装, 从而完成负载均衡.
l Ribbon 默认负责均衡策略是轮询策略.
(3)Hystrix 熔断器
l 有时候可能是网络问题, 一些其它问题, 导致代码无法正常运行, 这是服务就挂了, 崩
溃了. 熔断器就是为了解决无法正常访问服务的时, 提供的一种解决方案.
l 解决因为一个服务崩溃而引起的一系列问题, 使问题只局限于这个服务中,不会影响其
他服务.
l Hystrix 提供了两种功能, 一种是服务降级, 一种是服务熔断.
1. 服务降级原理
n Hystrix 为每个服务分配了小的线程池, 当用户发请求过来, 会通过线程池创建线
程来执行任务, 当创建的线程池已满或者请求超时(这里和多线程线程池不一样,不
存在任务队列), 则启动服务降级功能.
n 降级指的请求故障时, 不会阻塞, 会返回一个友好提示(可以自定义, 例如网站维
护中请稍后重试), 也就是说不会影响其他服务的运行.
2. 服务熔断原理
状态机有 3 个状态:
l Closed:关闭状态(断路器关闭),所有请求都正常访问。
l Open:打开状态(断路器打开),所有请求都会被降级。Hystix 会对请求情况计数,
当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比
例的阈值是 50%,请求次数最少不低于 20 次。
l Half Open:半开状态,open 状态不是永久的,打开后会进入休眠时间(默认是 5S)。
随后断路器会自动进入半开状态。此时会释放 1 次请求通过,若这个请求是健康的,
则会关闭断路器,否则继续保持打开,再次进行 5 秒休眠计时。
(4)Feign: 远程调用组件
l 后台系统中, 微服务和微服务之间的调用可以通过 Feign 组件来完成.
l Feign 组件集成了 Ribbon 负载均衡策略(默认开启的, 使用轮询机制), Hystrix 熔断器
(默认关闭的, 需要通过配置文件进行设置开启)
l 被调用的微服务需要提供一个接口, 加上@@FeignClient("url")注解
l 调用方需要在启动类上加上@EnableFeignClients, 开启 Feign 组件功能.
(5)Gateway: 路由/网关
l 对于项目后台的微服务系统, 每一个微服务都不会直接暴露给用户来调用的, 但是如果
用户知道了某一个服务的 ip:端口号:url:访问参数, 就能直接访问你. 如果再是恶意访问,
恶意攻击, 就会击垮后台微服务系统.因此, 需要一个看大门的大 boss, 来保护我们的
后台系统.
l Gateway 支持过滤器功能,对请求或响应进行拦截,完成一些通用操作。
Gateway 提供两种过滤器方式:“pre”和“post”
pre 过滤器,在转发之前执行,可以做参数校验、权限校验、流量监控、日志输出、
协议转换等。
post 过滤器,在后端微服务响应之后并且给前端响应之前执行,可以做响应内容、
响应头的修改,日志的输出,流量监控等。
l Gateway 还提供了两种类型过滤器
(一) GatewayFilter:局部过滤器,针对单个路由
1. GatewayFilter 局部过滤器,是针对单个路由的过滤器。
2. 在 Spring Cloud Gateway 组件中提供了大量内置的局部过滤器,对请求和响应
做过滤操作。
3. 遵循约定大于配置的思想,只需要在配置文件配置局部过滤器名称,并为其指定对
应的值,就可以让其生效.
(二) GlobalFilter :全局过滤器,针对所有路由.
1. GlobalFilter 全局过滤器,不需要在配置文件中配置,系统初始化时加载,并作用
在每个路由上。
2. Spring Cloud Gateway 核心的功能也是通过内置的全局过滤器来完成。
3. 自定义全局过滤器步骤:
1 定义类实现 GlobalFilter 和 Ordered 接口
2 复写方法
3 完成逻辑处理
(6)Spring Cloud Config
l 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所
以需要分布式配置中心组件。在 Spring Cloud 中,有分布式配置中心组件 spring
Cloud Config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程
Git 仓库中.