在 Vue 项目中,若想通过网络去请求一些数据,就需要使用 Axios 啦。
(五)Vue 状态管理—— Vuex
Spring Cloud 网关 Gateway
序言
当客户端发出一些对微服务获取资源的请求到后端,这些请求将通过 FS、 Nginx 等设施的路由和负载均衡分配并转发到各个不同的服务实例上。为了让这些设施能够正确路由与分发请求,运维人员需要手工维护这些路由规则与服务实例列表, 当有实例增减或是 IP 地址变动等情况发生的时候,也需要手工地去同步修改这些信息以保持实例信息与中间件的一致。当系统规模不断增大时,这些看似简单的维护任务会变得越来越麻烦,且配置出错概率也会增加。
很显然,上述做法并不可取,因此,我们需要一套机制来有效降低维护路由规则与服务实例列表的难度。
对于某些服务的权限校验(如用户登录状态的校验),若突然发现校验逻辑有个 BUG 需要修复,或者需要对其做一些扩展和优化,此时就不得不去每个应用里修改这些逻辑,这样的修改不仅会引起开发入员的抱怨,更会加重测试人员的负担。所以,我们也需要一套机制,能够很好地解决微服务架构中,对于微服务接口访问时各前置校验的冗余问题。
这时候就可以使用 API 网关,Gateway 就是一种网关。
Spring Cloud 网关 Zuul
由于后起之秀 Gateway 的诞生,不建议在新项目中再使用 Zuul。
序言
当客户端发出一些对微服务获取资源的请求到后端,这些请求将通过 FS、 Nginx 等设施的路由和负载均衡分配并转发到各个不同的服务实例上。为了让这些设施能够正确路由与分发请求,运维人员需要手工维护这些路由规则与服务实例列表, 当有实例增减或是 IP 地址变动等情况发生的时候,也需要手工地去同步修改这些信息以保持实例信息与中间件的一致。当系统规模不断增大时,这些看似简单的维护任务会变得越来越麻烦,且配置出错概率也会增加。
很显然,上述做法并不可取,因此,我们需要一套机制来有效降低维护路由规则与服务实例列表的难度。
对于某些服务的权限校验(如用户登录状态的校验),若突然发现校验逻辑有个 BUG 需要修复,或者需要对其做一些扩展和优化,此时就不得不去每个应用里修改这些逻辑,这样的修改不仅会引起开发入员的抱怨,更会加重测试人员的负担。所以,我们也需要一套机制,能够很好地解决微服务架构中,对于微服务接口访问时各前置校验的冗余问题。
这时候就可以使用 API 网关,Zuul 就是一种网关。
Spring Cloud 声明式服务调用组件 Feign
序言
在前面的例子中,我们使用了 Ribbon 的负载均衡功能,大大优化了远程调用时的代码:1
2String url = "http://user-service/user/" + id;
return restTemplate.getForObject(url, String.class);
但是,我们以后可能需要编写类似的重复代码,格式基本相同,无非参数不一样,有没有更优雅的方式来对这些代码再次优化呢?
而且,我们使用了 Hystrix 的熔断功能,但将熔断的方法直接嵌套在业务代码中间,会不会显得有些杂乱?这一点又能不能优化呢?
当然可以,Feign 对 Ribbon 和 Hystrix 都进行了封装,上面 2 个都是小 case 。
Feign 基于 Netflix Feign 实现,它整合了 Ribbon 与 Hystrix , 除了提供这两者的强大功能之外,它还提供了一种声明式的 Web 服务客户端定义方式。
Spring Cloud 服务容错保护 Hystrix
由于后起之秀 Sentinel 的诞生,不建议在新项目中再使用 Hystrix。
序言
在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定。
为了解决这样的问题, 产生了熔断器等一系列的服务保护机制。
在分布式架构中, 断路器模式的作用也是类似的,当某个服务单元发生故障(类似电器发生短路) 之后, 通过熔断器的故障监控(类似熔断保险丝), 向调用方返回一个错误响应, 而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
Hystrix 就是一种熔断器,具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能.。
Spring Cloud 服务治理框架 Eureka
序言
前文说过,若一个项目里有过多的微服务,人为管理起来非常麻烦,因此迫切需要能够自动管理微服务的东东,这个东东叫做服务治理框架,它提供了 2 个功能:
- 服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。
- 服务发现:由于在服务治理框架下运作,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。所以,服务调用方在调用服务提供方接口的时候,并不知道具体的服务实例位置。因此,调用方需要向服务注册中心咨询服务,并获取所有服务的实例清单,以实现对具体服务实例的访问。
Eureka 就是是服务治理框架之一。
初识 Spring Cloud
微服务
开始使用 Spring Cloud 之前,我们先来了解下什么是微服务。
什么是微服务?
简单来讲微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个服务代表着一个小的业务组件。
网上解释微服务的文章很多,具体可以自己去查询。
通常而言,一个微服务框架的应用程序有下列特性:
- 每个服务都容易被取代
- 服务是以功能来组织的,例如用户界面、前端、推荐系统、账单或是物流等
- 由于功能被拆成多个服务,因此可以由不同的编程语言、数据库实现
- 架构是对称而非分层(即生产者与消费者的关系)
微服务是一种架构方式,最终肯定需要技术架构去实现。
微服务的实现方式很多,但是最火的莫过于 Spring Cloud 了。
那么什么是 Spring Cloud 呢?