大家在学习Java的时候会学到Spring Cloud 教程,如果你去 Spring Cloud 的主页,你会看到以下内容:
Spring Cloud 为开发者提供了工具来快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话,集群状态) - Spring Cloud DocsSpring Cloud 不是一个单独的项目,而是它们的一个集群。
下面显示的只是这个保护伞下存在的项目的一小部分示例。
让我们快速介绍一下 Spring Cloud 旗下的一些重要项目
Spring Cloud Netflix
Netflix 是最早使用微服务架构的组织之一。在这个项目下,已经有大量项目开源供公众使用。Eureka、Hystrix 和 Zuul 是其中比较受欢迎的。
Spring Cloud 配置
该项目利用 Git 或 SVN 存储库为集中配置管理提供了一个框架。
Spring Cloud 总线
这使微服务和基础设施组件能够在分布式设置中相互通信。
现在让我们看看我们在开发微服务应用程序时面临的挑战,以及 Spring Cloud 为它们提供的解决方案。
配置管理
在具有微服务架构的系统中,存在大量相互通信的小型微服务:
这些微服务中的每一个都需要跨多个环境执行。在给定的环境中,可能会运行该微服务的多个实例。这意味着运维团队需要为每个微服务管理大量配置信息。
Spring Cloud Config Server 为此类配置管理提供了解决方案
Spring Cloud 提供了一种方法,其中所有微服务的跨环境的所有配置都存储在 Git 存储库中。Spring Cloud Config Server 然后将此信息公开给所有微服务。
将配置存储在这样一个集中的位置使运营团队更容易管理应用程序/架构。
考虑以下示例。
CurrencyCalculationService 微服务与另一个微服务 CurrencyExchangeService 进行通信。目前,CurrencyExchangeService 的三个实例正在运行。有可能在任何时间点都可以添加更多实例,或者可以删除现有实例。
我们需要 CurrencyCalculationService 能够在当时可用的实例之间分配负载。
需要动态找出当时 CurrencyExchangeService 的实例数量,并在它们之间分配负载。
该解决方案涉及多个组件。
服务注册
所有微服务都向命名服务器注册。Spring Boot 提供的选项之一是 Eureka。
服务发现
当任何微服务想要与另一个微服务通信时,它会询问命名服务器。在上面的示例中,CurrencyCalculationService 可以向 Eureka 命名服务器询问正在运行的 CurrencyExchangeService 实例。反过来,命名服务会将这些实例的 URL 提供回 CurrencyConversionService。
这有助于在通信微服务的实例之间建立动态关系。
负载均衡
当同一微服务有多个实例时,您希望在它们之间分配负载。Spring Cloud 提供的选项之一是客户端负载平衡框架 Ribbon。
CurrencyCalculationService 使用 Ribbon 并跨 CurrencyExchangeService 的实例分发请求。
Feign 框架帮助我们编写更简单的 RESTful 客户端。
在微服务架构中,您需要完全了解微服务中发生的事情。
为了跟踪请求,您需要为其分配一个唯一标识符。Spring Cloud Sleuth 有助于为每个请求分配一个标识符。您可以使用 Zipkin 之类的分布式跟踪解决方案跨多个组件跟踪请求。
所有的微服务都有一些共同的特性——安全性、日志记录、分析等等。实现这些通用功能的最佳位置是什么?
API 网关为此类挑战提供了很好的解决方案。
Netflix Zuul API 网关是实现 API 网关的绝佳解决方案。
容错
如果微服务宕机了怎么办?其他微服务如何响应?
Hystrix 有助于提高微服务的容错能力。
在本文中,我们查看了 Spring Cloud 项目,发现它是各种项目的保护伞。这些中的每一个都解决了与微服务相关的特定问题。重要的问题包括服务注册、服务发现、负载分配、事件跟踪、服务监控和容错。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习