什么是Spring Cloud?Spring Cloud和Spring | Spring Boot有什么不同?

  • 前言,本文为翻译,原文地址:https://medium.com/javarevisited/what-is-spring-cloud-and-how-it-is-different-from-spring-and-spring-boot-128d276a1432

Spring Cloud
大家好。在这篇文章中,让我们一起探讨一下Spring Cloud。有诸如Spring、Spring Boot、Spring Cloud等等一些的专有术语,在探讨Spring Cloud之前,让我们先了解一下Spring和Spring Cloud。
在这里插入图片描述

Spring Framework

总所周知,Spring framework是一套已经出现很久的框架,提供了许多功能,例如:

  • Spring JDBC
  • Spring MVC
  • Spring Security
  • Spring AOP
  • Spring ORM (例如Hibernate为代表的ORM)
  • Spring Test
    这些功能组件的存在,Java开发者可以使用Spring MVC来开发一个Web应用,并且给Web应用增加任何ORM的数据库框架,例如Hibernate。

在过去,我们使用JSP页面来与Spring Controller进行交互,调用与数据库做交互的Service层。此外,我们还需要运行一个独立的Web Server,例如Tomcat,然后将服务jar/war包,文件放进入,从而运行我们的Web应用。

最有名的是许多年前的一个面试问题:
“我们如何做才能够整合Spring和Hibernate?”——我们都知道我们需要执行以下的几个步骤:

  • 创建一个applicatoncontext.xml 文件
  • 创建一个数据库资源以及相关的配置信息
  • 声明Hibernate Session Factory同时连接到数据库资源
  • 最后,将Session Factory映射到Spring framework的Hibernate 模板
    通过以上的配置步骤,我们将Spring和Hibernate无缝的整合在一起,但在这过程当中,仍然包含了许多的模板代码。
    ···

Spring Boot

Spring framework 有许多非常好用的功能,同时也非常稳定,在广大的Java开发者们中被广泛使用着。但就像我们上面所谈到的,在Spring framework当中还是有一些缺点。目前的技术都是朝着解耦合的方法,去使用可拔插前端框架,例如 Angular, React等等。但Spring framework要使用JSP页面需要与Spring MVC紧密的耦合在一起。
下面让我们来聊聊被用来快速构建rest API以快速插入到所有UI框架的Spring Boot framework。Spring Boot 通过提供了以下的内容来解决Spring框架的所有缺点:

  • 内置Tomcat服务器
  • Spring数据持久层API(用来免配置自动连接DAO数据库)
  • 自带默认Looger,自动打印log
  • 全局异常处理器(使用AOP来处理从程序中抛出的异常)
  • 自动配置
  • 内置数据库(对执行单测非常有用)
  • 内置完整启动依赖

Spring Boot 和微服务的出现之后,旧的风格Spring framework已经急剧减少,同时,几乎所有的旧的Spring程序都移植到了Spring Boot上,Spring Boot是一个生产级的Java应用程序的现代化开发方法。
···

Spring Cloud

现在让我们进入Spring Cloud的部分。像上面提到的,Spring Boot 被用来编写单体的Java Web应用。然后就出现了一个问题?

我们如何将其配置为与外部系统或组件一起使用?问题的答案就是Spring Cloud,就是接下来你要看到的内容。

Spring Cloud提供了如下的在现代分布式系统之中非常关键的功能组件:

1. 分布式 / 版本化配置

  • 用一个配置中心服务器来维持应用程序配置
  • 与代码仓库配置的方法相比,这种方法可以单独的进行维护,也更加方便管理

2. 服务注册与发现

  • 所有的服务需要使用他们的id注册在一个注册服务器,最著名的注册服务器就是Eureka
  • 连接在中央服务器的客户端可以更新和检索他们的地址

3. 服务间调用

服务之间可以通过相互发现,通过以下的步骤进行通信:

  • 注册服务
  • 获取注册表
  • 找到下游的服务
  • 解析服务的IP地址
  • 通过RestTemplate调用REST节点

4. 负载均衡

  • 负载均衡的目标是最大化吞吐量,最小化响应时间,增加时效性,优化资源使用
  • 使用丰富的负载均衡组件可以通过冗余增加系统的可依赖性、可用性
  • Eureka的依赖内部构建了叫Ribbon负载均衡组件,可以在服务实例和单体服务间进行负载均衡

5. 错误回滚器

  • 错误回滚器被用来做当访问一个微服务或者其他系统的API失败时候的错误回滚机制
  • 可以选择开启或者关闭回滚器,也可以定制错误发生的时候执行策略。错误回滚器可以优化的处理错误。
  • 例如Spring Boot的resilience4j中就广泛应用的错误回滚器

6. API 网关

Spring Cloud网关是被设计给Spring Boot应用的API网关。API网关是Spring Cloud的一部分。它有以下的功能点:

  • 基于Spring框架5、project reactor和Spring Boot 2.0构建
  • 可以适配任何请求属性的路由
  • 可指定谓词匹配和过滤器在具体的路由上
  • 集成错误回滚器
  • 集成Spring Cloud 发现客户端
  • 易于编写的谓词和过滤器
  • 请求速率限制
  • 请求路径重定向

7. Spring Cloud Security

  • 集成内部的Spring Security用来提供身份验证和授权
  • 支持JWT Token校验
  • Spring Cloud Security使用Spring Boot和Spring Security OAuth2 提供了一系列构建安全应用的基础
  • 我们可以快速的创建通用模式的鉴权系统,例如单点登录、token延迟有效期、token更换

8. 分布式数据追踪

  • 追踪数据再微服务中是非常有用的,因为一个来自客户端的请求会在多个微服务中传递。追踪是开发者
  • 追踪是开发者能够看到一个请求在服务间传递的基础,Spring Cloud通过以下的依赖给该功能提供了解决方案:
  • 我们可以在项目中添加Spring Cloud Sleuth 依赖来启用跟踪。Sleuth是一个稳健的依赖库,可以实现即时记录、延迟分析(通过request-id实现)。通过这个request-id,我们可以在服务之间跟踪到请求。
  • Zipkin是一个分布式追踪工具,专门设计于分析微服务架构中的延迟问题。Zipkin公开了用于收集输入数据的HTTP节点。假如我们需要增加增加数据追踪到我们的项目中,我们应该添加 spring-cloud-starter-Zipkin 的依赖项。

9. 分布式消息

  • Spring Cloud Bus将分布式系统的节点和轻量级的消息代理连接起来。Spring Cloud Bus在连接后可以通过AMOP 或者其他的消息协议在应用中广播状态变更。
  • 在微服务有一个非常常见的用例,使用发送信息给RabbitMQ,Kafka,AWS SQS等等中间件实现异步通信。
  • Spring Cloud Stream是Spring Cloud的另外一个框架,用来创建与共享信息系统连接的高度可扩展的事件型驱动微服。这种方法被用于流处理服务。
    在这里插入图片描述

正如我们上面所讨论的,Spring Cloud有大量的功能组件用来做分布式系统的通信,我们可以非常简单的将相关的依赖组件引入和使用到项目中。

简而言之,Spring Boot是一个用来开发单理微服务应用的框架,而Spring Cloud就是用来配置这些服务之间的通信。因此他们两个是一个生产级的微服务系统所必须的。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值