主要概念:
Eureka
:注册中心
Zuul(gateway)
:服务网关
Ribbon
:负载均衡
Feign
:服务调用
Hystrix
:熔断器
版本对应关系:
![](https://i-blog.csdnimg.cn/blog_migrate/6138a6ad2db2e260a3afaf2f6b64ce45.png)
Eureka
注册中心
![](https://i-blog.csdnimg.cn/blog_migrate/f0ba157175580e7479fe9281bf29865f.png)
Eureka
:就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:启动后向
Eureka
注册自己信息(地址,提供什么服务)
消费者:向
Eureka
订阅服务,
Eureka
会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳
(
续约
)
:提供者定期通过
HTTP
方式向
Eureka
刷新自己的状态
![](https://i-blog.csdnimg.cn/blog_migrate/4b89cdaa1a8a82cad8d8fff1e437f90b.png)
Eureka架构中的三个核心角色:
服务注册中心
Eureka
的服务端应用,提供服务注册和发现功能,就是刚刚我们建立的
eureka-server
服务提供者
提供服务的应用,可以是
Spring Boot
应用,也可以是其它任意技术实现,只要对外提供的是
REST风格服务即可。本例中就是我们实现的
user-service
服务消费者
消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。本例中就是我们实现的
consumer-demo
高可用的
Eureka Server
Eureka Server
即服务的注册中心,在刚才的案例中,我们只有一个
EurekaServer
,事实上
EurekaServer也可以是一个集群,形成高可用的
Eureka
中心 。
Eureka Server
是一个
web
应用,可以启动多个实例(配置不同端口)保证
Eureka Server
的高可用
多个
Eureka Server
之间也会互相注册为服务,当服务提供者注册到
Eureka Server集群中的某个节点时,该节点会 把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到
Eureka Server集群中的任 意一个节点,都可以获取到完整的服务列表信息。
而作为客户端,需要把信息注册到每个
Eureka
中
负载均衡
Ribbon
![](https://i-blog.csdnimg.cn/blog_migrate/1967ea01056ca246d7e819f996e94c28.png)
Hystrix 熔断
Hystix
是
Netflflix
开源的一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败。
Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加 速失败判定时间。
用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超 时,则会进行降级处理
用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息) 。
服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它 服务没有响应。
触发
Hystrix
服务降级的情况:
线程池已满
请求超时
Feign伪装
Feign
可以把
Rest
的请求进行隐藏,伪装成类似
SpringMVC
的
Controller
一样。你不用再自己拼接
url,拼接参数等 等操作,一切都交给
Feign
去做。
Feign
中本身已经集成了
Ribbon
依赖和自动配置
Feign
默认也有对
Hystrix
的集成
Feign
的客户端
![](https://i-blog.csdnimg.cn/blog_migrate/44078dba5651f197fd6a12185e694fa8.png)
首先这是一个接口,
Feign
会通过动态代理,帮我们生成实现类。这点跟
Mybatis
的
mapper
很像
@FeignClient
,声明这是一个
Feign
客户端,同时通过
value
属性指定服务名称
接口中的定义方法,完全采用
SpringMVC
的注解,
Feign
会根据注解帮我们生成
URL
,并访问获取结果
@GetMapping
中的
/user
,请不要忘记;因为
Feign
需要拼接可访问的地址
Spring Cloud Gateway
网关
Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。
Spring Cloud Gateway
是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点
IP端口信息,从而加强安全保护。
Spring Cloud Gateway
本身也是一个微服务,需要注册到
Eureka
服务注册中心。
网关的核心功能是:过滤和路由
![](https://i-blog.csdnimg.cn/blog_migrate/06a1b6135aa3b848c4f34f0f617dbad0.png)
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都可经过网关,然后再 由网关来实现 鉴权、动态路由等等操作。
Gateway
就是我们服务的统一入口。
核心概念
路由(route
)
路由信息的组成:由一个
ID
、一个目的
URL
、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求
URL
和配置路由匹配。
断言(Predicate
)
Spring Cloud Gateway
中的断言函数输入类型是
Spring 5.0框架中的 ServerWebExchange
。
Spring Cloud Gateway
的断言函数允许开发者去定义匹配来自于
HTTP Request中的 任何信息比如请求头和参数。
过滤器(Filter
)
一个标准的
Spring WebFilter
。
Spring Cloud Gateway
中的
Filter
分为两种类型的
Filter,分别是
Gateway Filter
和
Global Filter
。过滤器
Filter
将会对请求和响应进行修改处理
Spring Cloud Confifig
分布式配置中心
在分布式系统中,由于服务数量非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集 中管理,需要分布式配置中心组件。在
Spring Cloud
中,提供了
Spring Cloud Confifig,它支持配置文件放在配置服 务的本地,也支持放在远程
Git
仓库(
GitHub
、码云)。
![](https://i-blog.csdnimg.cn/blog_migrate/a31ae1b537df36c1a51c8730d1cf5c87.png)
配置中心本质上也是一个微服务,同样需要注册到Eureka服务注册中心!