微服务2.0:2022

#博学谷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 仓库中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值