1.10 使用 Spring Cloud 构建微服务
从零实现所有的微服务模式是一项巨大的工作。Spring 团队将大量经过实战检验的开源项目整合到一个称为Spring Cloud 的 Spring 子项目中。
Spring Cloud 将 Pivotal、HashiCorp 和 Netflix 等开源公司的工作封装在一起。Spring Cloud简化了将这些项目设置和配置到Spring 应用程序中的工作,以便开发人员可以专注于编写代码而不会陷入配置构建和部署微服务应用程序的所有基础设施细节中。
1.10.1 Spring Boot
Spring Boot是微服务实现中的核心技术。Spring Boot 通过简化构建基于REST的微服务的核心任务,大大简化了微服务开发。
Spring Boot还极大地简化了将HTTP类型的动词(GET、PUT、POST和DELETE)映射到URL、JOSN协议序列化与Java对象的互相转化,以及将Java异常映射回标准HTTP错误代码的工作。
1.10.2 Spring Cloud Config
Spring Cloud Config 通过集中式服务来处理应用程序配置数据的管理,因此应用程序配置数据(特别是环境特定的配置数据)与部署的微服务完全分离。这确保了无论启动多少给微服务实例,这些微服务始终具有相同的配置。
Spring Cloud Config 拥有自己的属性管理存储库,也可以与以下开源项目集成。
- Git
- Consul —— Consul是一种开源的服务发现工具,允许服务实例向该服务注册自己。服务客户端可以向Consul咨询服务实例的位置。
- Eureka —— Eureka 是一个开源的Netflix项目,像Consul一样,提供类似的服务发现功能,Eureka同样有一个可以被Spring Cloud Config 使用的键值数据库。
1.10.3 Spring Cloud 服务发现
通过Spring Cloud服务发现,开发人员可以从客户端消费的服务中抽象出部署服务器的物理位置(IP或服务器名称)。服务消费者通过逻辑名称而不是物理位置来调用服务器的业务逻辑。
Spring Cloud服务发现也可以处理服务实例的注册和注销(在服务实例启动和关闭时)。Spring Cloud 服务发现可以使用Consul和Eureka作为服务发现引擎。
1.10.4 Spring Cloud 与 Netflix Hystrix 和 Netflix Ribbon
Spring Cloud 与 Netflix 的开源项目进行了大量整合。对于微服务弹性模式,Spring Cloud封装了Netflix Hystrix 库和Netflix Ribbon项目,开发人员可以轻松地在微服务中使用它们。
使用 Netflix Hystrix,可以快速实现服务客户端弹性模式,如断路器模式和舱壁模式。
虽然 Netflix Ribbon 简化了与诸如Eureka这样的服务发现集成,但它也为服务消费者提供了客户端对服务调用的负载均衡。即使在服务发现代理暂时不可用时,客户端也可以继续进行服务调用。
1.10.5 Spring Cloud 与 Netflix Zuul
Spring Cloud 使用 Netflix Zuul项目为微服务应用程序提供服务路由功能。Zuul是代理服务请求的服务网关,确保在调用目标服务之前,对微服务的所有调用都经过一个“前门”。通过集中的服务调用,开发人员可以强制执行标准服务策略,如安全授权验证、内容过滤和路由规则。
1.10.6 Spring Cloud Stream
Spring Cloud Stream 是一种将轻松地将轻量级消息处理集成到微服务中的支持技术。
它可以使用在应用程序中出现的异步事件。此外使用String Cloud Stream可以快速将微服务与消息代理进行整合,如RabbitMQ和Kafka。
1.10.7 String Cloud Sleuth
Spring Cloud Sleuth 允许将唯一跟踪标识符集成到应用程序所使用的HTTP调用和消息通道(RabbitMQ、Apache Kafka)之中。这些跟踪号码(关联ID或跟踪ID)能够让开发人眼在事务流经应用程序中不同服务时跟踪事务。有了Spring Cloud Sleuth,这跟踪ID将自动添加到微服务生成的任何日志记录汇总。
Spring Cloud Sleuth与日志聚合技术工具(如 Papertrail)和跟踪工具(如 Zipkin)结合时能够展现出真正的威力。
Papertail是一个基于云的日志记录平台。用于将日志从不同的微服务实时聚合到一个可查询的数据库中。
Zipkin可以获取Spring Cloud Sleuth生成的数据,并允许开发人员可视化单个事务涉及的服务调用流程。
1.10.8 Spring Cloud Security
Spring Cloud Security 是一个验证和授权框架,可以控制哪些人可以访问服务,以及他们可以用服务做什么。
Spring Cloud Security是基于令牌的,允许服务通过严恒服务器发出的令牌彼此进行通信。接收调用的每个服务可以检查HTTP调用中提供的令牌,以确认用户的身份以及用户对该服务的访问权限。
此外,Spring Cloud Security支持JSON Web Token。JSON Web Token(JWT)框架标准化了创建 OAuth2 令牌的格式,并为创建的令牌进行数字签名提供了标准。
1.10.9 代码供应
要实现代码供应,我们将会转移到其他的技术栈。
Spring 框架是面向应用程序开发的,它(包括Spring Cloud)没有用于创建“构建和部署”管道的工具。
要实现一个“构建和部署”管道,开发人员需要使用Travis CI 和 Docker这两样工具,前者可以作为构建工具,而后者可以构建包含微服务的服务器镜像。