目录
开始
背景
随着互联网的快速发展,使用互联网的用户越来越多,软件的使用用户也越来越多,业务场景也变得越来越复杂。传统的单体架构已经很难满足互联网一些复杂场景的需求,这主要表现在,随着业务复杂度提高,代码的可读性、可拓展性别和可度性都会降低,系统的维护成本也会逐步的上升。而且,随着人工智能、云服务、大数据的发展,对系统的要求也在不断的提高。所以,需要对单体架构做出优化势在必行。
但是,在学习如何使用SpringCloud之前,我们需要先弄明白几个问题,比如,
在项目中为什么要使用SpringCloud框架?往前一些,为什么要构建微服务系统?和单机系统对比,它的优缺点在哪?微服务和SpringCloud的关系是什么?
把这些问题弄清楚可以让我们更加清晰的了解SpringCloud和微服务,提高我们之后的学习效率和质量。下面,我们将比较详细的回答上述问题:
为什么要构建微服务程序
使用微服务架构的原因主要有以下几个方面:
- 灵活性:每个微服务都可以独立地开发、测试、部署和扩展,不会影响其他微服务,具有更高的灵活性和可维护性。
- 可伸缩性:当需要进行横向扩展时,可以仅扩展需要的微服务,而不是整个应用程序,减少了资源的浪费。
- 高可用性:由于微服务是分布式的,因此可以通过多个节点来提高服务的可靠性和可用性。
- 技术异构性:不同的微服务可以使用不同的技术栈和编程语言,可以根据具体的业务需求去选择最适合的技术实现。
- 实现复杂业务模型:微服务可以良好地支持复杂的业务模型和流程,不受单体应用程序的限制。
微服务程序与传统的单体架构对比
凡事都有它的两面性,使用微服务架构也不例外,使用它不一定会比传统的单体架构好,下面先说说它们的优缺点:
微服务架构
优点:
- 高度的灵活性与可扩展性,可以独立部署、测试和维护每个微服务;
- 异构技术栈可以被采用,可以灵活选择更适合特定服务的技术,如采用不同的编程语言和数据存储技术;
- 更好的容错性,单个微服务出现故障不会影响其它服务;
- 可以更好地支持快速迭代和持续交付;
- 支持在不同的开发团队之间分工协作。
缺点:
- 系统复杂度高,需要进行适当的设计和规范以保证微服务之间的互联互通;
- 部署和运维成本较高,需要考虑多个服务的协同部署和运行;
- 可能需要额外的监控和调试工具。
补充:微服务架构的三大难题
- 服务故障的传播性(熔断)
- 服务的划分
- 分布式事务
单体架构
优点:
- 较低的系统设计复杂度,适合小型应用程序;
- 部署和运维较为简单,不需要考虑多个服务之间的协作和部署;
- 可以使用单一的技术栈,减少了开发和维护成本。
缺点:
- 扩展性和并发量受限,当数据量和请求量增加时,需要进行整个应用程序的横向扩展;
- 代码高耦合性,修改一个功能可能会影响到其它功能的正常运行,如增加测试难度;
- 无法灵活选择技术栈和编程语言,可能会限制开发团队的创造力和选择范围。
总之,选择微服务的主要原因大都是提高系统的并发能力和提高其他选择高级语言开发的灵活性,同时,使用微服务架构也可以一定程度上提高系统的安全性。但是,实际开发中,我们也要注意到开发效率和成本,微服务架构提高了系统的复杂性,一定程度上会降低开发的效率,同时也会因为运用多个服务器而提高开发、维护的成本。
在实际开发中,还是要根据业务需求和系统设计要求,来选择适合的架构。
为什么微服务系统要使用SpringCloud
其实微服务的框架不止只有SpringCloud,还有Dubbo、gRPC、ServiceComb等。
选择Spring Cloud的原因主要是在当下,SpringCloud拥有更活跃的社区和运用群体,使得它的文档、教程和解决方案都更加的具体。同时,我们现在搭建的项目很多是利用Spring应用程序进行搭建,使用Spring Cloud可以与Spring程序进行更好的集成,并可以使用Spring Boot自动化配置。最后,还是要归结于它强大的功能。SpringCloud它本身集成了大量的组件和工具,如Eureka、Zuul、Ribbon,可以快速的帮助我们进行微服务的开发、部署和管理,而且,它提供了完整的微服务体系结构和很好的支持了云原生。
正是它有许多方面优点,使得Spring Cloud成为构建和管理微服务应用程序的首选框架。
微服务和Spring Cloud的关系是什么
微服务是一种软件架构风格,它将应用程序拆分为小型、独立和可扩展的服务,每个服务都具有单独的业务功能并且相互独立,服务间使用轻量级机制通信,通常是HTTP RESTFUL API。
SpringCloud是一个基于SpringBoot的微服务框架,它提供了许多组件和工具来帮助开发人员快速构建和部署微服务应用程序。通过使用SpringCloud,我们可以轻松地实现服务注册与发现、负载均衡、熔断器、网关、配置中心、消息总线等多种微服务需求,从而加速了微服务应用程序的开发和部署。
总之。微服务架构提供了一种解决复杂系统问题的方法,而SpringCloud则是实现该架构所需的技术框架和工具集合。通过使用SpringCloud,开发人员可以更好地管理和协调微服务,并用更有效的方式实现业务逻辑。
简介
Spring Cloud 为开发人员提供了快速构建一些常见模式的工具分布式系统(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。协调的分布式系统导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台,如Cloud Foundry。(摘录自SpringCloud官网)
特性
Spring Cloud focuses on providing good out of box experience for typical use cases and extensibility mechanism to cover others.(Spring Cloud 专注于为典型用例提供良好的开箱即用体验,并提供涵盖其他用例的扩展机制。)
-
Distributed/versioned configuration(分布式/版本化配置):用于将应用程序的设置和配置集中管理,并在整个系统中共享。这有助于确保所有服务都使用相同的配置。
-
Service registration and discovery(服务注册和发现):允许服务自动注册并公开其端点。其他服务可以通过服务发现查找和使用这些服务。
-
Routing(路由):用于将请求路由到正确的服务实例。可以将负载均衡和服务发现与路由结合起来,以保证高效和可靠的请求路由。
-
Service-to-service calls(服务间通信):用于在不同服务之间进行通信,可以使用REST API、RPC或消息代理等不同的方法。
-
Load balancing(负载均衡):用于将请求分发到多个服务实例,确保每个实例都能够处理适当的工作量。
-
Circuit Breakers(断路机制):用于防止故障的服务破坏整个系统。如果服务出现问题,则断路器可以中断流量并保持系统的稳定性。
-
Global locks(全局锁):用于协调分布式系统中的并发操作,以防止数据竞争和死锁问题。
-
Leadership election and cluster state(推举和集群状态):用于在分布式系统中选择一个主节点,并跟踪集群的状态。
-
Distributed messaging(分布式消息传递):用于异步通信和数据传输,在分布式系统中有很多不同的实现方式。
特点
- 按业务(功能)划分为一个独立运行的程序,即服务单元。
- 服务之间一般通过HTTP协议相互通信。
- 自动化部署。
- 可以用不同的编程语言。
- 可以用不同的存储技术。
- 服务集中化管理。
- 微服务是一种分布式系统。
项目或模块
一些主要基于 Spring Cloud 微服务的生态系统的框架(SpringCloud官网例举出来的模块)
下面是对上面项目或模块的拆分,以及它们主要特点和用途的说明:
名称 | 特点及用途 |
---|---|
Spring Cloud Azure | 为基于 Spring Boot 的应用程序提供跨 Microsoft Azure 平台的构建块和解决方案 |
Spring Cloud Alibaba | 与阿里巴巴微服务框架 Dubbo 相结合,为中国市场提供一套微服务解决方案 |
Spring Cloud for Amazon Web Services | 为基于 Spring Boot 的应用程序提供 AWS 原生支持,并提供了一系列简化 AWS 整合的功能和解决方案 |
Spring Cloud Bus | 连接各个独立的微服务节点,并在节点之间传递消息,主要用于触发配置更新、刷新缓存等场景 |
Spring Cloud Gateway | 提供了一种全新的、非阻塞式的网关路由解决方案,支持高并发、高吞吐量和低延迟 |
Spring Cloud Consul | 基于 HashiCorp Consul 的服务注册与发现、配置管理和远程调用解决方案 |
Spring Cloud Config | 提供了一个集中式的配置管理服务和客户端库,使得应用程序可以跨多个环境和数据中心进行配置管理和更新 |
Spring Cloud Connectors | 抽象了与云平台中的服务进行连接的逻辑,支持多种云平台和存储后端 |
Spring Cloud Kubernetes | 基于 Kubernetes 平台的服务发现、配置管理和远程调用解决方案 |
Spring Cloud Netflix | 包含了与 Netflix OSS 开源项目集成的功能和组件,如服务注册与发现、负载均衡、断路器等 |
Spring Cloud Stream | 提供了一种声明式的消息通信模型,并将其与多种消息中间件进行集成,如 RabbitMQ、Apache Kafka 等 |
Spring Cloud Stream Applications | 提供了一系列预定义的 Spring Boot 应用程序,用于处理常见的消息传递场景 |
Spring Cloud Circuit Breaker | 提供了断路器模式的实现,用于防止在分布式环境下服务雪崩效应 |
Spring Cloud Security | 提供了一种简单且灵活的安全框架,用于保护分布式系统中的 API 和消息通信 |
Spring Cloud CLI | 命令行工具,用于构建、测试和部署 Spring Cloud 应用程序 |
Spring Cloud Commons | Spring Cloud 微服务生态系统的共享库,包含了通用的实用工具、抽象和模式 |
Spring Cloud for Cloud Foundry | 用于基于云原生的 PaaS 平台 Cloud Foundry 上构建、运行和管理 Spring Cloud 应用程序 |
Spring Cloud -Cloud Foundry Service Broker | 将应用程序注册为 Cloud Foundry 服务,以便其他应用程序可以在其上创建绑定实例,实现服务发现和配置管理等功能 |
Spring Cloud Pipelines | 提供了一个 CI/CD 流水线框架,支持容器化部署、全自动测试和部署等 |
Spring Cloud Skipper | 用于发布和管理 Spring Boot 应用程序的工具,支持多个平台和环境 |
Spring Cloud Sleuth | 提供了分布式跟踪和追踪解决方案,用于监控分布式系统中的请求流程和错误分 |
Spring Cloud Function | 基于函数编程模型,将普通的 Spring Boot 应用程序转换为无服务器(Serverless)应用程序,用于处理事件驱动型的计算任务 |
Spring Cloud Task | 提供了一种轻量级的批处理框架,用于处理简单且有限的离线计算任务 |
Spring Cloud Contract | 一种基于契约驱动开发的测试方法,用于测试分布式系统中的 API 和消息传递协议 |
Spring Cloud GCP | 为基于 Spring Boot 的应用程序提供 Google Cloud 平台的构建块和解决方案 |
Spring Cloud App Broker | 提供了一套用于 Kubernetes、Pivotal Cloud Foundry 和 OpenShift 平台的应用程序代理,用于简化应用程序配置和管理 |
项目引入
如果没有项目,创建新项目,推荐在官网生成基础代码:https://start.spring.io/
这里可能需要选为Maven(想用其他的也可以自己试一试):
如果是想对自己的SpringBoot项目进行改造的,需要根据自己项目所使用的SpringBoot版本找到对应的SpringCloud版本
然后在项目中引入:
<properties>
<spring-cloud.version>2022.0.1</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
SpringCloud入门总结:
SpringCloud是微服务的具体落地实现方式,它提供了许多组件和工具来帮助开发人员快速构建和部署微服务应用程序。使用它可以轻松地实现服务注册与发现、负载均衡、熔断器、网关、配置中心、消息总线等多种微服务需求,加速微服务应用程序的开发与部署。
它的具体项目使用及各个组件和模块的具体使用方法,会在后续的文章陆续发出。
最后,
希望文章对你有所帮助!
参考资料: