【SpringCloud】Spring Cloud基本介绍

news2024/12/27 13:46:27

目录

  • 回顾
    • 架构分类
      • 单体架构
      • 分布式架构
      • 微服务架构
        • 什么是微服务
        • 优点
        • 缺点
        • 微服务的架构特征:
        • 微服务架构面临的挑战
        • 技术挑战
        • 微服架构的设计原则
        • 微服务概念
          • 提供者(Provider)
          • 消费者(Consumer)
          • RPC和Restful
          • 集群
          • 分布式
      • 总结
    • 服务拆分和远程调用
      • 服务拆分原则
      • 服务拆分示例
    • 思考
      • 主流的微服务框架
      • Spring Cloud Netflix概述
      • Netflix OSS
        • Netflix OSS
        • 毕马威:颠覆性公司和商业模式报告
        • Netflix是什么,与Spring Cloud有什么关系
        • Netflix OSS的开源组件
          • Eureka:服务注册和发现
          • Zuul:网关
          • Ribbon,即负载均衡
          • Feign,服务客户端
          • Hystrix,监控和断路器
          • Turbine,监控聚合
  • Spring Cloud
    • Spring Cloud简介
    • Spring Cloud特征
    • 版本
      • 版本依赖关系
    • Spring Cloud 规范下的实现
    • 本教程中选用的组件

回顾

架构分类

在这里插入图片描述

单体架构

  • 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

  • 优点:

    • 架构简单
    • 部署成本低
  • 缺点:

    • 耦合度高(维护困难、升级困难)
      在这里插入图片描述

分布式架构

  • 分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

  • 优点:

    • 降低服务耦合
    • 有利于服务升级和拓展
  • 缺点:

    • 服务调用关系错综复杂
      在这里插入图片描述
  • 分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:

    • 服务拆分的粒度如何界定?
    • 服务之间如何调用?
    • 服务的调用关系如何管理?

人们需要制定一套行之有效的标准来约束分布式架构。

微服务架构

在这里插入图片描述

什么是微服务
  • 微服务的概念源于2014年3月Martin Fowler(马丁·福勒)所写的一篇文章:https://martinfowler.com/microservices。
  • 微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常是基于HTTP协议的RESTful API)。这些服务围绕业务能力构建,并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
优点
  • 逻辑清晰,项目复杂度降低:通过对共享业务更加细粒度的拆分,一个服务只需要关注一个特定的业务领域,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,开发、维护会更加简单;
  • 技术选型更加灵活:每个微服务都有不同的团队来维护,所以可以结合业务特性自由选择技术栈;
  • 可扩展性更强:可以根据每个微服务的性能要求和业务特点对服务进行灵活扩展;
  • 独立部署:单个微服务的代码量比较小,使得发布更加高效;
  • 容错性:如果某一个服务发生故障,可以通过重试、降级等机制实现容错;
缺点
  • 性能降低,微服务的间通过REST、RPC等形式进行交互,通信的延时会受到较大的影响;
  • 提升了运维的难度(版本发布、问题排查、配置管理、监控);
  • 数据一致性的问题;
微服务的架构特征:
  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署和交付
  • 面向服务:服务提供统一标准的接口,与语言和技术无关
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。

微服务架构面临的挑战
  • 微服务粒度大小难以划分,需要设计人员对业务有很好的掌握;
  • 分布式复杂性,主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大;
  • 微服务之间通信成本较高,对微服务之间网络稳定性、通信速度要求较高;
  • 由于微服务数量较大,运维人员运维、部署有较大的挑战
技术挑战
  • 微服务架构的主要目的是实现业务服务的解耦;
  • 对服务进行治理(服务的注册与发现、服务与服务之间的调用、熔断限流、负载均衡、链路追踪、分布式配置中心、服务路由等);
微服架构的设计原则

在这里插入图片描述

微服务概念
提供者(Provider)
  • 提供接口供其他项目调用的项目
消费者(Consumer)
  • 调用提供者接口的项目
    在这里插入图片描述
RPC和Restful
  • RPC:RPC远程过程调用(Remote Procedure Call)的缩写形式,主要是基于TCP/IP协议的。
  • Restful:Restful是一种网络应用程序的设计风格和开发方式,基于HTTP协议,可以使用XML格式定义或JSON格式定义。
集群
  • 集群就是单机的多实例,在多个服务器上部署多个服务,每个服务就是一个节点,部署N个节点,处理业务的能力就提升 N倍(大约),这些节点的集合就叫做集群。
分布式
  • 分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC或Restful方式通信。

总结

  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
  • 微服务:一种良好的分布式架构方案
    • 优点:拆分粒度更小、服务更独立、耦合度更低
    • 缺点:架构非常复杂,运维、监控、部署难度提高
  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

服务拆分和远程调用

  • 何分布式架构都离不开服务的拆分,微服务也是一样。

服务拆分原则

  • 不同微服务,不要重复开发相同业务
  • 微服务数据独立,不要访问其它微服务的数据库
  • 微服务可以将自己的业务暴露为接口,供其它微服务调用
    在这里插入图片描述

服务拆分示例

cloud-demo:父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务

说明:

  • 订单微服务和用户微服务都必须有各自的数据库,相互独立
  • 订单服务和用户服务都对外暴露Restful的接口
  • 订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

思考

方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。
其中在Java领域最引人注目的就是SpringCloud提供的方案了。

主流的微服务框架

框架名称说明
MotanMotan(茅台)是新浪微博开源的RPC框架,官网:github.com/weibocom/motan
JSF JSF(京服)是京东的微服务组件。
MSEC毫秒服务引擎(MSEC, Mass Service Engine in Cluster)是腾讯的一个开源框架,适用于在廉价机器组成的集群上开发和运营分布式后台服务。该项目集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体,目的是提高开发与运营的效率和质量。
Dubbo阿里巴巴开源的RPC框架,后来加入Apache孵化器并成功毕业。新的名字为Apache Dubbo。
DubboX当当网基于Dubbo开源的PRC框架,后来并入Apache Dubbo。
Netflix OSSNetflix OSS是由Netflix公司开发的一套代码框架,用于解决分布式系统的问题,如:服务注册与发现、负载均衡、熔断降级、限流、网关等。
Spring CloudSpring Cloud是基于Spring Boot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
Spring Cloud NetflixSpring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。由Netflix开发后来又并入Spring Cloud大家庭,它主要提供的模块包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。
Spring Cloud AlibabaSpring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。Spring Cloud Alibaba 正式入驻Spring Cloud 官方孵化器,并顺利毕业。
Spring Cloud 生态下中微服务整理Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
主流的微服务治理方案:Spring Cloud Netflix和Spring Cloud Alibaba

Spring Cloud Netflix概述

  • Spring Cloud Netflix诞生的三个原因

    • Spring家族中的大部分项目都是客户端项目,缺少服务端项目和分布式项目的经验;
    • Netflix开源其分布式领域的中间件,叫做Netflix OSS;
    • Dubbo的出现,让Spring母公司(Privotal)感受到了威胁,它需要保持或增值自身价值。
  • Spring母公司缺少分布式项目的经验,而Netflix OSS的开源组件正好涉及分布式领域的核心功能,双方一拍即合,合作诞生的Spring Cloud Netflix项目用于为快速构建分布式系统提供统一的开发模式。

  • Spring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。其中,Netflix OSS是由Netflix公司开发的一套开源框架和组件库。

Netflix OSS

Netflix OSS
  • Netflix OSS(Netflix Open Source Software)即Netflix开源软件。
  • Netflix由于做视频的原因,访问量非常的大,从而促使其技术快速的发展在背后支撑着,也正是如此,Netflix开始把整体的系统往微服务上迁移。
  • Netflix毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS,依靠开源社区的力量不断的壮大。
毕马威:颠覆性公司和商业模式报告
  • 报告显示Amazon、Apple、Alibaba、Airbnb、Netflix、Google、DJI、Microsoft、Facebook、Baidu、Tencent等公司是最具颠覆性的公司
  • 其中Netflix和阿里巴巴分别为第3位和第5位,他们都是对Spring Cloud做出巨大贡献的公司
Netflix是什么,与Spring Cloud有什么关系
  • 首先,Netflix是一家做视频的网站,可以这么说该网站上的美剧应该是最火的
  • Netflix由于做视频的原因,访问量非常的大,从而促使其技术快速的发展在背后支撑着,也正是如此,Netflix开始把整体的系统往微服务上迁移。
  • Netflix的微服务做的不是最早的,但是确是最大规模的在生产级别微服务的尝试。也正是这种大规模的生产级别尝试,在服务器运维上依托AWS云。当然AWS云同样受益于Netflix的大规模业务不断的壮大。[(AWS)Amazon Web Services(亚马逊网络服务)]
  • Netflix的微服务大规模的应用,在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来,叫做Netflix OSS,也正是如此,在技术上依靠开源社区的力量不断的壮大。
  • Spring Cloud是构建微服务的核心,而Spring Cloud是基于Spring Boot来开发的
  • Pivotal在Netflix开源的一整套核心技术产品线的同时,做了一系列的封装,就变成了Spring Cloud;虽然Spring Cloud到现在为止不只有Netflix提供的方案可以集成,还有很多方案,但Netflix是最成熟的。
Netflix OSS的开源组件
Eureka:服务注册和发现
  • 它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
Zuul:网关
  • 所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求
Ribbon,即负载均衡
  • Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
Feign,服务客户端
  • 服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
Hystrix,监控和断路器
  • 我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
Turbine,监控聚合
  • 使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。

Spring Cloud

Spring Cloud简介

  • Spring Cloud是基于Spring Boot的一整套实现微服务的框架。
  • 他提供了微服务开发所需的配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
  • 最重要的是跟Spring Boot框架一起使用的话,会让你非常方便开发微服务架构的服务。
  • 官网:https://spring.io/projects/spring-cloud/

Spring Cloud特征

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务与服务之间的请求调用
  • 负载均衡
  • 断路器
  • 全局锁
  • 领导选举和集群状态
  • 分布式消息传递

版本

名称描述
SNAPSHOT代表快照,也就是未完成的意思
GA代表稳定版
RELEASE发行版,没有太多问题
SR正式发布版
PRE(M1、M2)里程碑版,主要是修复了一些BUG的版本,一个GA后通常有多个里程碑版
BUILD-XXX开发版,开发团队内部使用,不是很稳定
  • 本教程使用版本:Spring Cloud Hoxton.SR12

版本依赖关系

Spring Cloud所有的子项目都依赖Spring Boot框架,所以Spring Boot框架的版本号和Spring Cloud的版本号之间也存在依赖及兼容的关系,如下图所示:
在这里插入图片描述

Spring Cloud 规范下的实现

  • 在Spring Cloud这个规范下,有很多实现,比如:Spring-Cloud-Bus、Spring-Cloud-Gateway、Spring-Cloud-Netflix等等。
  • 在这些实现中,绝大部分组件都使用“别人已经造好的轮子”,然后基于Spring Cloud规范进行整合,使用者只需要使用非常简单的配置即可完成微服务架构下复杂的需求。
  • 这也是Spring 团队最厉害的地方,他们很少重复造轮子,最早的Spring 框架,它只提供了IOC和AOP两个核心功能,对于ORM、MVC等其他功能,Spring都提供了非常好的兼容性,比如:Hibernate、MyBatis、Spring MVC、Strus2。
  • 只有在别人提供的东西不够好的情况下,Spring团队才会考虑自己研发。比如Strus2经常有安全漏洞,所以Spring团队自己研发了Spring MVC框架。再比如Spring-Cloud-Netflix中的Zuul网关,因为性能及版本迭代较慢,所以Spring团队孵化了一个Spring Cloud Gateway来取代Zuul。
  • Spring团队一直在不断地为开发者解决一些技术复杂度高的问题,使开发者能够更高效地专注于业务开发的工作。从Spring到Spring Boot,再到Spring Cloud,都是如此。

本教程中选用的组件

体系组件名称作用定位
Eureka注册中心,提供服务注册与发现服务
Open Feign请求客户端,简化微服务之间请求调用
Hystrix容错处理
Ribbon为微服务提供负载均衡
Gateway网关,提供服务转发与校验服务
Config分布式配置,提供统一配置服务
Sleuth服务追踪,提供微服链路追踪服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1709607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保障餐饮场所安全:可燃气体报警器专业检测的必要性

在餐饮行业,火灾隐患一直是备受关注的问题。为了有效预防和及时发现可燃气体泄漏,可燃气体报警器的专业检测周期显得尤为重要。 今天,佰德和大家一起来深入了解一下可燃气体报警器的专业检测周期,若您对此有不同的观点或其他的问…

比较(一)利用python绘制条形图

比较(一)利用python绘制条形图 条形图(Barplot)简介 条形图主要用来比较不同类别间的数据差异,一条轴表示类别,另一条则表示对应的数值度量。 快速绘制 基于seaborn import seaborn as sns import matplo…

新型高性能数据记录仪ETHOS 2

| 具有强大CPU性能的数据记录仪 IPETRONIK推出了一款新型高性能数据记录仪——ETHOS 2,作为ETHOS的第二代,它借助新型英特尔i7-9850HE处理器,实现了11,572的性能指数,从而能够快速有效应对CAN FD、LIN和以太网总线测量方面的日益…

linux线程,线程控制与线程相关概念

线程概念 线程这个词或多或少大家都听过,今天我们正式的来谈一下线程; 在我一开始的概念中线程就是进程的一部分,一个进程中有很多个线程,这个想法基本是正确的,但细节部分呢我们需要细细讲解一下; 什么…

OKR 实践:来自一位信息技术部主管的成功秘诀

OKR 实践:来自一位信息技术部主管的成功秘诀 为什么选择OKR 公司信息技术部为38个各地分公司、12,000名员工的IT需求提供服务。庞大而多样的客户群常常使我们的团队分散,许多团队都在各自为政,以个案为基础解决问题,而不是采用企业…

CSS文本粒子动画特效之爱心粒子文字特效-Canvas

1. 效果图 2.完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;paddin…

Sqoop的安装与测试

这里写目录标题 什么是Sqoop?Sqoop的安装与配置安装测试 什么是Sqoop? Sqoop就是hadoop和mysql的一个中间介质 , 作用就是可以将hadoop中的数据传到mysql中 , 或将mysql中的数据导入到hadoop中 Sqoop的安装与配置 安装 详细代码 //解压安装 [roothadoop soft]# tar -zxv…

国产数据库替代加速 助力数字中国建设

5月24日&#xff0c;随着第七届数字中国建设峰会在福州的成功举办&#xff0c;释放数据要素价值、发展新质生产力成为当下热议的话题。 数据作为新型生产要素&#xff0c;是数字化、网络化、智能化的重要基础。北京人大金仓信息技术股份有限公司&#xff08;以下简称人大金仓&a…

AI智能体研发之路-模型篇(三):中文大模型开、闭源之争

博客导读&#xff1a; 《AI—工程篇》 AI智能体研发之路-工程篇&#xff08;一&#xff09;&#xff1a;Docker助力AI智能体开发提效 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify智能体开发平台一键部署 AI智能体研发之路-工程篇&#xff08;三&am…

10.RedHat认证-Linux文件系统(上)

10.RedHat认证-Linux文件系统(上) ⽂件系统&#xff0c;顾名思义&#xff0c;是⼀个组织⽂件的“系统(system)”。file system ⽂件系统是⽤来组织⽂件的&#xff0c;通俗⼀点理解的话&#xff0c;⽂件系统是⽤来存储⽂件的。 硬盘是不能直接存放⽂件或数据。 我们通过将硬…

【ARM+Codesys案例】T3/RK3568/树莓派+Codesys绕线机控制方案—运动控制器,支持定制

绕线机控制方案 SC 系列运动控制器 绕线机就是把线状的物体缠绕到特定的工件上的机器。凡是电器产品大多需要用漆包铜线(简称漆包线)绕制成电感线圈。绕线机从线圈设计、参数分析、数控编程、到自动补偿技术的实现、整个绕线工艺过程自适应诊断及控制、排线部分运动自适应干涉…

鸿蒙OS开发:【一次开发,多端部署】(一多天气)项目

一多天气 介绍 本示例展示一个天气应用界面&#xff0c;包括首页、城市管理、添加城市、更新时间弹窗&#xff0c;体现一次开发&#xff0c;多端部署的能力。 1.本示例参考一次开发&#xff0c;多端部署的指导&#xff0c;主要使用响应式布局的栅格断点系统实现在不同尺寸窗…

IMU应用于评估脊髓损伤患者的膝关节痉挛

近日&#xff0c;美国西北大学团队利用便携式IMU系统精确量化脊髓损伤&#xff08;SCI&#xff09;患者膝关节伸肌痉挛的程度&#xff0c;不仅验证了IMU系统的可靠性与准确性&#xff0c;还强调了其在动态评估痉挛变化方面的独特贡献。 研究团队创新性地将IMU技术引入到经典的…

web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite

MENU 静态资源与打包规则动态访问静态资源直接导入将静态资存放在public目录中动态导入URL构造函数结束语实践与坑附文 静态资源与打包规则 介绍 Vite脚手架在打包代码的时候&#xff0c;会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指…

neo4j详细安装教程

前言 最近开始学习知识图谱&#xff0c;现整理Neo4j的详细安装教程&#xff0c;Neo4j是一个高性能的,NOSQL图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。由于知识图谱中存在大量的关系型信息&#xff08;实体—关系—实体&#xff09;, 使用结构化数据库进行存…

推送镜像到私有harbor仓库

本地已制作镜像&#xff1a;tomcat-8.5.100-centos7.9:1.0。 本地已经搭建私有仓库&#xff1a;harbor.igmwx.com。 现在需要把镜像 tomcat-8.5.100-centos7.9:1.0 推送到harbor。 &#xff08;1&#xff09;查看本地镜像&#xff1a;sudo docker images zhangzkzhangzk:~/d…

服务器数据恢复—RAID5阵列崩溃如何恢复上层OA和oracle数据库的数据?

服务器数据恢复环境&故障&#xff1a; 某公司的一台服务器中的raid5磁盘阵列有两块磁盘先后掉线&#xff0c;服务器崩溃。故障服务器的操作系统为linux&#xff0c;操作系统部署了oa&#xff0c;数据库为oracle。oracle数据库已经不再对该oa系统提供后续支持&#xff0c;用…

企业如何实现数据采集分析展示一体化

在当今数字化时代&#xff0c;企业越来越依赖于数据的力量来驱动决策和创新。通过全量实时采集各类数据&#xff0c;并利用智能化工具进行信息处理&#xff0c;企业能够借助大数据分析平台深入挖掘数据背后的价值&#xff0c;从而为企业发展注入新动力。 一、企业痛点 随着数字…

卢文岩博士受邀参与中国科学院大学校友论坛 解码DPU核心价值

近日&#xff0c;第五届中国科学院大学校友创新论坛正式举行&#xff0c;本次论坛聚焦科技前沿领域&#xff0c;旨在搭建高端对话平台&#xff0c;促进产学研深度融合。在大算力时代——AI技术前沿沙龙上&#xff0c;中科驭数高级副总裁、CTO卢文岩博士受邀分享《DPU——连接算…

【IC】partial good

假设单core良率80%&#xff0c;core pass 数量分布呈二项分布。 16个core全pass的概率为&#xff1a; 有n个core pass的概率为&#xff1a; 分布如下&#xff1a; 当np>5且nq>5时&#xff0c;二项分布近似服从正态分布