主要概念:
Eureka :注册中心
Zuul(gateway) :服务网关
Ribbon :负载均衡
Feign :服务调用
Hystrix :熔断器
版本对应关系:
Eureka 注册中心
Eureka :就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:启动后向 Eureka 注册自己信息(地址,提供什么服务)
消费者:向 Eureka 订阅服务, Eureka 会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳 ( 续约 ) :提供者定期通过 HTTP 方式向 Eureka 刷新自己的状态
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
Hystrix 熔断
Hystix 是 Netflflix 开源的一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败。
Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加 速失败判定时间。
用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超 时,则会进行降级处理
用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息) 。
服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它 服务没有响应。 触发 Hystrix 服务降级的情况:
线程池已满
请求超时
Feign伪装
Feign 可以把 Rest 的请求进行隐藏,伪装成类似 SpringMVC 的 Controller 一样。你不用再自己拼接 url,拼接参数等 等操作,一切都交给 Feign 去做。
Feign 中本身已经集成了 Ribbon 依赖和自动配置
Feign 默认也有对 Hystrix 的集成
Feign 的客户端
首先这是一个接口, 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 服务注册中心。
网关的核心功能是:过滤和路由
不管是来自于客户端(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 、码云)。
配置中心本质上也是一个微服务,同样需要注册到Eureka服务注册中心!