当前位置: 首页 > news >正文

Spring Cloud微服务

一、定义

        微服务,又叫微服务架构,也就是分布式架构,是软件架构的一种方式。它将一个大的单体架构应用拆分成一系列按业务领域划分模块的小的自治服务

   如开发部有很多任务,如果把任务给了一个组的话,效率肯定会降低。于是把不同任务交给不同的小组如A组,B组,前端,ui,每个组是独立工作的,有问题也是可以自理的,小组之间也是互相配合的,他们的总体目标是项目正常运行。在这种情况下:

        每个就相当于一个“微服务”。

        Spring Cloud 就像一个“开发部经理”,它要帮助开发部来管理小之间的沟通、协作,确保每个小都能高效完成任务。

二、Spring Cloud/Spring Cloud Alibaba微服的基本组成

  1. 服务注册与发现EurekaConsul

      功能:让微服务能够动态找到彼此告诉每个小,“在哪里?”“能做什么?”

      具体作用:当多个微服务部署在不同的服务器上时,如何知道某个服务的地址?Spring Cloud 提供了服务注册中心(如 Eureka、Consul),每个服务启动后会向注册中心注册自己的信息(IP 地址、端口号等)。其他服务可以通过注册中心查询到目标服务的地址,从而实现通信。

     应用场景:动态环境中,服务实例可能频繁上下线

     阿里云:提供了 Nacos,它是一个更符合国内开发者习惯的服务注册与配置中心工具。Nacos 不仅支持服务注册与发现,还支持动态配置管理,适合复杂的分布式系统。

  1. 负载均衡Ribbon

功能:当某个服务有多个实例时,合理分配请求流量。

具体作用:如果一个服务中 有 3 个实例运行,Spring Cloud 的负载均衡器(如 Ribbon 或 LoadBalancer)会自动选择一个实例来处理请求。避免某些实例过载,提升系统的整体性能。

应用场景:高并发场景下,需要分担流量。服务实例数量动态变化时,确保请求分配均匀。

阿里云:提供了 SLB(Server LoadBalancer) 和 Spring Cloud

LoadBalancer 的集成支持。

  • ①SLB:阿里云提供的服务器负载均衡服务,支持四层和七层流量分发,适用于大规模分布式系统。
  • ②Spring Cloud LoadBalancer:作为 Ribbon 的替代方案,支持动态调整权重和服务实例的选择策略。
  1. 断路器Hystrix

功能:防止级联故障,提升系统的容错能力。

具体作用:如果某个微服务出现故障或响应超时,断路器会阻止请求继续传递,并返回一个默认值或错误信息。防止某个服务的问题扩散到整个系统。

应用场景:系统中存在依赖关系的服务,某个服务故障可能导致其他服务不可用。需要保护系统稳定性。

阿里云:提供了 Sentinel,它是阿里巴巴开源的高可用防护工具。支持:

流量控制:支持基于 QPS、线程数等多种维度的限流策略。

熔断降级:当服务出现异常或响应超时时,自动熔断并返回降级逻辑。

实时监控:提供可视化的监控面板,帮助开发者实时了解系统的运行状态。

  1. API网关 Spring Cloud Gateway

功能:作为系统的统一入口,负责路由、过滤、安全校验等功能。

具体作用:客户端只需要访问网关(如 Zuul 或 Spring Cloud Gateway),网关会根据规则将请求转发到对应的服务。提供统一的安全校验、限流、日志记录等功能。不过Spring Cloud Gateway替代 Zuul,功能更强大,性能更高。

应用场景:对外提供 API 接口的系统。需要集中管理请求流量和安全性。阿里云:提供了 Alibaba Cloud API Gateway 和 Spring Cloud Alibaba Gateway 的支持。阿里云的企业级 API 网关服务,支持:

路由规则定义:根据请求路径、参数等条件将流量转发到不同的后端服务。

安全校验:支持 OAuth2、JWT 等认证机制,确保只有合法用户才能访问。

流量控制:支持限流、黑白名单等功能,保护后端服务免受恶意攻击。

  • Spring Cloud Alibaba Gateway:基于 Spring Cloud Gateway 的增强版本,集成了更多阿里云生态的功能。
  1. 配置管理Spring Cloud Config

功能:集中化管理所有微服务的配置文件。

具体作用:所有微服务的配置文件(如数据库连接信息、日志级别等)可以存储在一个地方(如 Git 或 SVN)。Spring Cloud Config 会将这些配置推送到各个服务,支持动态刷新。

应用场景:配置需要频繁调整的系统。多个服务共享相同配置的场景。

阿里云:提供了 Nacos 和 ACM(Application Configuration Management)。

Nacos:支持动态配置管理,允许开发者通过 Web 界面或 API 修改配置,并实时推送到所有服务实例。

ACM:阿里云提供的配置管理服务,支持

配置版本管理:记录配置的历史变更,便于回滚和审计。

多环境隔离:支持开发、测试、生产等环境的独立配置。

灰度发布:支持逐步推送配置变更,降低风险。

  • Spring Cloud优缺点
  1. 提高系统的可扩展性:每个微服务可以独立部署和升级,不会互相之间影响,比如项目又新增了一项业务,这样就不用修改现有的项目代码了,直接新增一个服务
  2. 提高系统的稳定性:如果某个微服务宕机了,也不会整个系统崩溃
  3. 统一的管理和配置:集中化的配置管理,让你可以随时调整所有微服务的参数,而不需要逐一手动修改。
  4. 简化开发和运维:提供了一整套开箱即用的工具,比如服务注册与发现、分布式追踪等,开发者不用自己从头实现这些复杂的功能。

缺点:最明显的就是服务调用关系错综复杂,技术成本相对高,随着业务的扩展服务的增加,运维压力也会随之增大

  • 如何才算真正的Spring Cloud

首先要明确的是并不是把单体项目拆分成小的项目并打包独立部署后就是Spring Cloud微服务。Spring Cloud微服务要互相之间能通信,能协作起来,但又互不影响才算是Spring Cloud微服务架构。

比如:电商平台,包含用户管理、订单管理、支付管理,产品管理等功能

把这些功能拆分为独立的小项目,也能启动并运行,但是这些服务之间没有通信和协作,那么它们只是孤立的“孤岛”,无法完成一个完整的业务流程,用户购买产品时需要下单,下单就需要用户信息,就需要订单管理。因此仅仅拆分是不够的,还需要让这些服务互相通信、联动起来,才能组成一个完整的应用。

     总结:通信,自治,统一标准的对外接口,有自己的数据源

  • 构建一个简单的微服务

因为我的 Spring Boot 应用是通过阿里云创建的,那么我们可以基于阿里云的生态工具来构建一个微服务架构。

1.确定需求

假设我们要开发一个新系统,包含以下两个功能:

A.用户管理(user-service):负责用户注册、登录等操作。

B.订单管理(order-service):负责创建订单、查询订单等功能。

这两个功能将被拆分成两个独立的微服务,并通过 Spring Cloud Alibaba 实现通信和协作。

2. 技术选型

框架:Spring Boot + Spring Cloud Alibaba

服务注册与发现:Nacos

负载均衡:SLB(LoadBalancer

配置管理:Nacos

API 网关:Spring Cloud Gateway

  1. 构建步骤

创建 Nacos 服务注册与配置中心

下载并解压 Nacos。Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网

启动 Nacos:解压后进入 nacos/bin 目录打开cmd  Windows: startup.cmd -m standalone 

启动成功后,访问 http://localhost:8848/nacos,默认用户名和密码为 nacos/nacos。

创建用户服务(user-service)

创建订单服务(order-service)

创建API网关(Spring Cloud Gateway)

演练项目源码(如果这里没有,可以私信我要,写的比较简单)

你们的点赞是我动力的源泉。
这个源码资源其实绑定上了,不知道为啥不能免费下载,如果有需要私信我吧。

                                              

http://www.dtcms.com/a/17222.html

相关文章:

  • 【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】
  • 新一代高性能无线传输模块M-GATEWAY3
  • 玩转观察者模式
  • 【Linux】进程间关系与守护进程
  • MySQL 记录
  • c# textbox 设置不获取光标
  • 微信小程序 - 组件和样式
  • Django简介
  • 避雷,Ubuntu通过ollama本地化部署deepseek,open-webui前端显示
  • 链表(典型算法思想)—— OJ例题算法解析思路
  • android启动整体流程
  • Java面试——Tomcat
  • DeepSeek各版本说明与优缺点分析
  • ASP.NET Core 面试宝典【刷题系列】
  • 【大语言模型】在大语言模型中,user、assistant、system 三种角色的定位和功能有何不同。
  • HCIA项目实践--RIP的拓展配置
  • 通过命令行运行py文件与通过ide运行py文件,对文件中模块的引用方式的影响
  • 反射概率以及一些基本API的使用
  • BUU38 [RoarCTF 2019]Easy Java1
  • DeePseek结合PS!批量处理图片的方法教程
  • AnythingLLM打造私有知识库
  • 微软AutoGen高级功能——Serializing Components
  • 【原创】springboot+vue考试考场座位安排管理系统设计与实现
  • 【架构设计】微服务架构模型:常见模型的对比和分析
  • 更高效实用 vscode 的常用设置
  • 全排列(力扣46)
  • RFM模型-数据清洗
  • 基于mediapipe深度学习的手势数字识别系统python源码
  • 20250214实测飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1的USB2.0的速度为29.0 MB/s
  • 香港VPS服务器如何排查和修复 MySQL 数据库连接失败的问题