Spring Cloud五大组件

Spring Cloud五大组件
Spring Cloud是分布式微服务架构的一站式解决方案,在Spring Boot基础上能够轻松搭建微服务系统的架构。

现有Spring Cloud有两代实现:

一代:Spring Cloud Netflix,主要由:Eureka、Ribbon、Feign、Hystrix、Zuul|Gateway、Config等组件组成。
二代:Spring Cloud Alibaba,主要由:Nacos、Sentinel、Seata等组件组成。
一、服务治理组件
一代的服务治理组件为:Spring Cloud Netflix Eureka,主要负责Spring Cloud的服务发现与服务注册。

二代的服务治理组件为:Spring Cloud Alibaba Nacos,可以将Nacos理解为服务注册中心和配置中心的结合体;可以替换一代组件中的:Eureka、Config。

1.1 Eureka
Eureka采用C/S架构,包含两大组件:

Eureka Server:服务注册中心,其他微服务启动时,服务注册到Eureka Server。Eureka Server维护了可用服务列表,存储所有注册到Eureka Server的服务的信息。

自己搭建的Eureka Server服务端:https://gitee.com/Xiaoxinnolabi/my-eureka-server

Eureka Client:客户端,也就是微服务集群中的各个微服务。微服务启动后,Eureka Client会向Eureka Server发送心跳(默认周期30S)。Eureka Server在多个心跳周期内(默认90S)没有接收到某个Eureka Client的心跳,则将该Eureka Client从可用服务列表移除。

Eureka实现服务注册与发现的原理:

服务注册中心(Register Service):Eureka Server,提供服务注册和服务发现功能
服务提供者(Provider Service):Eureka Client,服务的提供者,以供应服务给消费者所发现。
服务消费者(Consumer Service):Eureka Client,服务的消费者,从服务注册中心获取服务列表,调用所需服务。
调用所需服务:通过HTTP或者消息中间件远程调用服务提供者提供的服务。

1.2 Nacos
Nacos 英文全称为 Dynamic Naming and Configuration Service,是一个由阿里巴巴团队使用 Java 语言开发的开源项目。

Nacos采用C/S架构,包含两大组件:

Nacos Server:可以作为服务注册中心、配置中心,帮助Nacos Client实现服务的发现、注册,配置的动态刷新。
Nacos Client:通过spring-cloud-starter-alibaba-nacos-discovery,在Nacos Server中实现服务的注册和发现;通过spring-cloud-starter-alibaba-nacos-config,在Nacos Server中实现配置的动态刷新。
Nacos实现服务注册与发现的流程:

Nacos Server启动
服务提供者Nacos Client启动,把spring.appliction.name服务名注册到Nacos Server
服务消费者Nacos Client启动,把spring.appliction.name服务名注册到Nacos Server,从Nacos Server获取一份服务注册信息(包含所有注册到Nacos Server中的服务的信息)。
服务消费者进行服务消费时,通过HTTP或RPC调用所需服务。
Nacos特性:

服务发现

支持基于DNS和RPC的服务发现。当服务提供者使用原生SDK、OpenAPI或一个独立的Agent TODO向Nacos注册服务后,服务消费者可以通过HTTP、DNS TODO、API查找、发现服务。

服务健康监测

提供对服务的实施健康检查,能够阻止请求发送到不健康主机或服务实例上。提供了健康检查仪表盘,能够根据健康状态管理服务的可用性流量

动态配置服务

动态配置服务可以让我们以中心化、外部化和动态化的方式,管理所有环境的应用配置和服务配置。

Nacos 提供了一个简洁易用的 UI 帮助我们管理所有服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助我们更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

动态DNS服务

Nacos 提供了动态 DNS 服务,能够让我们更容易地实现负载均衡、流量控制以及数据中心内网的简单 DNS 解析服务。

Nacos 提供了一些简单的 DNS APIs TODO,可以帮助我们管理服务的关联域名和可用的 IP:PORT 列表。

服务及其元数据管理

Nacos 能让我们从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及 metrics 统计数据。

二、负载均衡组件
一代的负载均衡组件为:Spring Cloud Ribbon,主要负责Spring Cloud的客户端负载均衡和服务调用工具。

二代的负载均衡组件为:Spring Cloud Ribbon或Spring Cloud LoadBalancer;由于Spring Cloud Ribbon已停止更新,进入维护阶段,因此LoadBalancer是Ribbon新版的解决方案;基于现有市场大部分依旧使用Spring Cloud Ribbon,仅对Spring Cloud Ribbon做介绍。

2.1 Spring Cloud Ribbon
Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。

Ribbon 是 Spring Cloud 体系中最核心、最重要的组件之一。它虽然只是一个工具类型的框架,并不像 Eureka Server(服务注册中心)那样需要独立部署,但它几乎存在于每一个使用 Spring Cloud 构建的微服务中。

负载均衡

将用户请求平摊到多个服务器上,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。

常见负载均衡方式:

服务端负载均衡

如常规前后端交互中间件Nginx,在客户端和服务端直接建立一个独立的负载均衡器,负载均衡器记录可用服务器列表,通过心跳机制删除故障节点。

请求从客户端发送时,通过中间件Nginx,按照特定算法(轮询、随机),从可用服务器选择服务端进行转发。

客户端负载均衡

客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上,即负载均衡器位于客户端。客户端通过服务注册中心(例如 Eureka Server)获取到一份服务端提供的可用服务清单。有了服务清单后,负载均衡器会在客户端发送请求前通过负载均衡算法选择一个服务端实例再进行访问,以达到负载均衡的目的;客户端负载均衡也需要心跳机制去维护服务端清单的有效性,这个过程需要配合服务注册中心一起完成。

Ribbon 就是一个基于 HTTP 和 TCP 的客户端负载均衡器,当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。

三、熔断器组件
微服务系统架构中,一个请求往往需要多个服务配合处理完成;当一个服务出现故障时,沿着调用链路导致微服务故障在系统中蔓延,最终导致整个系统的瘫痪,这就是“雪崩效应”。为了能够及时对服务故障进行熔断处理,微服务架构引入了熔断器组件,确保整个系统的服务容错、加强保护机制。

3.1 Spring Cloud Hystrix
Spring Cloud Hystrix 是一款优秀的服务容错与保护组件,也是 Spring Cloud 中最重要的组件之一。

Spring Cloud Hystrix 能够有效地阻止分布式微服务系统中出现联动故障,以提高微服务系统的弹性。Spring Cloud Hystrix 具有服务降级、服务熔断、线程隔离、请求缓存、请求合并以及实时故障监控等强大功能。

四、服务网关组件
在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,就需要知道它们具体的地址信息,例如 IP 地址、端口号等。

可以通过服务网关,请求直接到服务网关,再由服务网关根据不同的标识信息将请求转发到微服务实例。

可以在服务网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。

常见服务网关实现方案:

Spring Cloud Gateway
Spring Cloud Netflix Zuul
Nginx + Lua
4.1 Spring Cloud Gateway
Spring Cloud GateWay 最主要的功能就是路由转发,而在定义转发规则时主要涉及了以下三个核心概念,如下表。

核心概念    描述
Route(路由)    网关最基本的模块。它由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成。
Predicate(断言)    路由转发的判断条件,我们可以通过 Predicate 对 HTTP 请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。
Filter(过滤器)    过滤器,我们可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。
Spring Cloud Gateway 工作流程说明如下:

客户端将请求发送到 Spring Cloud Gateway 上。
Spring Cloud Gateway 通过 Gateway Handler Mapping 找到与请求相匹配的路由,将其发送给 Gateway Web Handler。
Gateway Web Handler 通过指定的过滤器链(Filter Chain),将请求转发到实际的服务节点中,执行业务逻辑返回响应结果。
过滤器之间用虚线分开是因为过滤器可能会在转发请求之前(pre)或之后(post)执行业务逻辑。
过滤器(Filter)可以在请求被转发到服务端前,对请求进行拦截和修改,例如参数校验、权限校验、流量监控、日志输出以及协议转换等。
过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。
响应原路返回给客户端。
总而言之,客户端发送到 Spring Cloud Gateway 的请求需要通过一定的匹配条件,才能定位到真正的服务节点。在将请求转发到服务进行处理的过程前后(pre 和 post),我们还可以对请求和响应进行一些精细化控制。

Predicate 就是路由的匹配条件,而 Filter 就是对请求和响应进行精细化控制的工具。有了这两个元素,再加上目标 URI,就可以实现一个具体的路由了。

五、分布式配置组件
5.1 Spring Cloud Config
在分布式微服务系统中,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务自行管理,以 properties 或 yml 格式保存在各个微服务的类路径下,例如 application.properties 或 application.yml 等。

为了解决这些问题,通常我们都会使用配置中心对配置进行统一管理。市面上开源的配置中心有很多,例如百度的 Disconf、淘宝的 diamond、360 的 QConf、携程的 Apollo 等都是解决这类问题的。Spring Cloud 也有自己的分布式配置中心,那就是 Spring Cloud Config。

Spring Cloud Config 是由 Spring Cloud 团队开发的项目,它可以为微服务架构中各个微服务提供集中化的外部配置支持。

Spring Cloud Config 包含以下两个部分:

Config Server:也被称为分布式配置中心,它是一个独立运行的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密信息和解密信息的访问接口。
Config Client:指的是微服务架构中的各个微服务,它们通过 Config Server 对配置进行管理,并从 Config Sever 中获取和加载配置信息。
Spring Cloud Config 工作流程如下:

开发或运维人员提交配置文件到远程的 Git 仓库。
Config 服务端(分布式配置中心)负责连接配置仓库 Git,并对 Config 客户端暴露获取配置的接口。
Config 客户端通过 Config 服务端暴露出来的接口,拉取配置仓库中的配置。
Config 客户端获取到配置信息,以支持服务的运行。

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

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

相关文章

【c语言】 逻辑运算符运算规则

1.&&逻辑运算符的坑 int x0,y0,z0; z (x1) && (y2); printf("%d",y);//y0;今天遇到了同学问的问题,为什么y输出为0. 我第一时间也记不得,工作中一般不会写这种代码,但是却不能…

Vue3 状态管理 - Pinia

1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 ,是 Vuex 状态管理工具的替代品 提供更加简单的APl(去掉了mutation,Pinia 中对state数据的修改可以直接通过action,Vuex中则是通过mutation)提供符合组合式风格的API&#…

笔记转移:https://www.yuque.com/u32968635/lbk

语雀:https://www.yuque.com/u32968635/lbk

视频剪辑技巧:如何高效批量转码MP4视频为MOV格式

在视频剪辑的过程中,经常会遇到将MP4视频转码为MOV格式的情况。这不仅可以更好地编辑视频,还可以提升视频的播放质量和兼容性。对于大量视频文件的转码操作,如何高效地完成批量转码呢?现在一起来看看云炫AI智剪如何智能转码&#…

Servlte+JSP企业内容管理系统

企业内容管理系统的设计与实现 1.系统概述: 随着企事业单位信息化的建设,内联网和外联网之间的信息交互越来越多,优秀的内容管理系统对企业内部来说,能够很好地做到信息的收集和重复利用及信息的增值利用。对于外联网来说,内容管理系统可使…

6 Go的切片

概述 在上一节的内容中,我们介绍了Go的数组,包括:声明数组、初始化数组、访问数组元素等。在本节中,我们将介绍Go的切片。在Go语言中,数组的长度是固定的,不能改变,这在某些场景下使用不太方便。…

【C++】一文简练总结【多态】及其底层原理&具体应用(21)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.多态的概念二.多态的实现1&#xff…

【C++】:拷贝构造函数与赋值运算符重载的实例应用之日期类的实现

C实现日期类 ├─属性: │ ├─年份 │ ├─月份 │ └─日期 ├─方法: │ ├─构造函数 │ ├─拷贝构造函数 │ ├─析构函数 │ ├─设置年份 │ ├─设置月份 │ ├─设置日期 │ ├─获取年份 │ ├─获取月份 │ ├─获取日期 │ ├…

websocket和mqtt

WebSocket是一种通信协议,它允许在浏览器和服务器之间建立持久连接,并允许双向传递数据。MQTT则是一种轻量级的发布/订阅消息传输协议,常用于物联网(IoT)设备之间的通信。 (1)js能直接实现mqtt吗,还是需…

已解决java.lang.IllegalStateException: Duplicate key

已解决java.lang.IllegalStateException: Duplicate key 文章目录 报错问题解决思路解决方法交流 报错问题 java.lang.IllegalStateException: Duplicate key 解决思路 java.lang.IllegalStateException: Duplicate key 是由于在使用 Map 或 Set 时,试图将一个已经…

十、sdl显示yuv图片

前言 SDL中内置加载BMP的API,使用起来会更加简单,便于初学者学习使用SDL 如果需要加载JPG、PNG等其他格式的图片,可以使用第三方库:SDL_image 测试环境: ffmpeg的4.3.2自行编译版本windows环境qt5.12sdl2.0.22&…

redis的性能管理和雪崩

redis的性能管理 redis的数据是缓存在内存当中的 系统巡检: 硬件巡检、数据库、nginx、redis、docker、k8s 运维人员必须要关注的redis指标 在日常巡检中需要经常查看这些指标使用情况 info memory #查看redis使用内存的指标 used_memory:11285512 #数据占用的…

最简单的简历练习

代码&#xff1a; <!DOCTYPE html> <html> <head> <title>我的简历</title> <style> body { background-image: url(https://picsum.photos/id/1018/1000/1000); background-size: cover; …

已解决java.lang.RuntimeException: java.io.IOException: invalid constant type: 18异常的正确解决方法,亲测有效!!!

已解决java.lang.RuntimeException: java.io.IOException: invalid constant type: 18异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决方法交流 报错问题 java.lang.RuntimeException: java.io.IOException: invalid cons…

完美解决ERROR: Command errored out with exit status 1: command: ‘f:\program files\python\python36\pyt

完美解决ERROR: Command errored out with exit status 1: command: f:\program files\python\python36\pyt 下滑查看解决方法 文章目录 报错问题解决思路解决方法交流 报错问题 ERROR: Command errored out with exit status 1: command: ‘f:\program files\python\python3…

【华为OD】C卷真题 100%通过:攀登者1 C/C++源码实现

【华为OD】C卷真题 100%通过&#xff1a;攀登者1 C/C源码实现 目录 题目描述&#xff1a; 示例1 代码实现&#xff1a; 题目描述&#xff1a; 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&…

C++二分查找算法:有序矩阵中的第 k 个最小数组和

本文涉及的基础知识点 二分查找算法合集 本题的简化 C二分查找算法&#xff1a;查找和最小的 K 对数字 十分接近m恒等于2 题目 给你一个 m * n 的矩阵 mat&#xff0c;以及一个整数 k &#xff0c;矩阵中的每一行都以非递减的顺序排列。 你可以从每一行中选出 1 个元素形成…

哈希unordered_set,unordered_map的练习

349. 两个数组的交集 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2]示例 2&#xff1a; 输…

JSP过滤器和监听器

什么是过滤器 Servlet过滤器与Servlet十分相似&#xff0c;但它具有拦截客户端&#xff08;浏览器&#xff09;请求的功能&#xff0c;Servlet过滤器可以改变请求中的内容&#xff0c;来满足实际开发中的需要。 对于程序开发人员而言&#xff0c;过滤器实质就是在Web应用服务器…

使用Wireshark提取流量中图片方法

0.前言 记得一次CTF当中有一题是给了一个pcapng格式的流量包&#xff0c;flag好像在某个响应中的图片里。比较简单&#xff0c;后来也遇到过类似的情况&#xff0c;所以总结和记录一下使用Wireshark提取图片的方法。 提取的前提是HTTP协议&#xff0c;至于HTTPS的协议需要导入服…