Spring Cloud微服务架构开发
上QQ阅读APP看书,第一时间看更新

1.3 初识Spring Cloud

1.3.1 Spring Cloud概述

Spring Cloud是一个基于Spring Boot实现的微服务开发架构。它利用Spring Boot的开发便利性巧妙地简化了分布式系统的开发。例如配置管理、服务发现、熔断器使用、智能路由、控制总线等操作,都可以使用Spring Boot做到一键启动和部署。可以说,Spring Cloud将Spring Boot框架进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

Spring Cloud之所以成为当下流行的微服务架构,是因为其具有以下特点。

1.组件丰富,功能齐全

Spring Cloud拥有Spring这个强大后盾,框架的源码也是开源的,而且开发者在不断完善Spring Cloud下的组件,其中包括Eureka服务注册发现中心,主要负责完成微服务架构中的服务管理功能;Spring Cloud Config分布式配置中心,可以实现动态修改配置文件;Hystrix熔断器,通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。这些组件基本覆盖了日常开发的各个方面。

2.开箱即用,快速启动

Spring Cloud是基于Spring Boot开发的,Spring Boot具有快速构建Spring应用、直接嵌入服务器、自动化配置的优点,Spring Cloud继承了Spring Boot快速构建和自动化配置的优点,有开箱即用、快速启动的特点。

3.模块部署方便,项目维护难度降低

Spring Cloud采用模块化开发,按照项目功能将项目拆分为不同的模块,每个模块独立开发运行,模块之间不会互相影响。模块开发完成后,每个模块部署时可以使用Docker进行自动化部署,使得项目部署更加方便。维护时只需要维护具体的模块,不需要改动其他模块的代码,从而降低了模块后期维护的成本。

4.项目扩展性和稳定性较好

基于Spring Cloud的微服务架构中,每个模块基本都是一个Spring Boot项目,它们都有独立的数据库,模块下的功能是横向开发的。如果需要扩展新的功能,就可以新建该功能对应的独立数据库以及新的模块,不需要在之前的模块上修改,这样项目扩展更方便,项目稳定性更好。

5.具有容错处理机制

项目实际开发中会因为网络连接失败、超时、服务器硬件故障等原因导致其中某个模块无法正常运行,从而导致整个项目发生异常,所以容错机制变得尤为重要。Spring Cloud提供了Hystrix组件,该组件专门用于处理容错,从而能保证某个模块出错后系统有其他备用模块或者善后处理。

1.3.2 Spring Cloud微服务架构的组件

Spring Cloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案。Spring Cloud根据分布式服务协调治理的需求成立了许多子项目,每个项目通过特定的组件去实现,下面我们讲解一下Spring Cloud包含的常用组件以及模块。

(1)Spring Cloud Config:分布式配置中心,负责把配置放到远程服务器上,集中化管理集群配置。目前支持本地存储、Git和Subversion。

(2)Spring Cloud Netflix:核心组件,负责对多个Netflix OSS开源套件进行整合。

• Eureka:服务注册发现中心,基于REST服务的分布式中间件,主要用于服务管理。

• Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

• Ribbon:云端负载均衡器。支持多种负载均衡策略,可配合服务发现和熔断器使用,在客户端实现负载均衡。

• Feign:一个REST客户端,基于Ribbon和Hystrix的声明式服务调用组件。

• Zuul:服务网关,为微服务架构集群提供代理、过滤、路由等功能。

(3)Spring Cloud Bus:事件、消息总线,用于在集群(例如配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

(4)Spring Cloud Stream:数据流操作开发包,可与Redis、RabbitMQ、Kafka等架构进行消息发送与接收。

(5)Spring Cloud Sleuth:服务追踪框架,可以与Zipkin、Apache Htrace和ELK等数据分析、服务跟踪系统进行整合,为跟踪服务、解决问题提供了便利。

下面我们来看一个基于Spring Cloud的微服务架构,如图1-4所示。

多学一招:Nginx与Ribbon的比较

Nginx与Ribbon同是负载均衡器,但是它们也有很大的不同。

(1)Nginx(服务器端负载均衡器)

Nginx的作用是系统将客户端所有请求统一交给Nginx,由Nginx实现负载均衡请求转发,即在服务器端实现负载均衡。

(2)Ribbon(客户端负载均衡器)

Ribbon的作用是从Eureka服务注册发现中心上获取服务注册信息列表,缓存到本地,然后在本地实现负载均衡策略,即在客户端实现负载均衡。

图1-4 Spring Cloud架构