技术面:SpringCloud(SpringCloud有哪些组件,SpringCloud与Dubbo的区别)

什么是SpringCloud

Spring Cloud 是一个基于 Spring Framework 的开源微服务架构工具集,用于简化和快速构建分布式系统。它提供了一套完整的微服务解决方案,基于 Spring Boot 框架,它像是一个"大的容器",将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。

我们在做后端服务时,单体应用使用Spring,需要快速构建,简化开发使用SpringBoot,构建分布式、微服务应用,使用SpringCloud。

SpringCloud的核心价值在于:

  • 简化分布式系统开发
  • 提供微服务架构的完整套件
  • 通过集成成熟的技术组件,减少开发成本
  • 提供开箱即用的微服务解决方案

image

SpringCloud有哪些组件

Eureka注册中心

Eureka是服务发现和注册中心,可以帮助服务消费者自动发现和调用服务提供者。

  • 作用:服务提供者将自己注册到注册中心,服务消费者通过查询注册中心获取服务实例列表。
  • 原理:Eureka 由 /* by 01022.hk - online tools website : 01022.hk/zh/runjs.html */ Service Provider(服务提供方)、/* by 01022.hk - online tools website : 01022.hk/zh/runjs.html */ Service Consumer(服务消费方)和 Eureka Server(服务注册中心)组成。
  • 特点:Eureka 通过心跳检测、健康检查与客户端缓存机制,提高系统的灵活性与可用性。

Spring Boot 3.x移除了对 Java EE(Jakarta EE)|AP|(如 javax包)的支持,而 Eureka仍然依赖javax.xml.bind 等API,另一方面,Netflix 整个套件(Eureka/Ribbon/Hystrix/Zuul)进入维护模式,Spring Cloud 2020.x 起用自研组件替换Eureka。

可替代Eureka的方案有Zookeeper、Nacos、Consul。

Zookeeper是最早流行的开源分布式协调服务框架之一,同时也提供了分布式配置中心的功能。Zookeeper以高可用、一致性和可靠性著称,但是需要用户自己来开发实现分布式配置的功能。

Nacos是阿里巴巴开源的服务注册中心和配置中心。与Zookeeper不同的是,Nacos自带了配置中心功能,并提供了更多的可视化配置管理工具。Nacos的目标是成为一个更全面的云原生服务发现、配置和管理平台。

ConsulHashiCorp开源的服务注册中心和配置中心,提供了服务发现、健康检查、KV存储和多数据中心功能。Consul提供了更丰富的健康检查和路由功能,同时也提供了丰富的API和Web Ul。

Ribbon负载均衡组件

Ribbon是负载均衡组件,可以帮助客户端在多个服务提供者之间进行负载均衡。

  • 功能:实现客户端负载均衡。
  • 作用:基于某种负载均衡算法,自动帮助服务消费者请求。
  • 特点:与 Zuul 默认集成,完成请求到后端实例的分发。

Spring Cloud 2020.0 (Ilford)起移除 Ribbon,默认使用 spring-cloud-loadbalancer;Netflix Ribbon 进入维护模式。

Ribbon的具体实现原理可以看我之前写过的文章:你都用过SpringCloud的哪些组件,它们的原理是什么?

Feign/OpenFeign:声明式HTTP客户端,可以帮助开发人员更容易地编写HTTP调用代码。

Feign的作用与特点如下
简化HTTP客户端开发:通过声明式接口,Feign自动生成HTTP请求代码,减少重复的样板代码。开发者只需定义接口方法,Feign就会将其映射到HTTP请求上。
支持多种注解Feign原生支持Feign注解和JAX-RS注解,让HTTP请求的定义更加简洁。
整合负载均衡与服务发现Feign默认与Ribbon(客户端负载均衡器)和Eureka(服务注册中心)整合,能自动实现服务地址解析和请求分发,提高系统的可扩展性和可靠性。
可扩展性强:支持多种HTTP客户端实现(如OkHttpApache HttpClient),开发者可以灵活切换底层库以适应不同性能需求。
支持自定义拦截器:可以通过实现Request.InterceptorResponse.Interceptor接口,对HTTP请求和响应进行拦截处理,例如添加认证信息、修改请求数据、记录日志等。

但是从Spring Cloud 2020版本开始,官方宣布Feign将不再维护和支持,推荐使用OpenFeign作为替代方案。

OpenFeign是Spring Cloud对Feign进行的二次封装和增强。

Feign和OpenFeign的区别:

  • 所属生态Feign是Netflix的独立开源项目,而OpenFeign是Spring Cloud生态的一部分。
  • 注解支持Feign使用原生注解(如@RequestLine),OpenFeign使用Spring MVC注解(如@GetMapping)。
  • 配置方式Feign需要手动配置编码器、解码器、拦截器等,而OpenFeign通过Spring的自动配置机制简化了配置。
  • 维护状态Feign自2019年起进入维护模式,不再添加新功能;OpenFeign作为Spring Cloud核心组件,会持续更新。
  • 与Spring集成OpenFeign与Spring Bean紧密结合,能自动注册为Spring Bean,而Feign需要额外配置。

但是,随着SpringCloud 2022的发布,官方宣布OpenFeign将被视为功能完整。这意味着Spring Cloud团队将不再向模块添加新特性,进入维护阶段,只会修复bug和安全问题。

熔断器 (Hystrix)

功能:容错管理工具,提供服务熔断和降级机制
作用:当服务调用失败率超过阈值时,自动熔断服务调用,避免"雪崩效应"
特点:提供 fallback 逻辑,即使部分服务故障,系统仍可保持基本可用性;提供实时监控和指标收集

Hystrix的具体实现原理可以看我之前写过的文章:你都用过SpringCloud的哪些组件,它们的原理是什么? 这里面有介绍Hystrix的实现原理,本质上是用线程池或信号量将各个服务进行了隔离。

在做熔断,降级的作用方面,Sentinel是可以替代Hystrix的,并且在各方面都是优于Hystrix的,更推荐使用Sentinel。

Sentinel与Hystrix的对比

对比维度SentinelHystrix
维护主体阿里巴巴Netflix
维护状态持续维护,社区活跃2018年已进入维护模式,Netflix已停止维护
核心设计理念以流量为切入点,多维度保护服务稳定性熔断器模式,防止服务调用失败引发级联故障
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或异常比例基于失败比率
流量控制支持基于QPS,支持基于调用关系的限流有限支持(主要通过线程池容量控制)
热点参数限流支持不支持
流量整形支持慢启动、匀速排队模式不支持
系统负载保护支持(借鉴TCP BBR思想)不支持
实时指标实现滑动窗口(精确到毫秒级)滑动窗口(基于RxJava)
规则配置支持多种数据源(Nacos/ZooKeeper等)支持多种数据源
扩展性多个扩展点(SPI接口)插件的形式
基于注解支持支持(@SentinelResource)支持
实时监控与控制面板开箱即用,可配置规则、查看秒级监控、机器发现等监控功能有限,需结合Turbine等工具
性能开销较低(信号量隔离)较高(线程池隔离资源消耗大)
适用场景API网关、流量入口、需要精细流量控制的场景微服务间调用保护、需要明确状态管理的场景
生态支持Servlet、Spring Boot/Spring Cloud、Dubbo、gRPC、Reactor、Quarkus等Servlet、Spring Cloud Netflix
系统保护能力提供系统级自适应保护,让入口流量与系统负载达到平衡无系统级保护机制
典型场景电商秒杀、高并发API入口服务间调用保护、传统微服务架构

但是如果项目已全面拥抱 Spring Cloud 202x,官方更常用的熔断选型是 resilience4j(已内置在 spring-cloud-circuitbreaker)。
Sentinel 功能最强,但引入阿里生态;resilience4j 更轻量,对 Reactive 友好。选型应看团队技术栈,而非“一律 Sentinel”。

API 网关 (Zuul / Spring Cloud Gateway)

  • 功能:所有外部请求的统一入口
  • 作用:实现路由、限流、熔断、鉴权等功能
  • 特点:
    • Zuul:基于 Netflix 的 API 网关
    • Spring Cloud Gateway:基于响应式编程的高性能网关,提供灵活的路由和强大的过滤器机制

不管是Zuul还是Gateway,都是Spring Cloud生态的一部分,他的主要功能是API网关。支持请求路由、负载均衡、权限认证、限流、请求过滤等功能。

核心区别

  1. 技术架构与底层实现
    Zuul 1.x:基于Servlet技术栈开发(依赖Tomcat等Servlet容器),采用阻塞式I/O模型(每个请求对应一个线程,线程阻塞直到请求处理完成)。
    Spring Cloud Gateway:基于Spring 5、Spring Boot 2.x和Project Reactor开发,采用非阻塞响应式编程模型(Netty作为底层服务器,支持异步非阻塞I/O)
  2. 性能对比
指标Zuul 1.xSpring Cloud Gateway
并发处理能力通常数千QPS万级QPS以上
高并发表现线程资源易耗尽,响应延迟高在简单路由+空负载场景下,性能约为Zuul 1.x的1.6倍
CPU/内存消耗高并发时CPU使用率常超80%,GC频繁相同流量下内存占用减少约25%

Netflix 已发布 Zuul 2,基于 Netty 非阻塞,但 Spring Cloud 官方并未集成,因此实际场景几乎不用

配置中心 (Spring Cloud Config / Nacos Config)

  • 功能:实现配置的集中管理和动态刷新
  • 作用:将应用程序的配置集中管理,支持动态更新配置
  • 特点
    • Spring Cloud Config:与 Git 集成好,功能成熟
    • Nacos Config:提供更友好的 UI 控制台,配置动态刷新更高效便捷

其他重要组件

Spring Cloud Bus:消息总线,实现配置在分布式系统中的传播和更新
Spring Cloud Sleuth:分布式追踪,通过唯一标识跟踪请求流程
Spring Cloud Stream:消息驱动的微服务抽象,连接消息中间件如 RabbitMQ、Kafka
Spring Security:用于简化 OAuth2 认证和资源保护

但是,我们并不一定非要全部都用SpringCloud的这些组件,有的时候我们也可以选择其他的开源组件替代。比如经常用Dubbo/gRPC来代替Feign进行服务间调用。经常使用Nacos代替Config+Eureka来实现服务发现/注册及配置中心的功能。

Spring Cloud 架构实现流程

  • 请求统一通过 API 网关(ZuulSpring Cloud Gateway)访问内部服务
  • 网关接收到请求后,从注册中心(Eureka)获取可用服务
  • Ribbon 进行均衡负载后,分发到后端具体实例
  • 微服务之间通过 Feign 进行通信处理业务
  • Hystrix 负责处理服务超时熔断
  • 配置信息通过 Spring Cloud ConfigNacos Config 进行集中管理

Spring Cloud 通过这些组件的协同工作,为开发者提供了一套简单、高效、稳定的分布式系统开发工具包,使微服务架构的开发、部署和管理更加便捷。

SpringCloud与Dubbo的区别

Spring CloudDubbo都是为了简化分布式系统开发而设计的开源框架DubboSpring Cloud 都侧重在对分布式系统中常见问题模式的抽象(如服务发现、负载均衡、动态配置等)。

  1. 核心定位与设计哲学
维度Spring CloudDubbo
核心定位微服务一站式解决方案高性能RPC框架
设计哲学约定优于配置、开箱即用轻量级、高度可定制
目标提供完整的微服务生态专注于服务调用与治理
  1. 通信协议与性能
维度Spring CloudDubbo
通信协议默认使用HTTP/REST协议(文本协议)自定义二进制协议(Dubbo协议)
性能通信效率较低(HTTP头部冗余,JSON序列化开销大)数据传输性能较好(二进制协议,TCP长连接)
带宽占用较高(HTTP传输,JSON报文)较低(二进制协议)
  1. 生态系统与组件丰富度
维度Spring CloudDubbo
组件覆盖服务治理、配置、网关、监控等全方位专注服务调用与治理,其他需集成
典型组件Eureka(注册中心)、Hystrix(熔断器)、Config(配置中心)、Zuul(网关)Zookeeper(注册中心)、负载均衡、容错机制
生态完善度生态更完善,Spring生态支持生态相对匮乏,但逐渐丰富
  1. 社区支持与活跃度
维度Spring CloudDubbo
全球社区庞大活跃的全球开发者社区国内社区活跃,中文支持好
文档支持官方文档完善,但中文资源质量参差文档以中文为主,对国内开发者更友好
更新活跃度高频更新早期活跃度较低,被阿里重新维护后恢复
  1. 适用场景与规模
维度Spring CloudDubbo
集群规模更适用于中小规模微服务集群可在超大规模集群中实现水平扩容
典型场景中小型互联网公司快速构建分布式系统需要高性能服务调用的大型系统
  1. 多语言支持
维度Spring CloudDubbo
多语言支持通过HTTP协议支持多语言开发提供Java外的多语言实现,支持构建多语言异构微服务体系
跨语言能力基于HTTP协议,天然支持通过Triple协议(主要基于HTTP/2 + Protobuf)支持跨语言
  1. 开发成本与学习曲线
维度Spring CloudDubbo
学习曲线较陡峭(需掌握多个组件)相对平缓(核心概念简单)
开发成本开箱即用,集成相对简单定制性高,可能需要实现自定义Filter、Interceptor等
  1. 服务治理能力
维度Spring CloudDubbo
服务发现基于Eureka等注册中心基于Zookeeper/Nacos等注册中心
负载均衡与Ribbon结合,客户端负载均衡自带软负载均衡及容错机制
容错处理Hystrix提供熔断机制自带容错策略(快速失败/重试/熔断降级)

作者:纪莫
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

欢迎扫描二维码关注公众号:Jimoer

文章会同步到公众号上面,大家一起成长,共同提升技术能力。

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。

您的鼓励是博主的最大动力!

微信公众号
源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值