【Java面试】九、微服务篇-SpringCloud(上)

文章目录

  • 1、SpringCloud五大组件
  • 2、服务注册和发现
    • 2.1 Eurake
    • 2.2 Eurake和Nacos的区别
  • 3、Ribbon负载均衡
    • 3.1 策略
    • 3.2 自定义负载均衡策略
  • 4、服务雪崩与熔断降级
    • 4.1 服务雪崩
    • 4.2 服务降级
    • 4.3 服务熔断
  • 5、服务限流
    • 5.1 Nginx限流
    • 5.2 网关限流
  • 6、微服务监控
  • 7、面试

1、SpringCloud五大组件

在这里插入图片描述
通常情况下:

  • Eureka:服务注册中心(注册自己的地址上来,方便后续路由转发到对应的服务上去干活儿)
  • Ribbon:负载均衡
  • Feign:远程调用
  • Hystrix:服务熔断
  • zuul/Gateway:网关

实际项目用到了SpringCloudAlibaba相关的组件:

  • Nacos:服务注册中心/配置管理
  • Ribbon:负载均衡
  • Feign:远程调用
  • Sentinel:服务熔断
  • Gateway:网关

2、服务注册和发现

微服务中,关于注册中心:

  • 作用:服务注册和发现
  • 常见选择:Nacos、Eureka、Zookeeper

2.1 Eurake

以Eureka为例:
在这里插入图片描述
比如order服务需要远程调用user服务,则前者为服务消费者、后者为服务提供者,服务启动后详情如下,体现了Eurake的三个功能:

  • 服务注册:微服务向注册中心注册自己的实例信息(服务名称、IP、端口),比如user有三个实例(Pod),地址分别为localhost:8081、8082、8083
  • 服务发现:order作为服务消费者调用user服务时,从注册中心拉取注册信息,并利用负载均衡算法选择user的某一个实例,进行远程调用
  • 服务监控:每个实例定期向注册中心发送心跳,比如user-service:8083实例挂掉,注册中心收不到其心跳信息,则从服务列表中删掉其注册信息

2.2 Eurake和Nacos的区别

二者的共同点:

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

区别:

1)Nacos还支持做配置管理,Eurake只有注册中心
2)Nacos临时实例采用心跳模式,非临时实例采用主动检测模式

使用Nacos时,可以加这个配置,设置为非临时实例(默认临时实例):

在这里插入图片描述
默认的临时实例,其健康检测和Eurake一样,但当设置为非临时实例时,Nacos注册中心会主动发消息询问这个实例还活着没,而不是实例向注册中心发送心跳信息。临时实例心跳不正常会被剔除,非临时实例则不会被剔除。
在这里插入图片描述

3)服务注册信息发生变化时,Naocs会将列表变更推送到服务消费者,即服务列表实时更新

如上图,即Nacos即支持服务主动定时pull拉取注册列表信息,也支持主动将变更push到服务

4)Nacos集群默认是AP,即追求高可用,但当集群中存在非临时实例时,采用CP模式,即强一致性,而Eurake采用AP

3、Ribbon负载均衡

3.1 策略

采用Feign远程调用时,底层是Ribbon在做负载均衡,流程如下: 从注册中心拉取的服务提供者实例列表,根据负载均衡策略,选择一个实例,比如轮询策略

在这里插入图片描述
Ribbon负载均衡策略:轮流、随机、选响应快的、选比较空闲的

  • 轮询:RoundRobinRule
  • 按照权重来选实例,响应时间越长,权重越小:WeightedResponseTimeRule
  • 随机选择一个可用的实例:RandomRule
  • 忽略那些短路的实例,并选择并发数较低的实例(比较空闲的一个):BestAvailableRule
  • 重试(轮询的实例宕机,重试):RetryRule
  • 可用性敏感策略,先过滤非健康的,再选择连接数较小的实例:AvailabilityFilteringRule
  • 区域敏感策略(默认策略,以区域可用的实例为基础进行实例的选择,使用 Zone 对实例进行分类,这个 Zone 可以理解为一个机房、一个机架等,后再对 Zone 内的多个服务做轮询。比如就近选择上海的机房服务器,而不选择放在北京的服务器,没有区域的概念则就是一个轮询):ZoneAvoidanceRule

3.2 自定义负载均衡策略

方式一:

在服务消费方(发起调用的那一方),创建IRule的Bean,返回一个IRule接口的实现类,不同的实现类,对应上面的一个个策略。如此,order调用任何一个微服务,都是这种负载均衡策略。

方式二:

在配置文件中,针对调用哪一个微服务时,使用哪种策略,局部生效,只针对order调用user这一个微服务时生效。
在这里插入图片描述

4、服务雪崩与熔断降级

4.1 服务雪崩

服务雪崩即:一个服务宕机,导致整个调用链上的其他服务因连接数耗尽也不可用

在这里插入图片描述

如上,D被A远程调用,后面A被B调用,此时D实例宕机,A远程请求一直得不到响应,积累久了,A的可用连接数就没了(一个服务的最大连接数是有限的,而调用失败的那些连接不会立马释放)。如此A也不可用,以此类推,整个系统都挂了。解决方案:

  • 熔断降级
  • 限流(只能起个预防作用)

4.2 服务降级

服务D远程调用不通时,走降级逻辑。
在这里插入图片描述
Feign时,用fallback指定降级逻辑:

在这里插入图片描述

4.3 服务熔断

只有降级也不行,降级只是返回了另一个提前定义好的失败调用结果,后面请求进来,还是先会去远程请求,直到超时失败才走降级代码,因此,需要加上熔断。即:远程调用失败次数到达一定阈值,请求过来,直接走降级逻辑,不再去先远程调用等到超时。

在这里插入图片描述
Hystrix 熔断机制,用于监控微服务调用情况。默认关闭,开启熔断可在引导类上添加注解@EnableCircuitBreaker,如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制,断路器打开,请求过来,不管远程调用通不通,直接走降级代码。之后每隔 5 秒重新尝试请求微服务(断路器半开,放行一个请求),如果微服务还不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求流程。

最后,注意,降级是针对远程调用某一个接口的,而熔断发生时,是全部接口。比如A远程调用B,请求B失败率到达阈值,触发熔断,则不管你直接请求B还是远程调用请求B,都是立即失败

在这里插入图片描述

5、服务限流

限流的原因:

  • 有突发流量,并发高
  • 防止用户恶意刷接口

在这里插入图片描述

实现方式:

  • 设置Tomcat最大连接数

在这里插入图片描述

  • Nginx:漏桶算法
  • 网关:令牌桶算法
  • 自定义拦截器

5.1 Nginx限流

漏桶算法即请求过来后,存起来,以固定的、微服务能处理及的速率放出来,装不下的请求等待或抛弃。削峰的味道。
在这里插入图片描述
具体实现:

方式一:控制速率

在这里插入图片描述

语法: limit_req_zone key zone rate

参数:

  • key:定义限流对象, binary_remote_addr 就是一种 key ,即基于客户端 ip 限流
  • Zone:定义共享存储区来存储访问信息,上图serviceReateLimit这个是自定义的名称,10m可以存储 16wip 地址访问信息
  • Rate:最大访问速率,rate=10r/s,表示每秒最多放出10个请求
  • burst=20:相当于桶的大小
  • nodelay:快速处理,桶里的请求快速处理,桶外的请求快速丢弃

方式二:控制并发连接数

在这里插入图片描述

语法: limit_req_zone key zone rate

参数:

  • limit_conn perip 20:对应的 key是 $binary_remote addr ,表示限制单个 |P 同时最多能持有 20 个连接
  • limit_conn perserver 100:对应的 key是 $server name,表示虛拟主机(server)同时能处理并发连接的总数

5.2 网关限流

请求过来时,先去桶里申请令牌。拿到令牌,正常请求,拿不到令牌,阻塞或丢弃

在这里插入图片描述

和漏桶算法相比,二者的区别:比如漏桶设置了漏出速率为3,令牌桶设置了每秒生成的令牌数也为3.此时:

  • 使用漏桶,可以保证最多每秒处理3个请求
  • 令牌桶,每秒最多可处理6个请求:比如第1秒无请求,攒了3个令牌,第2秒来了6个请求,用掉已有的三个令牌,同时这一秒又生成3个新令牌,这一秒就可以处理6个请求

Spring Cloud Gateway网关限流的实现,是在配置中加局部过滤器RequestRateLimiter:

在这里插入图片描述

  • key-resolver :定义限流对象( ip 、路径、参数),需代码实现,使用 spel表达式获取
  • replenishRate :令牌桶每秒填充平均速率(令牌存Redis,因此需要配置Redis)
  • burstCapacity :令牌桶总容量

6、微服务监控

常见技术选型:

  • SpringBoot-Admin
  • Prometheus + Grafana(偏监控,搭建复杂)
  • Zipkin(偏链路追踪,但有代码侵入)
  • Skywalking(偏链路追踪)

以SkyWalking为例:

在这里插入图片描述

相关概念:

  • 服务(Service):系统中的一个个微服务
  • 端点(Endpoint):开发的一个个功能接口
  • 实例(Instance):服务所在的物理机服务器

搭建完成后,根据仪表盘中的慢接口,去问题定位,拓扑图中显示了服务之间的调用关系

在这里插入图片描述
更好的是,sky walking可以设置告警规则,项目上线后,可给负责人发短信或者邮件,以便第一时间修复问题。

7、面试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【Web API DOM05】环境对象、回调函数(重点)

一&#xff1a;环境对象 阅读完本小节能够判断函数运行在不同环境中&#xff0c;this所指代的对象 1 什么是环境对象 环境对象是函数中的this变量&#xff0c;代表当前函数运行时多处的环境 2 this指向问题 粗略规则&#xff1a;谁调用函数&#xff0c;this就指向谁 <…

4个免费音频转换器:解放您的音频文件格式转换需求

在日常生活和工作中&#xff0c;我们经常需要处理各种音频文件&#xff0c;但有时候这些文件可能并不是我们需要的特定格式。在这种情况下&#xff0c;一个免费的音频转换器就能派上用场。免费音频转换器是一种非常实用的工具&#xff0c;它可以帮助我们将不同格式的音频文件相…

20240603每日通信--------springboot使用netty-socketio集成即时通信WebSocket

简单效果图 群聊&#xff0c;私聊&#xff0c;广播都可以支持。 基础概念&#xff1a; springbootnetty-socketioWebSocket POM文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/…

【leetcode10-21】子串、普通数组、矩阵

子串 560.和为K的子数组【没理解】 什么是前缀和&#xff1a;前缀和指一个数组的某下标之前的所有数组元素的和&#xff08;包含其自身&#xff09; 通常&#xff0c;会在前缀和首位放一个0。比如数组[1,2,3。其前缀和是[0,1,3,6] 前缀和通常可以帮助我们快速计算某个区间内的…

一些智能音箱类的软硬件方案

主要参考资料 Rabbit R1: https://www.rabbit.tech/rabbit-r1 mediatek-helio-p35: https://www.mediatek.com/products/smartphones-2/mediatek-helio-p35 NSdisplay: https://www.nsdisplay.com/ai-holobox-mini/ai-holobox-mini.html RK3566: https://www.rock-chips.com/a/…

常用技巧-PPT时你真的做对了吗?

常用技巧-PPT时你真的做对了吗&#xff1f; PPT时通常会通过多种表现手法将信息转化为图表&#xff0c;更好的凸显自己的专业素养。将数据转化为图表是对的&#xff0c;那么你真的用对了图表了吗&#xff1f; 话不多说&#xff0c;直接上干货&#xff1a; 时间线图 时间线是…

AI网络爬虫:对网页指定区域批量截图

对网页指定区域批量截图&#xff0c;可以在deepseek的代码助手中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步一步的思考&#xff0c;完成一个对网页指定区域截图的python脚本的任务&#xff0c;具体步骤如下&#xff1a; 设置User-Agent: Mozilla/5.0 (…

基于深度学习的CT影像肺癌检测识别

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 肺癌是全球范围内导致癌症死亡的主要原因之一&#xff0c;早期检测和诊断对于提高患者生存率至关重要。随着深度学习技术的迅猛发展&#xff0c;基于CT影像的肺癌检测识别成为了研究热点。本文介绍…

线段交点检测:扫描线算法

NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 几何对象的相交检测是计算…

ChatGPT Edu版本来啦:支持GPT-4o、自定义GPT、数据分析等

5月31日&#xff0c;OpenAI在官网宣布&#xff0c;推出ChatGPT Edu版本。 据悉&#xff0c;这是一个专门为大学校园提供的ChatGTP&#xff0c;支持GPT-4o、网络搜索、自定义GPT、数据分析、代码生成等功能&#xff0c;可以极大提升学生、老师的学习质量和教学效率。 目前&…

【UE5教程】使用蓝图显示鼠标

首先&#xff0c;在您的项目中创建一个新的蓝图类&#xff0c;继承自PlayerController。在蓝图编辑器中&#xff0c;找到Event BeginPlay节点&#xff0c;并从它引出一条线。添加Set Show Mouse Cursor节点&#xff0c;勾选Visible&#xff0c;以确保鼠标在游戏开始时可见。 鼠…

python-web应用程序-Django数据库

python-web应用程序-Django数据库-操作表 原始方法&#xff1a; import pymysql#1.链接mysql conn pymysql.connect(host127.0.0.1,port 2206,user root,passwd root123,charset utf8,db unicom) cursor conn.cursor(cursor pymysql.cursors.DictCursor)#2.发送指令 …

1.4 Unicode简介

现在的Windows操作系统有许多不同语言版本&#xff0c;可以支持所有国家现有的语言文字。这就涉及到不同字符集的编码规则。 本节必须掌握的知识点&#xff1a; 字符集 C语言款字符 宽字符和Windows 1.4.1 字符集 ■ANSI多字节字符集 ●ASCII码 现代计算机发源于美国&…

云原生架构案例分析_3.某快递公司核心业务系统云原生改造

名称解释&#xff1a; 阿里云ACK&#xff1a;阿里云容器服务 Kubernetes 版 ACK&#xff08;Container Service for Kubernetes&#xff09;集成Kubernetes网络、阿里云VPC、阿里云SLB&#xff0c;提供稳定高性能的容器网络。本文介绍ACK集群网络及阿里云网络底层基础设施的重要…

[Algorithm][动态规划][回文串问题][回文子串][最长回文子串][分割回文串Ⅳ]详细讲解

目录 0.原理讲解1.回文子串1.题目链接2.算法原理详解3.代码实现 2.最长回文子串1.题目链接3.代码实现 3.分割回文串 IV1.题目链接2.算法原理详解3.代码实现 0.原理讲解 动态规划能够将所有的子串是否是回文的信息&#xff0c;保存在dp表里面状态表示一般经验&#xff1a;以[i,…

Harmony开发 List/Scroll 组件最后一个item显示不全或布局显示不完整

今天在做Harmony开发的时候遇到一个问题,List组件的最后一个item显示不全&#xff0c;如下图&#xff0c;item-9显示不出来&#xff0c;显示了一部分 这个页面的代码结构如下&#xff1a; Column() {Row() {Text(文本1).fontSize(15).fontColor(Color.Black)Text(文本2).font…

基于Vue3的Uniapp实训项目|一家鲜花店

基于Vue的Uniapp实训指导项目 项目预览&#xff1a; 在这里插入图片描述 pages.json {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index",&…

群体优化算法---蜂群优化算法应用于数据挖掘

介绍 蜂群优化算法&#xff08;Bee Algorithm, BA&#xff09;及其变种主要模拟蜜蜂的觅食行为&#xff0c;以解决复杂的优化问题。这类算法通过蜜蜂之间的信息交流和协作来探索解空间&#xff0c;寻找全局最优解。主要应用于参数优化&#xff0c;结构优化&#xff0c;机器学习…

The First项目报告:去中心化知识产权治理协议MON Protocol如何革新链游产业?

2023年12月&#xff0c;RPG NFT 游戏 Pixelmon 首席执行官 GiulioX 在 X 平台表示&#xff0c;确认将推出代币 MON&#xff0c;代币生成&#xff08;TGE&#xff09;时间将取决于 MON 的路线图和主流 CEX 的启动板队列。12 月 11 日&#xff0c;RPG NFT 游戏 Pixelmon 首席执行…

element-plus的Layout组件

elment-plus的layout组件包括el-row和e-col&#xff0c;和bootstrap的栅格类似&#xff0c;e-row采用flex布局&#xff0c;分成了24个栅栏&#xff0c;单个e-col默认占24,可以通过span属性指定其大小&#xff0c;offset属性指定其偏移的栅栏个数。e-row组件的父组件不要使用dis…