随着我们从单片机体系结构转向微服务体系结构。我们需要一个能够轻松构建分布式应用程序的框架。Spring Cloud就是答案。
Spring Cloud 为开发者提供工具,帮助他们快速构建分布式系统中的一些常见模式(例如组态管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致锅炉模式,使用 Spring Cloud 开发人员可以快速启动实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作,包括开发者自己的笔记本电脑、裸金属数据中心以及 Cloud Foundry 等托管平台。
——来自Spring Cloud官网的介绍
Spring Cloud 是一个用于构建健壮的云应用程序的框架。让我们对它简单介绍一下。
Spring Cloud组成
Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:
Spring Cloud Netflix:核心组件,可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
Eureka:服务治理组件,包含服务注册与发现
Hystrix:容错管理组件,实现了熔断器
Ribbon:客户端负载均衡的服务调用组件
Feign:基于Ribbon和Hystrix的声明式服务调用组件
Zuul:网关组件,提供智能路由、访问过滤等功能
Spring Cloud 提供:
1、服务注册和发现
2、分布式/版本化配置
3、服务对服务呼叫
4、分布式消息传递
5、路由
6、断路器
7、负载平衡
8、全局锁定
9、领导人选举和集群状态
将在这篇文章中来介绍和讨论前两个特性
服务注册和发现
Spring Cloud为服务发现提供了许多解决方案,它们是 Eureka、 Zookeep、 Cloud Foundry 和 Consel。
什么是服务发现?
在分布式系统中,有许多部署的服务需要彼此通信(发现对方)以执行某些操作。
让我们举一个例子,假设我们有服务 A,它需要与服务 B 通信。服务 A 需要知道服务 B 的 IP,这是由服务发现过程完成的。
服务发现是一种具有中央注册中心的机制,用于维护所有微服务的网络位置。如果一个新的服务出现或一个旧的死亡新的信息将立即注册和注销本身。
通过使用Spring Cloud ,我们可以提供服务来完成服务发现的工作。
分布式/版本化配
因为我们正在制造分布式系统,我们需要外部化我们的配置。为什么需要它?让我们讨论一个场景,在服务中假设服务的 URL 发生了变化,我们只需要更新配置服务器中的 URL 并刷新客户端服务配置以使用更新后的 URL。
如果我们没有配置服务器,那么我们必须重新部署服务。我们可以使用 Spring 作为配置服务器进行服务。
Spring Cloud 提供了以下特性
1、HTTP,用于外部配置的基于资源的 API (名称-值对或等效的 YAML 内容)
2、在 Spring 启动应用程序中使用@EnableConfigServer 轻松嵌入
3、加密和解密属性值(对称或非对称)
配置客户端特性(针对 Spring 应用程序) :
1、加密和解密属性值(对称或非对称)
2、绑定到 Config Server 并使用远程属性源初始化 Spring 环境
Spring Cloud网关
这个Spring提供了一个库,可用于提供到 API 的路由的有效方法,并向 API 提供横切关注点,例如弹性、监视/度量和安全性
Spring Cloud Gateway 功能:
1、要求收费限制
2、谓词和筛选器是特定于路由的。
3、断路器集成。
4、客户端集成
5、易于编写谓词和筛选器
6、路径重写
7、能够匹配任何请求属性上的路由。
8、构建于 Spring 框架5、项目反应器和 Spring Boot 2.0之上