1.4 Spring Cloud与微服务架构
在本节中,我们关注的是基于Spring Cloud开发面向微服务的系统,这也是当下非常主流的一种构建分布式系统的技术体系。
1.4.1 从Spring Boot到Spring Cloud
Spring Cloud具备一个天生的优势,那就是它是Spring家庭的一员,而Spring在Java EE开发领域的强大地位给Spring Cloud起到了很好的推动作用。同时,Spring Cloud基于Spring Boot,而Spring Boot已经成为Java EE领域中最流行的开发框架之一,Spring Cloud被用来简化Spring应用程序的框架搭建和开发过程。Spring Cloud与微服务架构如图1-8所示。
图1-8 Spring Cloud与微服务架构(来自Spring官网)
在微服务架构中,我们将使用Spring Boot来开发单个微服务。同样作为Spring家族新的一员,Spring Boot提供了令人兴奋的特性。正如我们在1.3节中所讨论的,这些特性主要体现在开发过程的简单化,包括支持快速构建项目、不依赖外部容器独立运行、开发部署效率高以及与云平台天然集成等。而在微服务架构中,Spring Cloud构建在Spring Boot之上,继承了Spring Boot配置简单、开发快速、部署轻松的特点,让原本复杂的架构工作变得相对容易上手。
1.4.2 Spring Cloud中的技术组件
技术组件的完备性是我们选择Spring Cloud的主要原因。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了微服务系统基础设施的开发过程,如服务发现注册、API网关、配置中心、消息总线、负载均衡、熔断器、数据监控等都可以基于Spring Boot的开发风格做到一键启动和部署。
在对微服务的各项技术组件进行设计和实现的过程中,Spring Cloud也有自己的一些特色。一方面,它对微服务架构开发所需的技术组件进行了抽象,提供了符合开发需求的独立组件,包括用于配置中心的Spring Cloud Config、用于API网关的Spring Cloud Gateway等。另一方面,Spring Cloud也没有“重复造轮子”,它将目前各家公司现有的比较成熟、经得起实践考验的服务框架组合起来,通过Spring Boot开发风格进行了再次封装。这部分主要指的是Spring Cloud Netflix组件,其中集成了Netflix OSS的Eureka注册中心、Hystrix熔断器、Zuul网关等工具,如图1-9所示。
图1-9 Spring Cloud、Spring Cloud Netflix与Netflix OSS之间的关系
Spring Cloud屏蔽了微服务架构开发所需的复杂配置和实现过程,最终给开发者提供了一套易理解、易部署和易维护的开发工具包。Spring Cloud中的组件非常多,本书无意对所有组件都进行详细展开,而是梳理了开发一个微服务系统所必需的八大核心组件,如图1-10所示。
图1-10 Spring Cloud核心功能组件
可以看到,基于Spring Boot的开发便利性,Spring Cloud巧妙地简化了微服务系统基础设施的开发过程。