Spring Cloud是什么?我们先来看看 Spring 官方给我们的解释:
Spring Cloud 是一套基于 Spring Boot 的框架,旨在帮助开发者构建分布式系统和微服务架构。它提供了多种工具和组件,用于简化分布式系统的开发和管理,包括服务发现、配置管理、负载均衡、断路器、分布式追踪等功能。
Spring Boot我们都知道是什么,那么分布式系统和微服务架构是什么呢?
什么是分布式结构
分布式系统是一种由多个独立计算单元(通常是多台计算机或服务器)组成的系统,这些计算单元通过网络相互连接和协作,以完成对外呈现为一个整体的任务。分布式系统的各个节点共同承担任务,资源共享,彼此协调工作。
在项目早期的时候,由于我们不知道到底会有多少的用户来使用我们这个项目,并且为了尽快上线这个项目,这个项目往往最先开始是单体架构,那么什么又是单体架构呢?
单体架构
单体架构(Monolithic Architecture)是一种传统的软件架构模式,指的是将应用程序的所有功能模块(如用户接口、业务逻辑、数据访问层等)统一打包为一个整体应用程序部署的架构。这种架构下,应用的所有部分都在一个进程中运行,共享相同的资源和环境。
在这种单体架构的模式下,所有的功能都放在一个服务器上面,那么当使用的人数多了之后,那么这个服务器在短时间内就需要处理大量的请求,那么就很可能会出现服务器宕机的情况,那么当这个服务器因为过载或者内部代码出现问题的时候,那么整个项目就无法正常运行了。
单体架构开发和部署简单,但是只适用于初期,当用户数量增多业务复杂之后,就会出现下面的问题:
- 单个服务器短时间内需要处理很多的请求,这样就会导致服务器负载越来越高,甚至出现服务器宕机无法访问的情况出现
- 业务场景越来越复杂,为了不断满足用户的需求,单体应用会越来越大,各个业务代码之间的耦合度会越来越高,就算只需要修改一个业务代码,也需要整个项目重新构建,然后再发布
- 出现任何一个微小的问题,都会导致整个应用挂掉
所以为了解决上面的问题,就需要对单体架构做出调整和优化,优化主要有两个方向:横向和纵向优化:
- 横向优化:横向优化是指增加多台服务器,每个服务器都可以独立完成业务,每个服务器根据自身的承载能力处理不同数量的请求
- 纵向优化:将一个应用按照业务进行拆分,拆分为多个项目,这个架构也叫做垂直架构
集群
集群(Cluster)是一组相互连接、协同工作的独立计算机或服务器的集合,这些服务器作为一个整体来处理任务,从而实现更高的性能、可靠性和可扩展性。集群系统的各个节点通常通过局域网或高速网络连接在一起,对外表现为一个统一的系统。
这样就能根据每个服务器承载能力的不同,为不同的服务器分配不同数量的请求了,这样做就算某一个服务器挂掉了,也不会影响整个业务的进行。
分布式
分布式(Distributed)是一种系统设计理念,指的是将计算任务、数据存储和资源管理分散到多个独立的计算节点上,通过网络协作来共同完成任务。与集中式系统(所有计算都在单一的中央服务器上进行)不同,分布式系统的各个节点可以位于不同的物理位置,通过通信网络协同工作,以实现更高的性能、可靠性和可扩展性。
这时有人可能会问了,如果分布式的某一个业务出现了问题,那么不也是会影响整个功能的进行吗?是这样的,但是集群和分布式往往是同时使用的,分布式架构大多是建立在集群上的,实际的分布式架构设计中并不会把分布式和集群单独区分,而是统称:分布式架构。
在知道了什么是分布式架构之后,我们再来了解一下什么是微服务架构。
什么是微服务架构
微服务架构(Microservices Architecture)是一种软件架构模式,它将一个大型应用程序拆分为多个独立的小服务,每个服务负责特定的业务功能,能够独立开发、部署和扩展。各个服务之间通过轻量级通信(如 HTTP API、RPC、消息队列等)进行协作,从而构建成一个完整的应用。
从上面的图中我们可以看出,按照业务进行拆分后,会有一些重复的功能开发,比如订单系统,电商平台和支付系统都会涉及。
在分布式结构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调用关系就会越来越复杂,这时我们可以将一些通用的,会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微小的服务,这就是微服务。
简单来说,微服务就是一个很小的服务,小到一个服务只对应一个单一的功能,只做一件事,这个服务可以单独部署运行。微服务之间可以采用 REST和RPC协议进行通信。
从这个角度来看,微服务架构是分布式架构的一种拓展,这种架构模式下它的拆分粒度更小,服务更独立。可以理解为:微服务是一种经过良好架构设计的分布式架构方案。
微服务架构的特点
-
服务独立:每个微服务是一个独立的业务单元,具有自己的代码库和数据库,可以独立开发、测试和部署。
-
单一职责:微服务通常遵循"单一职责原则"(SRP),每个服务只负责一个特定功能(如用户管理、订单处理、支付等),保持服务的内聚性和简洁性。
-
松耦合:微服务之间通过接口通信,彼此独立且松散耦合,一个服务的修改不会直接影响其他服务。
-
技术多样性:各个微服务可以使用适合其需求的不同技术栈(如编程语言、数据库、框架等),提高灵活性。
-
独立部署:微服务可以独立部署和更新,不需要停止整个系统,从而提升开发和交付效率。
-
容错性和高可用性:微服务架构天然支持容错,当某个服务不可用时,其他服务可以继续运行,从而提高系统的稳定性和高可用性。
微服务架构的优缺点
优点:
- 灵活性:每个微服务可以独立更新和部署,适应频繁的需求变更,支持快速迭代和持续交付。
- 技术选择自由:团队可以根据每个微服务的需求选择不同的技术栈和数据库类型,灵活性较高。
- 易于扩展:可以按需扩展每个服务(垂直扩展或水平扩展),提高资源利用率。
- 高容错性:系统的服务之间隔离度较高,单个服务故障不会导致整个系统不可用。
缺点:
- 系统复杂性增加:拆分为多个服务后,系统的整体复杂度增加,服务间的通信、数据一致性、事务处理和依赖管理变得复杂。
- 部署和管理难度高:需要良好的运维和自动化部署工具支持,以管理大量的独立服务。
- 分布式问题:由于各个微服务可能运行在不同的节点上,涉及分布式系统的复杂性,如网络延迟、故障恢复和数据一致性等问题。
- 数据管理复杂:各服务独立存储数据,可能需要额外的技术来同步和协调数据。
对于微服务出现的这些问题,该如何解决呢?答案就是 Spring Cloud。
什么是Spring Cloud
Spring Cloud 是一个基于 Spring 框架的分布式系统开发工具集,旨在帮助开发者快速构建微服务架构中的分布式应用。它提供了一系列解决分布式系统中常见问题的工具和框架,比如服务发现、配置管理、负载均衡、熔断器等,使开发者可以专注于业务逻辑的实现,而不必处理分布式架构中复杂的基础设施问题。
简单来说,Spring Cloud 就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合:
Spring Cloud 不是 Spring 团队从零开发的框架,而是将一些经过实践检验、表现优异的开源组件(如 Netflix、HashiCorp 等公司维护的项目)整合在一起,为微服务架构提供标准化的解决方案。这些组件解决了微服务开发中常见的问题,比如服务注册与发现、负载均衡、配置管理、熔断、API 网关等。
Spring Cloud 的核心价值在于对这些组件的封装和集成,使其更易于与 Spring Boot 一起使用。开发者可以快速上手,不用深入了解每个组件的底层实现和复杂配置,而是通过 Spring Cloud 提供的简化配置实现开箱即用的体验。
Spring Cloud 和 Spring Boot 的版本对应关系
这里 Spring Cloud 的版本名称为什么会有 Hoxton 等这样的纯英文呢?
Spring 团队的命名方式很有趣,每个大版本依次使用一个按字母顺序排列的地名,这样的命名方式也便于开发者快速识别版本更新的先后顺序。比如:Angel(天使):第一个版本,Brixton:第二个版本,Camden:第三个版本,Dalston:第四个版本,Edgware:第五个版本,Finchley:第六个版本,Greenwich:第七个版本,Hoxton:第八个版本,Ilford:第九个版本,Jubilee:第十个版本。这种字母顺序的地名命名方式既增强了版本的识别性,也增添了趣味性,并且很有规律。开发者可以通过版本名称快速判断更新的先后顺序,同时避免了单调的数字命名。
从 Hoxton 版本之后,Spring Cloud 的版本就变成了 2020.0.0 这样的日期版本号了。
Spring Cloud 的实现方案
在 Spring Cloud 的规范下,有很多的实现,其中最出名的就是:
- Spring Cloud Netflix
- Spring Cloud Alibaba
Spring Cloud Netflix
Spring Cloud Netflix是Netflix OSS(Netflix Open Source Software)在Spring Cloud规范下的实现。
包含的组件及其主要功能大致如下:
- Eureka: 服务注册和发现
- Zuul: 服务网关
- Ribbon: 负载均衡
- Feign: 服务调用组件
- Hystrix: 断路器,提供服务熔断和限流功能
- Hystrix Dashboard: 监控面板
在很长的一段时间里,Spring Cloud一度被泛指为Spring Cloud Netflix。Spring Cloud一直以来把Netflix OSS套件作为其官方默认的一站式解决方案。然而,Netflix公司在2018年前后宣布其核心组件Hystrix、Ribbon、Zuul等均进入维护状态,Spring Cloud也被迫宣布将删除这些维护模块。
spring-cloud-netflix并没有从Spring Cloud的依赖中完全删除,只是从2020.0版本起,它只负责管理Eureka。
Netflix产品 | 推荐替代品 |
---|---|
Hystrix | Resilience4j |
Hystrix Dashboard / Turbine | Micrometer + Monitoring |
Ribbon | Spring Cloud Loadbalancer |
Zuul 1 | Spring Cloud Gateway |
Archaius 1 | Spring Boot外部化配置 + Spring Cloud配置 |
Spring Cloud Alibaba
Spring Cloud Alibaba 是阿里巴巴集团下的开源组件和云产品在 Spring Cloud 规范下的实现。Spring Cloud Alibaba
Spring Cloud 实现对比
SpringCloud官方 | Spring Cloud Netflix | Spring Cloud Alibaba | |
---|---|---|---|
服务注册/发现 | Eureka | Eureka | Nacos |
服务调用 | OpenFeign | Feign | Dubbo |
配置中心 | SpringCloudConfig | Archaius | Nacos |
服务网关 | SpringCloudGateway | Zuul | SpringCloudGateway |
负载均衡 | SpringCloud LoadBalance | Ribbon | Dubbo |