SpringCloud 题库
这篇文章是关于 SpringCloud 面试题的汇总,包括微服务的概念、SpringCloud 的组成及相关技术,如服务注册与发现、负载均衡、容错等,还涉及 Nacos 配置中心、服务注册表结构等原理,以及微服务架构中的日志采集、服务网关、相关概念和预防服务雪崩的措施等。
1、什么是微服务?
微服务是一种软件架构风格,是将复杂的应用拆分成一个个功能单一的服务。微服务使得开发、运维和部署更加灵活和高效。针对不同的业务类型的服务,可以用不同的技术和语言选型。各个微服务之间使用RPC进行网络通信,相比单体服务会带来网络开销。
2、SpringCloud有哪些组成?
1)服务注册与发现:一个系统可能有上百个微服务,这些微服务的配置以及状态都需要管理,SpringCloud有配置中心和注册中心
2)负载均衡:Ribbon是基于HTTP和TCP协议的负载均衡器。OpenFeign支持RPC调用
3)服务容错:Sentinel支持限流、熔断和降级
4)网关:SpringCloud Gateway可进行服务转发、过滤和负载均衡
5)分布式事务:要保证多个微服务之间数据一致性,需要分布式事务
3、Nacos作为配置中心的原理?
1)配置信息注册:服务启动了,Nacos客户端向服务端注册配置信息,服务将其保存下来并生成对应的版本号
2)配置信息存储:Nacos服务端将配置信息一般存储在数据库中,可以通过Nacos配置文件指定
3)配置信息获取:服务运行期间,Nacos客户端通过调用API拿到配置信息
4)配置信息变化监听:配置信息变化时,Nacos服务端会通知已经注册的客户端,并触发相应的回调方法
4、微服务架构中如何进行日志采集? 可以通过使用ELK方案进行采集
1)LogStash:是用于采集、过滤和转发日志数据的工具,可以采集微服务的日志信息
2)ElasticSearch:是用于存储和索引大量日志信息的工具,也提供了快速查询的功能
3)Kibana:日志数据可视化工具,从ElasticSearch中查询出日志数据后在界面展示
5、Nacos的服务注册表结构?
Nacos采用数据的分级存储模型,最外层的是namespace,用来隔离环境;然后是group,用来实现服务分组;接下来是服务(service),一个服务可以有多个实例,并且可能服务节点不在一个区域,所以服务下面还有集群(cluster),集群下还有多个实例(instance)。
6、Nacos的namespace的作用?
namespace用来隔离不同的环境(开发、测试和生产环境)和不同的服务的配置信息和服务信息,避免发生冲突。在Nacos中每个namespace都有自己的配置和服务注册表,意味着多个服务注册到Nacos中,这些服务是可以放到不同的namespace中的,每个namespace有唯一ID用于标识。
7、Nacos是强一致性的还是最终一致性的?
Nacos既可以是强一致性,也可以是最终一致性,是通过配置参数nacos.consistency.mode进行配置nacos.consistency.mode=AP nacos.consistency.mode=CP AP表示最终一致性,CP表示强一致性。
8、在SpringCloud中,如何做到负载均衡?
一般使用Ribbon进行负载均衡。Ribbon是客户端侧的负载均衡,在调用接口前,先到注册中心拿到可用的服务列表,并且缓存到本地,然后通过负载均衡算法选择出服务端节点。负载均衡还有一种常见的方式,就是服务端侧负载均衡,例如Nginx,就是请求快到服务端时,先经过Nginx,由Nginx选择合适的节点。
9、Http和RPC的区别?
HTTP是应用层的网络通信协议,RPC是远程调用,运用于微服务间通信。RPC的底层有可能是HTTP协议,也有可能是其他协议。
10、Ribbon和Feign调用服务的区别是什么?
Ribbon是基于HTTP和TCP协议的负载均衡组件,主要实现客户端侧负载均衡,需要在代码中手动设置调用目标服务。Feign是内置了Ribbon,用来实现负载均衡,而且Feign主要是通过注解定义接口,然后调用接口去调用注册中心的服务。
11、为什么Feign第一次调用耗时长?
这个与Feign内置了Ribbon有关。第一次调用,需要启动Ribbon,去注册中心拿到可用的服务列表,建立起连接池,所以比较耗时。往后的调用,服务列表已经存在本地,就不需要访问注册中心了。如果想要节省第一次调用的时间,最好是程序启动时进行一次预热,先自动调用一次。
12、什么是服务雪崩?
一个系统往往由多个微服务组成,一个功能可能需要调用多个微服务,例如A调用B,B调用C,C调用D等等。如果服务C宕机了,导致功能不可用,随着请求越来越多,可能会导致系统全面崩盘,这就是服务雪崩。可以通过以下几个方面预防服务雪崩:
1)服务的高可用部署:搭建集群
2)服务限流、降级和缓存,通过限流和缓存的方式保护服务,减少服务压力,在必要时采用服务降级的方式,即牺牲一些边缘功能来保证核心功能可用。
3)服务熔断,服务负载过大时,直接熔断,避免过多的请求涌入。
13、什么是服务降级?
服务降级是微服务中一种保护核心功能的机制,目的是在系统资源紧张的时候保证核心功能可用。例如可以将一些边缘的功能暂时关闭,或者在服务调用失败时,默认返回一个值来处理失败的情况,或者在申请某个资源失败时,返回一个预先准备的资源。
14、什么是服务熔断?
在微服务架构中,系统的服务相互调用,有的服务出现宕机现象,如果此时不处理,可能会导致整个系统崩溃。为了避免这种现象,要对服务进行熔断处理。也就是说关闭此服务的调用,避免发生系统崩溃。直到服务正常或者到达最大等待时间才恢复正常。
15、什么是服务限流?
服务限流可以看做是服务降级的一种,限流是通过限制系统请求的输入和输出,从而保护系统。限流是因为服务的吞吐量是可以预估的,为了保证系统正常,设置流量阈值。限流的方案有很多,比如限流算法,延迟解决,以及拒绝解决等等。
16、为什么需要服务网关?
在微服务架构中,存在服务相互调用,而服务的调用链路可能相当复杂,服务的部署和变化非常频繁,为了减少修改源代码,就是用了服务网关。服务网关是服务调用链路上的中间件,实现服务调用入口和出口的统一管理。 服务网关常用功能如下:
1)路由转发:服务网关可以通过路由转发的方式,将请求分发到不同的服务实例上
2)安全鉴权:可以将安全鉴权功能放在网关进行,这样就避免了每个微服务代码中都有安全鉴权的代码
3)日志监控:因为网关可以统一管理服务的出口和入口调用,很方便进行日志监控和请求统计
4)提高性能:通过服务网关,可以缓存些静态资源
5)服务保护:网关可以实现鉴权、负载均衡、流量控制等,从一定程度上保护了服务,提高服务的稳定性
17、SpringCloud Gateway的核心概念?
1)路由:路由是网关实现的核心功能,通过配置路由的方式,将请求转发到后端的服务实例上。路由规则可以根据请求的路径、方法、请求头等方式进行匹配,最后转发到指定目标的URI。
2)过滤器:这个主要针对请求进行处理和转换。比如协议转换,鉴权,日志统计等
3)断言:主要用于请求条件的匹配,如果请求满足断言的条件,那么就会应用所配置的过滤器。SpringCloud Gateway提供了多种断言机制,比如路径匹配、请求方法匹配等
相关文章:
SpringCloud 题库
这篇文章是关于 SpringCloud 面试题的汇总,包括微服务的概念、SpringCloud 的组成及相关技术,如服务注册与发现、负载均衡、容错等,还涉及 Nacos 配置中心、服务注册表结构等原理,以及微服务架构中的日志采集、服务网关、相关概念…...
基于Filebeat打造高效日志收集流水线
1. 引言 在现代的分布式系统中,日志数据的收集、存储与分析已经成为不可或缺的一部分。随着应用程序、服务和微服务架构的普及,日志数据呈现出爆炸式增长。日志不仅是系统运行的“侦探”,能够帮助我们在出现问题时进行快速排查,还…...

《HTML 的变革之路:从过去到未来》
一、HTML 的发展历程 图片: HTML 从诞生至今,经历了多个版本的迭代。 (一)早期版本 HTML 3.2 在 1997 年 1 月 14 日成为 W3C 推荐标准,提供了表格、文字绕排和复杂数学元素显示等新特性,但因实现复杂且缺乏浏览器…...

快速了解 Aurora DSQL
上周在 AWS re:Invent大会(类似于阿里云的云栖大会)上推出了新的产品 Aurora DSQL[1] ,在数据库层面提供了多区域、多点一致性写入的能力,兼容 PostgreSQL。并声称,在多语句跨区域的场景下,延迟只有Google …...

计算机视觉与医学的结合:推动医学领域研究的新机遇
目录 引言医学领域面临的发文难题计算机视觉与医学的结合:发展趋势计算机视觉结合医学的研究方向高区位参考文章结语 引言 计算机视觉(Computer Vision, CV)技术作为人工智能的重要分支,已经在多个领域取得了显著的应用成果&…...

Scala的隐式对象
Scala中,隐式对象(implicit object)是一种特殊的对象,它可以使得其成员(如方法和值)在特定的上下文中自动可用,而无需显式地传递它们。隐式对象通常与隐式参数和隐式转换一起使用,以…...

PageHelper自定义Count查询及其优化
PageHelper自定义Count查询及其优化 文章目录 PageHelper自定义Count查询及其优化一:背景1.1、解决方法 二:利用反射判断请求参数是否有模糊查询2.1、分页不执行count2.2、思路2.3、代码示例 三:自定义COUNT查询SQL(只适用于单表)3.1、局限性…...
【数据结构】哈夫曼树
哈夫曼树 路径长度:从树中一个结点到另一个结点之间的分支构成这两个节点之间的路径,路径上的分支数目称为路径长度 树的带权路径长度:树中所有叶子结点的带权路径长度之和,通常记为WPL ∑ k 1 n w k l k \sum^{n}_{k1}w_kl_k …...

springboot422甘肃旅游服务平台代码-(论文+源码)_kaic
摘 要 使用旧方法对甘肃旅游服务平台的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在甘肃旅游服务平台的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的…...
docker中安装minio
1.首先需要搜索可用镜像,当然也可以不用 docker search minio/minio 2.拉取镜像 docker pull minio/minio 3.在本地新建两个文件夹路径 mkdir -p /opt/minio/datamkdir -p /opt/minio/config解释一下,data是文件存储的首路径。config是配置路径&…...
golang实现简单的reids服务2
golang实现redis兼容的redis服务实现redis兼容的redis服务思路 golang实现redis兼容的redis服务 之前做的redis服务是通过tcp封装的自定义协议 原版项目地址:https://github.com/dengjiayue/my-redis.git 那么能不能实现一个redis兼容的redis服务,这样一般的redis包也可以调…...
跟李笑来学美式俚语(Most Common American Idioms): Part 67
Most Common American Idioms: Part 67 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记,自用。 Github仓库链接:https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来(或者clone到本地…...

QT 中 QDateTime::currentDateTime() 输出格式备查
基础 QDateTime::currentDateTime() //当前的日期和时间。 QDateTime::toString() //以特定的格式输出时间,格式 yyyy: 年份(4位数) MM: 月份(两位数,07表示七月) dd: 日期(两位数,…...
安卓手机怎么轻松转换更新ip网络地址
随着移动互联网的快速发展,IP地址作为网络身份标识的重要性日益凸显。对于安卓手机用户来说,但有时候我们希望能够轻松转更换ip地址,以提高网络安全性或访问特定内容的需要。那么,安卓手机如何更换IP地址呢?本文将为您…...

spring项目添加本地依赖,报java程序包不存在
删除引入程序中的iml文件 重新在当前项目目录下构建项目...

嵌入式硬件-- 元器件焊接
1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子;138度的低温锡(锡膏), 第一次使用,直接拿东西挑一点涂在引脚上,不知道多少合适,加热台加热到260左右,放在上面观察锡融化&#…...

物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024
教程介绍 本次教程主要讲述如何下载与配置Arduino,以及开发版对应驱动的下载安装 原文链接:物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024 步骤概述 1:下载Arduino 2:安装Arduino 3:下载安装驱动 4&am…...

防火墙旁挂部署+故障切换
一、实验环境 华为ENSP 二、拓扑 三、目的 1、内网PC1访问Server 2、防火墙旁挂部署,对流量进行过滤,防火墙挂掉之后,内网PC1能继续访问到Server 3、防火墙恢复正常后,流量能回切至防火墙转发 四、思路: 1、AR1…...
PyTorch基本使用-张量的基本运算及函数计算
文章目录 1. 张量数值计算1. 1 张量基本运算1.2 点乘运算1.3 矩阵运算 2. 张量运算函数 1. 张量数值计算 1. 1 张量基本运算 加减乘除取负号: add、sub、mul、div、neg add_ 、sub_、 mul_ 、div_、 neg_ (其中带下划线的版本会修改原数据) data torch.randin…...

C#--方法
C#的代码包装 三种实现途径:方法、类和名字空间。 • 方法是包含一系列语句的代码块。 • 类用于组合类,方法,属性。 • 将多个相关类组合成名字空间。 静态方法和静态变量 • 静态成员 在类中,使用static修饰符声明的成员称为静态…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...