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

Spring Cloud 教程(一) | 认识Spring Cloud

Spring Cloud Alibaba教程(一) | 认识Spring Cloud Alibaba

  • 前言
  • 一、SpringBoot和SpringCloud区别
  • 二、SpringCloud 第一代(Spring Cloud + Netflix)
  • 三、SpringCloud 第二代(Spring Cloud + Alibaba)

前言

springBoot = Spring + X, 就是对于Spring和其他技术的融合 进行了简化开发,所以x可以代表任何技术,比如 mybtis, mybatisPlus, redis… 对于集成这些常用框架,springBoot本身就预设了一些常用技术的集成方案,对于没有预设的,也可以通过自动化配置功能,快捷融入进来。

springCloud = 多个SpringBoot的融合,通过多个SpringBoot模块,完成一套微服务体系的搭建,并使其具备了服务发现与注册,服务治理,服务网关,服务监控,服务间调用等等一系列功能的集合,方便开发者们很容易的搭建一套微服务框架,只需把更多的精力投入到业务层的开发当中。

SpringCloud本身不是新的框架,他是一系列框架的有机组合,利用SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发。并非所有的组件都是Spring提供,Netflix扮演了重要角色。

一、SpringBoot和SpringCloud区别

  • SpringBoot专注于开发方便的开发单个个体微服务
  • SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务,整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务
  • SpringBoot可以离开SpringCloud独立使用,开发项目,但SpringCloud离不开SpringBoot,属于依赖关系
  • SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架

Spring Cloud Netflix 和 Spring Cloud Alibaba 都是 Spring Cloud 生态系统中的重要组成部分,它们各自提供了一套微服务开发所需的规范和标准,并集成了相应的组件来实现这些功能。以下是它们与 Spring Cloud 关系的详细解析:

二、SpringCloud 第一代(Spring Cloud + Netflix)

SpringCloud 第一代实际上都是用的Netflix开源的组件整合微服务解决方案。
最开始 SpringCloud 的第一代版本时,它的每个分布式组件都不是自己研发,而是在 GitHub 上找 Netflix 公司(制作视频网站),该公司研发了许多开源的微服务框架。

SpringCloud 就将所有的组件核心进行了整合。
但并不是 SpringCloud 写出的,因为 SpringCloud 目的是为了解决程序员在微服务架构中遇到的问题,因而其中的Eureka、Hystrix、Ribbon、Feign 和 Zuul 网关其实都并非 SpringCloud 写的,而使用的都是 Netflix 公司的。

需要注意的是,自2018年12月12日起,Netflix 公司宣布停止对其内部开源组件的维护,转而推荐社区自行维护。
这意味着 Spring Cloud Netflix 中的部分组件将不再得到官方更新和支持。

Spring Cloud 第一代构成:

组件名称来源具体作用
config配置中心Spring Cloud分布式配置中心
Eureka服务注册与发现Netflix允许服务通过REST API向Eureka注册自身信息
允许客户端通过Eureka发现已注册的服务
Eureka Server作为服务注册中心,维护服务清单,并监测服务健康状态
提供服务治理功能,如服务注册、发现、健康检查等
Ribbon客户端负载均衡Netflix提供客户端的软件负载均衡算法和服务调用
Feign声明式HTTP客户端Netflix基于 ribbon 和 hystrix 的声明式服务调用组件。
简化HTTP客户端的编写,使得HTTP请求如同调用本地方法一样
通过@FeignClient注解定义服务接口,Feign会自动生成代理类,并处理HTTP请求和响应
支持多种HTTP客户端实现,如JDK原生的URLConnection、Apache HttpClient等
Hystrix熔断器(服务保护框架)Netflix
提供熔断机制,当服务调用失败率达到一定阈值时,自动熔断,避免级联失败
ZuulAPI网关Netflix提供统一的访问入口,为微服务架构提供路由和过滤功能网关组件

三、SpringCloud 第二代(Spring Cloud + Alibaba)

SpringCloud 第二代实际就是自己研发和 SpringCloudAalibaba 国内的优秀的微服务解决框架实现整合。

具体的体现如下:
网关方面:
第一代 是 zuul,而第二代时 使用的则是Spring Cloud 自己研发的 Gateway 网关。
在官网表述中可以得知 Gateway 网关性能远远好于 zuul 网关,

远程调用方面
第一代 是 Feign,而第二代时 Spring Cloud 团队在Feign的基础上进一步开发的一款框架。它在保留Feign原有功能的基础上,增加了对Spring MVC注解的支持。

客户端负载均衡器
第一代 是 Ribbon,而第二代时 使用的则是Spring Cloud 自己研发的 Loadbalancer

服务保护框架
第一代 是 Hystrix,而第二代时 Spring Cloud 自己研发的 r4j(Resilience4J),后续 Alibaba 研发 Sentinel 比较好用,所有就使用了Sentinel 。

核心组件

组件名称来源具体作用
Gateway云梯网关Spring Cloud提供统一的访问入口,为微服务架构提供路由和过滤功能网关组件
OpenFeign远程调用Spring Cloud
Loadbalancer客户端负载均衡器Spring Cloud提供客户端的软件负载均衡算法和服务调用
Nacos注册中心、配置中心Alibaba提供动态服务注册与发现的能力,支持服务的自动注册、发现、健康检查等,是微服务架构中服务治理的基础。
Sentinel流量控制、熔断降级(服务保护框架)Alibaba作为流量控制、熔断降级的组件,Sentinel能够在系统面临高并发或下游服务故障时,自动进行流量控制、熔断降级等操作,保护系统不被压垮。
RocketMQ消息中间件Alibaba提供高性能、高可靠的分布式消息服务,支持发布/订阅模式和点对点模式,适用于解耦服务间通信、异步处理、数据流处理等场景。
Seata分布式事务Alibaba解决微服务架构下的分布式事务问题,提供全局事务的一致性管理,确保跨多个服务的业务操作数据一致性。

另外还有一些高级功能(存在收费)
Alibaba Cloud 0SS 阿里云存储
Alibaba Cloud SchedulerX分 布式任务调度平台
Alibaba Cloud SMS 分布式短信系统

关于远程服务调用这一块:
OpenFeign和Dubbo,两者都支持远程服务调用,使得服务消费者可以方便地调用服务提供者的接口。

1. 协议支持方面:

  • Dubbo提供了多种协议支持,包括Dubbo协议、HTTP协议、Hessian协议、Thrift协议等,这使得Dubbo在协议选择上更加灵活。
  • OpenFeign则主要支持HTTP协议,更适用于基于RESTful风格的微服务架构。

2. 实现方式方面:

  • Dubbo是一种RPC(远程过程调用)框架,它提供了高性能、高可靠性的远程服务调用方案,并且支持多种负载均衡策略和容错策略。
  • OpenFeign则是一种声明式的REST客户端,它通过注解方式定义REST API接口,并自动生成实现该接口的客户端代码,从而简化了RESTful服务的调用过程。

3. 应用场景:

  • Dubbo更适合于传统的RPC调用场景,特别是在复杂的分布式系统中,Dubbo的高性能、高可扩展性和丰富的服务治理功能能够发挥重要作用。
  • OpenFeign则更适合于轻量级的微服务架构,特别是在Spring Cloud体系中,OpenFeign能够很好地与Spring Cloud的其他组件集成,提供简洁、高效的HTTP客户端功能。

现如今 目前市面上最新的 Spring Cloud 架构 都是用的 Spring Cloud Alibaba 这一套

参考文章
【1】SpringCloud 第一代与第二代的区别 | 学习笔记
【2】Spring Cloud Alibaba-全面详解(学习总结—从入门到深化)
【3】SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结—从入门到深化)


http://www.mrgr.cn/news/35120.html

相关文章:

  • Chromium 中chrome.system.display扩展接口定义c++
  • 【Python】轻松实现机器翻译:Transformers库使用教程
  • 10.WINUSB复合设备
  • ts 中 ReturnType 作用
  • 【教程】第五章:标签页 区块 —— 丰富视图,精彩纷呈
  • Redis五种数据类型剖析
  • iptables添加有线网卡与无线网卡桥接转发规则
  • Java语法-类和对象(上)
  • Ubuntu USB设备绑定
  • project generator 简单使用(二)之 CLion 与 AC6
  • top 使用技巧
  • 基于vue框架的刺梨销售管理系统pgl49(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 大势智慧亮相“第十届博博会”,展现数字文旅新质生产力!
  • React 中实现 vue keep-alive 功能的方法
  • web群集--rocky9.2部署zabbix服务端的详细过程
  • 如何使用ECharts制作折线图
  • 用于体积医学图像分割的跨视角差异依赖网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割
  • 软件验收测试报告有什么作用?第三方验收测试报告包括哪些内容?
  • EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析
  • 【源码】Sharding-JDBC源码分析之ShardingSphereConnection的创建原理
  • 分享C++程序员面试八股文(九)
  • 《动手学深度学习》笔记2.1——神经网络从基础→进阶 (模型构建→参数初始化→设计层/块→磁盘读写→多GPU加速)
  • RPC框架开发——理解项目功能
  • 可看见车辆行人的高清实时视频第2辑
  • unity CustomEditor的基本使用
  • vue强制刷新组件的三种方式:$forceupdate、v-if、key