SpringCloud-面试篇(二十四)

news2024/9/21 11:10:45

(1)Nacos如何支撑数十万服务注册的压力

小型企业来讲nacos压力没有那么大,但是想阿里,服务的数量可能会达到数万,那麽多的服务。当服务原来越多时,除了服务注册以外,还有服务的定时更新,心跳啊等等各样的请求,压力是很大的,nacos如何抗住折磨打的并发压力呢  ,一方面nacos将来肯定做集群,做负载均衡分担压力,另一方面在代码层面做很多优化,从而提升代码执行时的性能,下面分析nacos的源码,看一下做了那些优化      

服务名称校验:

addInstance 

getService、

 

tasks是一个阻塞队列 

有一个初始化方法,利用线程池执行阻塞对列中的 

notifier是一个可执行 

 

tasks阻塞队列不会影响性能,当队列中有元素时可以返回,没有元素时会等待,for这里面的死循环不会影响cpu的执行,不会忙等

这个取执行的动作是利用线程池是异步执行的,这个活跟服务注册没有关系

首先nacos要做成一个集群,集群对服务注册做负载均衡,减轻压力,其次:

(2)Nacos如何避免并发读写冲突问题

比如一些实例需要做注册,还有一些服务需要去剔除,还有一些更新,并行有好多的操作,在去修改集合的过程中,这个时候有人来读就会读到尚未修复完的数据

当有多个服务并发来写的时候,大家都来改,也有可能有写的冲突

前面讲到在添加实例的时候,添加了同步锁,对于单个服务内的多个实例,只能串行执行,就避免了并发的冲突问题,不通的服务,你改你的service是没有影响的

他不是对整个Map去加锁,只是针对某个服务去加锁,是一种局部锁,不是全部资源,从而让不通服务可以并行执行,性能不会影响        

 

线程池在持续执行任务,他是一个单线程的任务调度的线程池,也能确保线程安全,他是单线程的,没有并行执行

在并发读写的时候

跟新的时候是,copy一份原来的数据,然后在这copy的数据中做修改,然后再覆盖原来的数据,当copy过来做修改的过程中,其他的微服务要来读取注册表的时候读取到的就是旧的实力列表,不会受到影响,就可以避免读写的操作

并发写的冲突,大家都copy完了,都去覆盖,会不会出现丢失更新,我们当时是给服务加了锁,同一个服务的多个实例只能串行执行

不通的服务,你copy你的也不会有影响

(3)Nacos俞Eureka的区别 

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

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

相关文章

【数据分享】《中国投资领域统计年鉴》1950-2022(中国固定资产投资统计年鉴)

​最近老有同学过来询问《中国投资领域统计年鉴》、《中国固定资产投资统计年鉴》这两本年年鉴的关系以及怎么获取这两本本年鉴。今天就在这里给大家分享一下这两本年鉴的具体情况。 《中国投资领域统计年鉴》是一部全面反映中国固定资产投资情况的权威资料。本书收集了全国、…

张霖浩在娱乐“名利场”玩出“修罗场”的贵族范儿

众所周知娱乐圈是个大型“名利场”!近日,2025年北京广播电视台春晚发布会现场,众大咖汇聚,妆容、装扮、穿搭,更是争奇斗艳、八仙过海各显神通。同时,也揭露出娱乐圈当下穿搭界”修罗场”的残酷现实。在出彩…

刷代码随想录有感(99):动态规划——使用最小花费爬楼梯

题干&#xff1a; 代码&#xff1a; class Solution { public:int minCostClimbingStairs(vector<int>& cost) {vector<int>dp(cost.size() 1);dp[0] 0;dp[1] 0;for(int i 2; i < cost.size(); i){dp[i] min(dp[i - 1] cost[i - 1], dp[i - 2] cost…

MySQL快速入门(极简)

SQL 介绍及 MySQL 安装 一、实验简介 本课程为实验楼提供的 MySQL 实验教程&#xff0c;所有的步骤都在实验楼在线实验环境中完成&#xff0c;学习中请按照实验步骤依次操作。 本课程为 SQL 基本语法及 MySQL 基本操作的实验&#xff0c;理论内容较少&#xff0c;动手实践多…

C# BindingSource 未完BindingNavigator

数据绑定导航事件数据验证自定义示例示例总结 在 C#中&#xff0c; BindingSource 是一个非常有用的控件&#xff0c;它提供了数据绑定的基础设施。 BindingSource 允许开发者将数据源&#xff08;如数据库、集合、对象等&#xff09;与用户界面控件&#xff08;如文本框、下…

Fedora的远程桌面

要在 Fedora 40 上开启远程桌面功能。 首先&#xff0c;要确保已安装 gnome-remote-desktop 和 vino 包。 这些软件包通常默认安装在 Fedora 的 GNOME 桌面环境中。 可以按照以下步骤操作&#xff1a; 1、判断电脑是否安装了 gnome-remote-desktop 和 vino 包: tomfedora:…

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯&#xff0c;按键按一次亮&#xff0c;再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开&#xff1b;…

demo xshell (程序替换 工作目录 内建命令)

1.程序替换 在学习完一些列的进程替换接口之后我们大概就能知道&#xff0c;我们的环境变量以及命令行参数是如何传递给子进程的&#xff0c;这些参数是我们在调用进程替换时就传给了子进程的数据。 那么如果我们自己要实现一个简单的命令行解释器&#xff0c;我们是不是首先…

6.全开源源码---小红书卡片-跳转微信-自动回复跳转卡片-商品卡片-发私信-发群聊-安全导流不封号-企业号白号都可以用

现在用我们的方法&#xff0c;可以规避违规风险&#xff0c;又可以丝滑引流&#xff0c;因为会以笔记的形式发给客户&#xff0c;点击之后直接跳微信&#xff0c;我们来看看演示效果吧&#xff08;没有风险提示&#xff09; 无论是引流还是销售产品都会事半功倍。

tkinter用按钮实现工具栏

tkinter用按钮实现工具栏 效果代码 使用 Python 的 Tkinter 库&#xff0c;我们可以轻松创建一个包含按钮的工具栏。本文将介绍如何在 Tkinter 中创建一个 简单的工具栏&#xff0c;并演示如何添加功能按钮。 效果 代码 import tkinter as tk from tkinter import ttk, filed…

Kafka集成flume

1.flume作为生产者集成Kafka kafka作为flume的sink&#xff0c;扮演消费者角色 1.1 flume配置文件 vim $kafka/jobs/flume-kafka.conf # agent a1.sources r1 a1.sinks k1 a1.channels c1 c2# Describe/configure the source a1.sources.r1.type TAILDIR #记录最后监控文件…

Ubuntu 24.04 LTS 安装配置 MySQL Community Server 8.4.0 LTS

1 安装 Apt Repository ​​​​​​​地址MySQL :: Download MySQL APT Repository sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb #安装mysql 8.4 lts sudo apt update sudo apt-get install mysql-server #修改mysql root密码策略 2 查看版本 testtest:~$ mysqld --v…

【数学】各种图面积公式的推导

Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲面积公式。 1.长方形 长方形是 由无数条 长度为长方形的长&#xff08;或宽&#xff09;的线 组成的图形&#xff0c;这些线有多少根&#xff0c;我们不知道&#xff0c;只需要知道他们垒成了一个由高 宽…

自然语言处理:第三十四章Lora VS FineTuning

文章链接: [2405.09673] LoRA Learns Less and Forgets Less (arxiv.org) 这是一篇来自哥伦比亚大学和databricks对Lora 和FineTuning 更深一步的研究。有关于Lora可以参考我之前的文章: 自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客 有关于fine_tuning 可以参考…

Stream流的实际使用

一、中间操作 1、fileter的使用 filter起到过滤筛选的作用&#xff0c;一般在filter中衔接lambda表达式起到筛选作用 2、Map方法的使用 Map方法的适用场景&#xff0c;接上例&#xff0c;对当前的包含对象的流数据转换为仅包含人名的流&#xff0c;那么就适合使用map方法来进行…

Java核心: JarIndex的使用

在讲解Java类加载器的时候&#xff0c;我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径&#xff0c;来确定类是否存在的&#xff0c;假设我们执行的命令是这样的 java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\…

【Leetcode】881. 救生艇

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 点击打开题目链接&#x1f517; 给定数组 p e o p l e people people 。 p e o p l e [ i ] people[i] people[i]表示第 i i i 个人的体重 &#xff0c;船的数量不限&#xff0c;每艘船可以承载的最大重…

JavaScript学习|JavaScript 引入方式、JavaScript 基础语法、JavaScript 对象、BOM、DOM、事件监听、事件绑定

JavaScript 能做什么 1.能够改变文本内容 2.能够改变图像的src属性值 3.能够进行表单验证等 JavaScript 引入方式 内部脚本 1.内部脚本:将 JS代码定义在HTML页面中&#xff0c;JavaScript代码必须位于<script>与</script>标签之间。在 HTML 文档中可以在任意地…

Linux iptables详解

前言&#xff1a;事情是这样的。最近部门在进行故障演练&#xff0c;攻方同学利用iptables制造了一个故障。演练最终肯定是取得了理想的效果&#xff0c;即业务同学在规定时间内定位了问题并恢复了业务(ps&#xff1a;你懂得)。 对我个人来讲一直知道iptables的存储&#xff0…