面试篇:SpringCloud

news2024/11/27 0:43:31

一、SpringCloud常见的组件有什么?

1、常见微服务功能架构图

2、阿里巴巴SpringCloud常用组件 

  • 注册中心/配置中心:Nacos
  • 负载均衡:Ribbon
  • 服务调用:Feign
  • 服务保护:Sentinel
  • 服务网关:Gateway

二、服务注册和发现是什么意思? Spring Cloud 如何实现服务注册发现? 

1、Eureka的作用

如上图,order-service为服务的消费者,user-service为服务的提供者,那么user-service需要将自己的信息如ip地址以及端口号上传的eureka-server注册中心,注册中心保存着user-service的ip和端口信息。

因为order-service也可能被其他服务调用,所以也会上传到注册中心。这样注册中心就保存了两个微服务的IP和端口号。

order-service会定期的从注册中心拉取信息,将其保存到自己服务的本地中,这样就可以通过feign和使用Ribbon利用负载均衡实现对某一实例的远程调用。

user-service会30秒发送一次心跳给注册中心,当user-service中的某一台服务宕机的时候,并且注册中心90秒内未收到心跳,那么就会认为某一台实例宕机了,就会从注册中心中删除宕机的实例。并且user-service会定期从注册中心拉取服务信息,更新自己的本地信息表。

2、服务注册和发现是什么意思? Spring Cloud 如何实现服务注册发现?

  • 我们当时项目采用的eureka作为注册中心,这个也是spring cloud体系中的一个核心组件
  • 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、ip、端口等等
  • 服务发现:消费者向eureka拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用
  • 服务监控:服务提供者会每隔30秒向eureka发送心跳,报告健康状态,如果eureka服务90秒没接收到心跳,从eureka中剔除

 3、nacos与eureka的区别?

首先是nacos的流程:

  • 服务分为服务的消费者和服务的提供者,服务的提供者和服务的消费者通过心跳监测机制将当前服务的IP和端口号上传到nacos注册中心,这样nacos就拥有了各服务的IP和端口号。
  • 服务消费者会定期从注册中心拉取服务信息,如IP和端口号。注册中心会根据心跳来进行健康监测,并且维护注册中心给的信息。
  • 因此在设置ephemeral:false之前,和eureka一模一样。当设置的ephemeral:false就会有所不同。

不同:

  • 当设置了ephemeral:false那么注册中心就会主动查询服务的提供者,看有没有实例宕机。
  • 如果有实例宕机那么就会将实例宕机的信息主动推送给调用这个服务的服务消费者,服务消费者立马就可以更新自己的本地信息。这样就可以更加的及时。

4、 我看你之前也用过nacos、你能说下nacos与eureka的区别?

Nacos与eureka的共同点 (注册中心)

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别 (注册中心)

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式Eureka采用AP方式

Nacos还支持了配置中心,eureka则只有注册中心,也是选择使用nacos的一个重要原因

三、 你们项目负载均衡如何实现的?

1、Ribbon负载均衡流程

首先是order-service调用user-service。那么就会通过url地址发起请求,在这个请求的中间会调用Feign这个组件(内置Ribbon),Feign会从注册中心拉取user-service的IP地址和端口号,然后注册中心会将user-service的IP地址和端口号返回给Feign,这样Feign就知道了user-service的IP地址和端口号。Feign里面内置了Ribbon,因此根据不同的策略进行对user-service的远程调用。Ribbon默认为轮询策略。

2、Ribbon负载均衡策略有哪些?

  • RoundRobinRule: 简单轮询服务列表来选择服务器
  • WeightedResponseTimeRule: 按照权重来选择服务器,响应时间越长,权重越小
  • RandomRule: 随机选择一个可用的服务器
  • ZoneAvoidanceRule: 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询

3、如果想自定义负载均衡策略如何实现?

可以自己创建类实现IRule接口,然后再通过配置类或者配置文件配置即可,通过定义IRule实现可以修改负载均衡规则,有两种方式:

  • 全局生效:对于order-service远程调用的所有服务都是用的是RandomRule。被调用方使用
  • 局部生效:对于调用user-service的服务使用的是RandomRule。调用方使用

四、服务雪崩,熔断降级

1、什么是服务雪崩,怎么解决这个问题?

如果在某一时刻,服务B出现故障(可能就卡在那里了),而这时服务A依然有大量的请求,在调用服务B,那么,由于服务A没办法再短时间内完成处理,新来的请求就会导致线程数不断地增加,这样,CPU的资源很快就会被耗尽。那么就会出现服务雪崩。

2、服务的降级

部分服务不可以

如上图,如果正常调用失败的话,那么就会采用备用的回答来返回结果。

3、Sentinel的熔断

所有服务不可以

如上图,为服务熔断的流程。根据熔断策略,当服务调用失败到一定的次数,就会触发熔断机制,首先打开熔断器,所有请求全部降级处理。当熔断时间结束(Sentinel和Hystrix相同),会尝试进行放行一次请求查看是否成功,如果失败就继续全部降级处理,直到成功后关闭熔断。

4、Sentinel的熔断策略

慢调用比例

判定为慢调用条件:一次请求的响应时间超过最大RT值,那么就是慢调用。

即:在一个统计时长内,如果请求数目大于最小请求数目,并且被判定为慢调用的请求比例已经超过阈值,将触发熔断

如上图,如果在1000ms内,当请求超过1次请求,并且请求时间超过500ms占每1次请求的100%就会触发5秒熔断 

异常比例

如上图,在1秒内当每2次请求中异常比例达到1的时候 ,那么就会触发5秒熔断时间。

异常数

如上图,在1秒内当每2次请求中异常数为1的时候 ,那么就会触发5秒熔断时间。

5、概括

什么是服务雪崩,怎么解决这个问题?

  • 服务雪崩:一个服务失败,导致整条链路的服务都失败的情形
  • 服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑
  • 服务熔断:默认关闭,需要手动打开,如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求

五、微服务的监控SkyWalking 

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

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

相关文章

阿里云IoT物联网平台

IoT物联网平台 一、工作原理 1、MQTT(Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,专门设计用于物联网(IoT)应用中的通信。它是一种发布/订阅(publish/subscribe)模式的…

【OpenCV DNN】Flask 视频监控目标检测教程 04

欢迎关注『OpenCV DNN Youcans』系列,持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 04 3.4 用Flask构建流媒体服务器3.4.1 流媒体服务器基本知识3.4.2 用Flask搭建流媒体服务器 Flask04 完整例程cvFlask04 项目的文件树cvFlask04.pyindex1.html 本系列从零…

零基础web安全入门学习路线

相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家有帮助 同时本博客也会按照学习路…

【Java EE 初阶】网络编程套接字TCP的实现

目录 1.实现一个TCP的回显服务 1.Sever Socket API 1.SeverSocket 构造方法 2.Sever Socket方法 2.Socket API 1.Socket的构造方法 2.Socket 方法 那么怎么实现让服务器可以处理多个客户端呢? 服务端代码: 客户端代码: 1.实现一个TC…

【Python】玩转lambda表达式

知识目录 一、写在前面✨二、lambda匿名函数三、泛化函数四、总结撒花😊 一、写在前面✨ 大家好!我是初心,又见面了! 今天跟大家分享的文章是 玩转Python中的lambda表达式 ,希望能帮助到大家!本篇文章收录…

三十三、数学知识——质数(朴素筛法 + 埃氏筛法 + 线性筛法)

质数与质数筛法算法主要内容 一、基本思路1、质数质数的判定——试除法(复杂度固定位 O(sqrt(n)) ) 2、分解质因数——试除法(最坏是O(sqrt(n)))3、朴素筛法——筛的是倍数4、埃氏筛法——朴素筛法优化5、线性筛法——n&#xff0…

刷题---C语言

目录 前言: 一.刷题(1) 1.1打印X图案 1.2打印带空格直角三角形图案 1.3小乐乐改数字 1.4牛牛的线段 2.刷题(2) 2.1判断奇偶性 2.2及格分数 2.3kiki算术 2.4(ab-c)*d 2.5KiKi算期末成…

亿级大表拆分过程记录

两年前接手公司的财务系统的开发和维护工作。在系统移交的初期,笔者和团队就发现,系统内有一张5000W的大表。 跟踪代码发现,该表是用于存储资金流水的表格,关联着众多功能点,同时也有众多的下游系统在使用这张表的数据…

Doris-----Aggregate 聚合模型及案例实现

Aggregate 模型 是相同key的数据进行自动聚合的表模型。表中的列按照是否设置了 AggregationType,分为 Key(维度列)和 Value(指标列),没有设置 AggregationType 的称为 Key,设置了 Aggregation…

外包实在是太坑了,干了三年,感觉人都废了

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

【JMeter中的View Result Tree显示中文乱码】

JMeter中的View Result Tree显示中文乱码 检查JMeter的安装目录下的bin文件夹中的jmeter.properties配置文件 用记事本打开并搜索:sampleresult.default.encoding 找到该行 改成sampleresult.default.encodingutf-8 修改后重启JMeter ok, 解决乱码 附加 : 下载 J…

【Linux高级 I/O(7)】初识文件锁——fcntl()方法及其独占性、共享性实验(附全文代码)

fcntl()函数在前面系列内容中已经多次用到了&#xff0c;它是一个多功能文件描述符管理工具箱&#xff0c;通过配合不同的 cmd 操作命令来实现不同的功能。为了方便述说&#xff0c;这里再重申一次&#xff1a; #include <unistd.h> #include <fcntl.h>int fcntl(…

大模型对世界的改变,从一时一地,到无处不在、无时不有

作者 | 曾响铃 文 | 响铃说 大模型正在中国遍地开花&#xff0c;做过的没做过的都要过来参合一下。 汹涌浪潮中&#xff0c;不免有更多人开始关注那个最先发布的文心一言。 全球科技大厂中第一个发布GPT大模型产品的百度&#xff0c;在刚刚的中关村论坛上透露了一些文心一言…

nodejs连接mysql

npm i express #node后端框架npm i corsnpm i mysqlconst app require(express)(); const cors require(cors); const port 5000; const mysql require(mysql) //引入mysql 模块app.use(cors({}))const conn mysql.createConnection({user: root,password: qwertyuiop…

普通人想自学软件测试?我还是劝你算了吧。。。

本人7年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说&#xff1a;自学软件测试&#xff0c;一般人我还是劝你算了吧&#xff1f;因为我就是那个一般人&#xff01; 软件测试基础真的很简单&…

gtest单元测试

gtest单元测试 1. gtest是什么&#xff1f;简答&#xff1a;做测试用的2. gtest的优点3. 搭建测试框架4. gtest_范例演示 1. gtest是什么&#xff1f;简答&#xff1a;做测试用的 gtest是Google的一套用于编写C测试的框架&#xff0c;可以运行在很多平台上&#xff08;包括Lin…

【JavaSE】Java基础语法(十四):Static

文章目录 概述特点与应用注意事项为什么一个静态方法中只能访问用static修饰的成员? 概述 Java中的static是一个修饰符&#xff08;也可称关键字&#xff09;&#xff0c;可以用于修饰变量、方法和代码块。 特点与应用 static修饰的成员具有以下特点&#xff1a; 被类的所有对…

如何在Mac上抓取安卓设备的日志

要在 Mac 上抓取 Android 设备的日志&#xff0c;您可以使用 Android SDK 中的 adb 工具。以下是一个简单的步骤&#xff1a; 1.您需要在 Mac 上安装 Android SDK。您可以从 Android 开发者网站上下载最新版本的 Android SDK&#xff0c;并按照说明进行安装。 2.将您的 Andro…

重学 Symbol

重学 Symbol 之前在写基础类型的笔记时暂时性的先跳过了 symbol&#xff0c;现在也有了一些项目的使用经验后&#xff0c;觉得还是需要重新回滚并且学习一下&#xff0c;温故而知新。 首先依旧回顾一下 symbol 的特点&#xff1a; 是原始值 唯一 不可变 可以提供私有属性&…

javaWeb ssh沙发销售系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh沙发销售系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…