购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 什么是Spring Cloud

从零开始实现我们在第1章中解释过的所有模式将是一项巨大的工作。幸好,Spring团队将大量经过实战检验的开源项目整合到了一个称为Spring Cloud的Spring子项目中。

Spring Cloud是一个工具集,它将VMware、HashiCorp和Netflix等开源公司的工作封装在交付模式中。Spring Cloud简化了项目的设置和配置,并为Spring应用程序中最常见的模式提供了解决方案。这样我们就可以专注于编写代码,而不会陷入配置构建和部署微服务应用程序的所有基础设施的细节中。图2-1将第1章中列出的模式映射到了实现它们的Spring Cloud项目。

图2-1 通过Spring Cloud,我们可以将打算直接使用的技术与我们到目前为止探讨过的
微服务模式对应起来

2.1.1 Spring Cloud Config

Spring Cloud Config通过集中式服务来处理应用程序配置数据的管理,因此应用程序配置数据(特别是环境特定的配置数据)与部署的微服务是完全分离的。这确保了无论启动多少个微服务实例,这些微服务实例始终具有相同的配置。Spring Cloud Config拥有自己的属性管理存储库,但也可以与以下开源项目集成。

● Git——一个开源版本控制系统,允许开发人员管理和跟踪任何类型的文本文件的更改。Spring Cloud Config集成了Git后端存储库,能从存储库中读出应用程序的配置数据。

● Consul——一种开源的服务发现工具,允许服务实例向该服务注册自己。服务客户端可以向Consul查询其服务实例的位置。Consul还包括键值存储数据库,Spring Cloud Config用它来存储应用程序的配置数据。

● Eureka——一个开源的Netflix项目,像Consul一样,提供类似的服务发现功能。Eureka同样有一个可以被Spring Cloud Config使用的键值数据库。

2.1.2 Spring Cloud服务发现

通过Spring Cloud服务发现,开发人员可以从消费服务的客户端中抽象出部署服务器的物理位置(IP地址或服务器名称)。服务消费者通过逻辑名称而不是物理位置来调用服务器的业务逻辑。Spring Cloud服务发现也处理服务实例在启动和关闭时的注册和注销。Spring Cloud服务发现可以使用以下服务来实现:

● Consul;

● ZooKeeper;

● Eureka。

注意 尽管Consul和ZooKeeper非常强大和灵活,但Java开发人员社区仍在广泛使用Eureka。因此,这本书将包含Eureka的例子,以保持本书的可管理性,并使内容更聚焦,以便于照顾到尽可能多的读者。但如果你对Consul或ZooKeeper感兴趣,请务必阅读附录C和附录D。附录C包含一个如何使用Consul作为服务发现的示例,附录D包含一个如何使用ZooKeeper的示例。

2.1.3 Spring Cloud LoadBalancer和Resilience4j

Spring Cloud与多个开源项目进行了大量整合。对于微服务客户端弹性模式,Spring Cloud封装了Resilience4j库和Spring Cloud LoadBalancer项目,你可以轻松地在微服务中使用它们。通过使用Resilience4j库,你可以快速实现服务客户端弹性模式,如断路器、重试和舱壁等模式。

虽然Spring Cloud LoadBalancer项目简化了与诸如Eureka这样的服务发现代理的集成,但它也为服务消费者提供了客户端对服务调用的负载均衡。这使得即使服务发现代理暂时不可用,客户端也可以继续进行服务调用。

2.1.4 Spring Cloud API Gateway

API网关为微服务应用程序提供服务路由功能。正如其名称所示,服务网关代理服务请求,确保在调用目标服务之前,对微服务的所有调用都经过一个“前门”。通过集中的服务调用,开发人员可以强制执行标准服务策略,如安全授权、验证、内容过滤和路由规则。你可以使用Spring Cloud Gateway实现API网关。

注意 在这本书中,我们使用由Spring Framework 5 Project Reactor(允许与Spring Web Flux集成)和Spring Boot 2构建的Spring Cloud Gateway来更好地集成我们的Spring项目。

2.1.5 Spring Cloud Stream

Spring Cloud Stream是一种可让开发人员轻松地将轻量级消息处理集成到微服务中的支持技术。借助Spring Cloud Stream,开发人员能够构建智能的微服务,它们使用在你的应用程序中出现的异步事件。你还可以快速整合微服务与RabbitMQ和Kafka等消息代理。

2.1.6 Spring Cloud Sleuth

Spring Cloud Sleuth允许将唯一跟踪标识符集成到应用程序所使用的HTTP调用和消息通道(RabbitMQ、Apache Kafka)中。这些跟踪号码(有时称为关联ID或跟踪ID)能够让开发人员在事务流经应用程序中的不同服务时跟踪事务。有了Spring Cloud Sleuth,跟踪ID会被自动添加到微服务生成的任何日志记录语句中。

Spring Cloud Sleuth与日志聚合技术工具(如ELK技术栈)和跟踪工具(如Zipkin)结合时,能够展现出真正的威力。Open Zipkin获取Spring Cloud Sleuth生成的数据,让你可以可视化单个事务所涉及的服务调用流程。ELK技术栈是3个开源项目(Elasticsearch、Logstash和Kibana)名称的首字母缩写。

● Elasticsearch是搜索和分析引擎。

● Logstash 是服务器端数据处理管道,它消费数据并转换数据,以便将数据发送到“秘密存储点(stash)”。

● Kibana是一个客户端用户界面,允许用户查询并可视化整个技术栈的数据。

2.1.7 Spring Cloud Security

Spring Cloud Security是一个验证和授权框架,可以控制哪些人可以访问你的服务,以及他们可以用服务做什么。因为Spring Cloud Security是基于令牌的,它允许服务通过验证服务器发出的令牌彼此进行通信。接收HTTP调用的每个服务可以检查提供的令牌,以确认用户的身份以及用户对该服务的访问权限。此外,Spring Cloud Security还支持JSON Web Token(JWT)。JWT框架标准化了创建OAuth2令牌的格式,并为创建的令牌进行数字签名提供了标准。 X0MPM3Tb44V71V/lv2ZeFaGvmtiuL/oA01y6T/8ifjT+gxng2K/G50zzCcrEl/L5

点击中间区域
呼出菜单
上一章
目录
下一章
×