微服务Spring Cloud架构详解

[复制链接]
发表于 2026-2-27 13:26:49 | 显示全部楼层 |阅读模式
本文摘自《AI赋能企业数字化转型》京东地点;https://item.jd.com/10118346821885.html
"Spring Cloud为开发职员提供了快速构建分布式体系中一些常见模式的工具(比方设置管理,服务发现,断路器,智能路由,微署理,控制总线)。分布式体系的调和导致了样板模式, 使用Spring Cloud开发职员可以快速地支持实现这些模式的服务和应用步调。他们将在任何分布式环境中运行精良,包罗开发职员本身的条记本电脑,裸机数据中央,以及Cloud Foundry等托管平台。"
Dubbo、Spring Cloud、Spring Cloud和Spring Cloud Alibaba都是用于构建分布式体系的开源框架。对好比下:
Dubbo是一个高性能的分布式服务框架,由阿里巴巴开发。它基于传统的服务管理理念,提供了服务注册、发现、路由、负载均衡、容错等功能。Dubbo的焦点特点是高性能和低延伸的RPC调用,实用于大规模的微服务架构。Dubbo提供了对多种协议(如Dubbo协议、REST

协议)和注册中央(如ZooKeeper、Consul)的支持。
Spring Cloud是一个由Pivotal开发的微服务框架,构建在Spring Framework之上,使得构建分布式体系更加便捷。它提供了一系列的组件和模块,用于实现服务注册与发现、负载均衡、断路器、设置管理、消息总线等功能。Spring Cloud采取了Spring Boot作为底层的开发框架,提供了更轻便、快速搭建分布式体系的办理方案。
Spring Cloud Alibaba是Spring Cloud与Alibaba开放平台相助的结果,提供了一些在云原生应用开发中常用的办理方案。它重要基于Spring Cloud框架,团结了一些Alibaba技能栈,如Nacos(服务注册与发现)、Sentinel(流量控制和熔断降级)、RocketMQ(消息驱动)等。Spring Cloud Alibaba旨在提供云原生应用开发的全栈办理方案。

com.ruoyi     

├── ruoyi-ui              // 前端框架 [80]

├── ruoyi-gateway         // 网关模块 [8080]

├── ruoyi-auth            // 认证中央 [9200]

├── ruoyi-api             // 接口模块

│       └── ruoyi-api-system                // 体系接口

├── ruoyi-common          // 通用模块

│       └── ruoyi-common-core               // 焦点模块

│       └── ruoyi-common-datascope          // 权限范围

│       └── ruoyi-common-datasource         // 多数据源

│       └── ruoyi-common-log                 // 日志日志记载

│       └── ruoyi-common-redis               // 缓存服务

│       └── ruoyi-common-security            // 安全模块

│       └── ruoyi-common-swagger             // 体系接口

├── ruoyi-modules         // 业务模块

│       └── ruoyi-system                      // 体系模块 [9201]

│       └── ruoyi-gen                         // 代码天生 [9202]

│       └── ruoyi-job                         // 定时任务 [9203]

│       └── ruoyi-file                        // 文件服务 [9300]

├── ruoyi-visual          // 图形化管理模块

│       └── ruoyi-visual-monitor             // 监控监控中央 [9100]

├──pom.xml                // 公共依靠

├── build                      // 构建干系  

├── bin                        // 实行脚本

├── public                     // 公共文件

│   ├── favicon.ico           // favicon图标

│   └── index.html            // html模板

├── src                        // 源代码

│   ├── api                    // 全部哀求

│   ├── assets                 // 主题字体等静态资源

│   ├── components             // 全局公用组件

│   ├── directive              // 全局指令

│   ├── layout                 // 结构

│   ├── router                 // 路由

│   ├── store                  // 全局 store管理

│   ├── utils                  // 全局公用方法

│   ├── views                  // view

│   ├── App.vue                // 入口页面

│   ├── main.js                // 入口 加载组件 初始化等

│   ├── permission.js          // 权限管理

│   └── settings.js            // 体系设置

├── .editorconfig              // 编码格式

├── .env.development           // 开发环境设置

├── .env.production            // 生产环境设置

├── .env.staging               // 测试环境设置

├── .eslintignore              // 忽略语法查抄

├── .eslintrc.js               // eslint 设置项

├── .gitignore                 // git 忽略项

├── babel.config.js            // babel.config.js

├── package.json               // package.json

└── vue.config.js              // vue.config.js

  • 业务场景案例:
实现付出订单功能的业务流程:
1.创建一个订单后,如果用户立即付出了这个订单,我们须要将这个订单状态更新为【已经付出】
2.扣减相对应的商品库
3.关照仓储中央,举行发货
4.给用户这次购物怎加相对应的积分

  • 组件协同

  • 订单服务要调用库存服务,仓储服务,或积分服务,怎么查询服务地点?

  • springCloud的Eureka,Eureka是服务架构的注册中央,专门负责服务的注册和发现;
  • 库存服务,仓储服务,积分服务,都有一个Eureka Client组件组件,这个专门这个服务的信息注册到Eureka Server中,说白了就是告诉Eureka Server,本身在哪台呆板上,监听谁人端口,而Eureka 是一个注册中央,内里有一个注册表,生存了各个服务器的呆板和端口
  • 订单服务内里有一个Eureka Client组件组件,Eureka Client组件会问一下:库存在那台服务器上,监听的端标语是哪个,仓储服务呢?积分服务呢?然后就可以把这些干系信息从Eureka Server的注册表中拉取到本身当地缓存起来。
  • 如果订单服务想要调用库存服务,就可以找本身当地Eureka Client下的库存服务在那台呆板上,监听对应端口,收到相应后,紧接着就可以发送一个哀求已往,调用库存服务扣减库存的对应接口。

  • 订单服务查询地点后,怎样调用库存等服务?

  • 不须要调用端写HttpClient的硬编程,没有底层的创建毗连、构造哀求、分析相应的代码,直接就是用注解界说一个 FeignClient接口,然后调用谁人接口就可以了。Feign Client会在底层根据注解,指定的服务创建毗连、构造哀求、发起靕求、获取相应、分析相应,等等。
  • Feign的一个机制就是使用了动态署理,起首,如果你对某个接口界说了@FeignClient注解,Feign就会针对这个接口创建一个动态署理,如果调用谁人接口,本质就是会调用 Feign创建的动态署理, Feign的动态代分析根据你在接口上的@RequestMapping等注解,来动态构造出你要哀求的服务的地点。末了,针对这个地点,发起哀求、分析相应。

  • 怎样调用库存服务的详细哪个呆板(库存集群服务)?

  • 库存服务上面摆设了多台呆板,那Feign怎么知道哀求那台服务器呢? Ribbon服务就是办理这个题目的,作用是负载均衡,帮在每一次哀求的时间选择一台呆板,匀称的把哀求发送到各个呆板上 ,Ribbon的负载均衡默认的使用Round Robin轮询算法,什么是轮询算法? 如果订单服务对库存发起十次哀求,那就先让你哀求第一台呆板,然后是第二台呆板,第三台呆板,接着循环到第十台呆板。
  • Ribbon是和Feign以及Eureka精密协作,完成工作的,详细如下:
起首Ribbon会从 Eureka Client内里获取到对应的服务注册表,也就知道了全部的服务都摆设在了那台呆板上,在监听哪些端口,然后Ribbon就可以使用默认的Round Robin算法,从中选择一台呆板, Feigin就会针对这些呆板构造并发送哀求。

  • 高并发环境下,一个服务挂起,导致调用它的服务全部挂掉,造成雪崩效应怎么办?

  • 如果体系在高并发的环境下,大量哀求涌过来的时间,订单服务的100个线程会卡在积分服务这块,导致订单服务没有一个线程可以处置惩罚哀求,然后会导致别的哀求订单服务的时间,发现订单服务挂掉,不相应任何哀求了,这种题目就是微服务架构中棘手的服务器雪崩题目。多个服务相互调用,如果不做任何掩护的话,某一个服务挂掉会引起连锁反应,导致别的服务挂掉,好比:积分服务挂了,会导致订单服务的线程全部卡在哀求,瞬间导致订单服务也挂了,其他哀求订单服务全部会卡住,无法相应。
  • 假设订单服务调用库存服务、仓储服务的这两个线程池都是正常工作的,以是这两个服务不会受到任何影响。这个时间如果别人哀求订单服务,订单服务照旧可以正常调用订举行库存服务扣减,并调用仓储服务关照发货。积分服务挂了,以是我们直接对积分服务熔断,好比在5分钟内哀求积分服务直接就返回了,不要去走网络哀求卡住几秒钟,这个过程,就是熔断!
  • 熔断Hystix是Netflflix开源的一个延伸和容错库,用于隔离访问长途服务,防止出现级联失败。服务器支持的线程和并发数有限,哀求不停壅闭,会导致服务器资源耗尽,从而导致全部别的服务都不可用,形成雪崩效应。Hystrix为每个依靠服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采取列队,加速失败判断时间。用户的哀求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,大概哀求超时,则会举行降级处置惩罚。
  • 每次调用积分服务,你就在数据库里记载一条消息,某用户增长了多少积分,由于积分服务挂了,导致没增长乐成!如许等积分服务规复了,你可以根据这些记载手工加一下积分。这个过程,就是降级。

  • 网络中几百个服务,怎样调用精确的服务?

  • 一样平常微服务架构中都肯定会筹划一个网关在内里,像android、ios、pc前端、微信小步调、H5等等,不消去关心后端有几百个服务,就知道有一个网关,全部哀求都往网关走,网关会根据哀求中的一些特性,将哀求转发给后端的各个服务。
  • 网关做同一的降级、限流、认证授权、安全,等等。

  • 网络中几百个服务,怎样同一设置并查询?

  • Config作用是提供的一个分布式设置管理工具,它的作用是会合管理微服务体系的设置文件,为微服务体系提供外部化的设置支持。重要功能:
  • 会合管理设置文件:Spring Cloud Config 可以将各个微服务体系的设置文件会合管理,实现设置文件的同一管理,便于维护和更新。
  • 设置文件的版本控制:Spring Cloud Config 支持 Git、SVN、当地文件体系等多种设置存储方式,可以轻松实现设置文件的版本控制。
  • 动态革新设置:Spring Cloud Config 支持动态革新设置,即在不重启应用的环境下,及时更新设置文件,包管设置文件的及时性和划一性。

  • 安全性管理:Spring Cloud Config 提供了多种安全认证方式,如基于用户名和暗码的认证、基于公钥和密钥的认证等,包管设置文件的安全性。
  • 高可用性和可扩展性:Spring Cloud Config 支持多节点摆设,通过服务注册和发现机制实现负载均衡和故障转移,包管了设置中央的高可用性和可扩展性。

总结, SpringCloud是一个基于SpringBoot实现的微服务架构开发工具。它为微服务架构中涉及的设置管理、服务管理、断路器、智能路由、微署理、控制总线、全局锁、决议竞选、分布式会话和集群状态管理等利用提供了一种简朴的开发方式。


  • 什么是服务管理?
Spring Cloud 封装了Netflix公司开发的Eureka模块来实现服务管理 在传统的rpc长途调用框架中,管理每个服务与服务之间依靠关系比力复杂,管理比力复杂,以是须要使用服务管理,管理服务于服务之间依靠关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

  • 什么是服务注册与发现
服务注册就是将服务信息注册到注册中央,然后由注册中央来监控监控体系中微服务的状态。服务发现就是从注册中央上获取服务的信息。通常在管理分布式环境下的各个Spring Boot微服务时,肯定存在服务的注册题目。既然是注册,肯定有个管理注册中央的服务器,各个在Spring Cloud管理下的Spring Boot应用就是须要注册的client。
Spring Cloud使用erureka server, 全部须要访问设置文件的应用都作为一个erureka client注册上去。eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后须要向注册中央发送心跳,在默认环境下erureka server也是一个eureka client ,必须要指定一个 server。Eureka采取了CS的筹划架构,Eureka Server作为服务注册功能的服务器,它是服务注册中央。而体系中的其他微服务,使用Eureka的客户端毗连到 Eureka Sever并维持心跳毗连。维护职员就可以通过Eureka Server来监控监控体系中各个微服务是否正常运行。在服务注册与发现中,有一个注册中央。当服务器启动的时间,会把当前本身服务器的信息好比服务地点通讯地点等以剧名方式注册到注册中央上。另一方(消耗者服务提供者),以该别名的方式去注册中央上获取到实际的服务通讯地点,然后再实现当地RPC调用。RPC长途调用框架焦点筹划头脑:在于注册中央,由于使用注册中央管理每个服务与服务之间的一个依靠关系(服务管理概念)。在任何rpc长途框架中,都会有一个注册中央(存放服务地点干系信息(接口地点)。
现在由于Eureka已制止维护,Nacos成为了更为活泼和保举的选择。Nacos不但提供了服务注册与发现的功能,还提供了更多的服务管理和设置管理本事,是一个功能更为丰富和全面的服务管理平台。Nacos是阿里开源的,Nacos支持基于DNS和基于RPC的服务发现。在Spring Cloud中使用Nacos,只须要先下载Nacos并启动Nacos server,Nacos只须要简朴的设置就可以完成服务的注册发现。Nacos动态设置服务可以以中央化、外部化和动态化的方式管理全部环境的应用设置和服务设置。动态设置消除了设置变动时重新摆设应用和服务的须要,让设置管理变得更加高效和灵敏。设置中央化管理让实现无状态服务变得更简朴,让服务按需弹性扩展变得更容易。
总之,Nacos相当于实现了 Spring Cloud注册中央 和 Spring Cloud设置中央。


  • Hystrix 是什么?
在分布式体系中,每个服务都大概会调用很多其他服务,被调用的那些服务就是依靠服务,有的时间某些依靠服务出现故障也是很正常的。
Hystrix 可以让我们在分布式体系中对服务间的调用举行控制,加入一些调用延伸大概依靠故障的容错机制。
Hystrix 通过将依靠服务举行资源隔离,进而制止某个依靠服务出现故障时在整个体系全部的依靠服务调用中举行伸张;同时 Hystrix 还提供故障时的 fallback 降级机制。
总而言之,Hystrix 通过这些方法资助我们提升分布式体系的可用性和稳固性。

  • Ribbon是什么?
负载均衡在体系架构中是一个非常告急的内容,由于负载均衡是对体系的高可用、网络的压力的缓冲和处置惩罚本事扩容的告急本事之一,我们通常说的负载均衡都是指的是服务端的负载均衡,此中分为硬件负载均衡和软件负载均衡。Ribbon是一个基于HTTP和TCP的客户端负载均衡器,当使用Ribbon对服务举行访问的时间,他会扩展Eureka客户端的服务发现功能,实现从Eureka注册中央获取服务端列表,并通过Eureka客户端来确定服务端是否已经启动。Ribbon在Eureka客户端服务发现的底子上,实现对服务实例的选择战略,从而实现对服务的负载均衡消耗。

  • 硬件负载均衡:重要通过服务器节点之间安装专门用于负载均衡的装备,好比F5,深敬佩,Array等。硬件负载均衡的装备或是软件负载均衡的软件模块都会维护一个可用的服务端清单,通过心跳检测来剔除故障的服务端节点包管清单中都是可以正常访问的服务端节点。当客户端发送哀求到负载均衡的装备时间,该装备按某种算法(好比线性轮询、按权重负载、按流量负载等)从维护的可用服务端清单中取出一台服务端地点,然后举行转发。


  • 软件负载均衡:则是通过服务器上安装一些具有负载功能或模块的软件来完成哀求分发工作,好比Nginx、LVS、HAProxy等。Ribbon是Netflix发布的开源项目,重要功能是提供客户端的软件负载均衡算法,是一个基于HTTP和TCP的客户端负载均衡工具。SpringCloud对Ribbon做了二次封装,可以让我们使用 RestTemplate的服务哀求,主动转换成客户端负载均衡的服务调用。Ribbon支持多种负载均衡算法,还支持自界说的负载均衡算法。Ribbon只是一个工具类框架,比力小巧, SpringCloud对它封装后使用也非常方便,它不像服务注册中央、设置中央、API网关那样须要独立摆设, Ribbon 只须要在代码直接使用即可。
  • Ribbon与 Nginx的区别:


  • 都是软负载
  • Ribbon是客户端负载均衡
  • Nginx是服务器段负载均衡
  • 服务端的负载均衡是提前设置好的:Nginx
  • 客户端的负载均衡是从注册中央找的:Ribbon

  • 网关是什么?
分布式架构中,服务节点数目较多,而对于客户端而言,多个服务节点袒暴露来的API应该是同一的,否则每个节点地点差别,客户端就须要维护全部服务节点地点然后再选择一个访问,很显着客户端的维护资本就很高。
此时就须要有一个袒露同一API的网关服务将多服务节点封装,客户端访问网关,网关再将客户端的哀求分发给被封装的服务节点,如许就克制了客户端和服务端的直接交互。
别的网关除了可以实现动态路由功能外,还可以实现参数校验、鉴权、日志日志、缓存、负载均衡、监控、限流等多种功能。总之对于非业务需求的同一功能都可以交给网关来实现,筹划头脑有点雷同于Spring的面向切面编程。

  • Zuul是什么
Zuul是Netfilx开源的微服务体系的网关组件。
Zuul的作用如下几个方面:


    • 共同Ribbon、Eureka可以实现智能动态路由和负载均衡功能,将哀求按战略分发到集群中符合的服务实例;
    • 将服务和客户端之间举行解耦,客户端访问的是网关袒暴露来的同一API,客户端不须要关系服务的运行环境;
    • 同一鉴权,监控,日志日志,缓存,限流,参数校验等功能;
    • 通过流量监控,可以根据流量举行服务降级;

  • Feign是什么?
Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign而且集成了Ribbon实现客户端负载均衡调用。
Feign工作原理如下:
1、 启动类添加 @EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并天生此接口的署理对象
2、 @FeignClient(value = "XC_SERVICE_MANAGE_CMS")即指定了cms的服务名称,Feign会从注册中央获取cms服务列表,并通过负载均衡算法举行服务调用。
3、在接口方法 中使用注解@GetMapping("/cms/page/get/{id}"),指定调用的url,Feign将根据url举行长途调用。
 主步调入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处置惩罚。根据Feign Client的开发规范,界说接口并加@FeignClient注解。
当步调启动时,举行包扫描,扫描全部@FeignClients的注解的类,而且讲这些信息注入Spring IOC容器中,当界说的的Feign接口中的方法呗调用时,通过JDK的署理方式,来天生详细的RequestTemplate.当天生署理时,Feign会为每个接口方法创建一个RequestTemplate。当天生署理时,Feign会为每个接口方法创建一个RequestTemplate对象,改对象封装可HTTP哀求须要的全部信息,如哀求参数名,哀求方法等信息都是在这个过程中确定的。
然后RequestTemplate天生Request,然后把Request交给Client行止理,这里指的时Client可以时JDK原生的URLConnection,Apache的HttpClient,也可以时OKhttp,末了Client被封装到LoadBalanceClient类,这个类团结Ribbon负载均衡发器服务之间的调用。



  • Spring Cloud Config:设置管理工具,支持使用Git存储设置内容,可以使用它实现应用设置的外部化存储,并支持客户段设置信息革新、加密/解密设置内容等。
  • Spring Cloud Netflix:焦点组件,对多个Netflix OSS开源套件举行整合。Spring Cloud集成了很多Netflix(美国奈飞公司)开发的精良组件,这些组件提供了服务注册与发现、设置中央、负载均衡、断路器、智能路由等功能。Eureka:服务管理组件,包罗服务注册中央、服务注册与发现机制的实现。

  • Hystrix:容错管理组件,实现断路器模式,资助服务依靠中出现的延伸和为故障提供强盛的容错本事。
  • Ribbon:客户端负载均衡的服务调用组件。
  • Feign:基于Ribbon和Hystrix的声明式服务调用组件。
  • Zuul:网关组键,提供智能路由、访问过滤等功能。
  • Archaius:外部化设置组件。

  • SpringCloud Bus: 变乱、消息总线,用于传播集群中的状态厘革或变乱,以触发后续的处置惩罚,好比用来动态革新设置等。
  • Spring Cloud Cluster:针对Zookeeper、Redis、Hazelcase、Consul的推举算法和通用状态模式的实现。
  • Spring Cloud Cloudfoundry:与Pivotal Cloudfoundry的整合支持。
  • Spring Cloud Consul:服务发现与设置管理工具。
  • Spring Cloud Stream:通过Redis、Rabbit大概Kafka实现消耗微服务,可以通过简朴的声明式模子来发送和担当消息。
  • Spring Cloud AWS:用来简化整合Amazon Web Service 的组件。
  • Spring Cloud Security: 安全工具包,提供在Zuul署理中对 OAuth2客户端哀求的中继器。
  • Spring Cloud Sleuth:Spring Cloud 应用的分布式跟踪实现,可以完满整合Zipkin。
  • Spring Cloud ZooKeeper:基于Zookeeper的服务发现与设置管理组件。
  • Spring Cloud Starters: Spring Cloud的底子组件,它是基于Spring Boot风格项目的底子依靠模块。
  • Spring Cloud CLI:用于在Groovy中快速创建Spring Cloud应用的Spring Boot CLI插件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表