超实用,一文读懂高并发处理之道(务必收藏点赞转发哦)

2024-01-20 20:10

本文主要是介绍超实用,一文读懂高并发处理之道(务必收藏点赞转发哦),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       这篇文章请你务必收藏,点赞,转发。

       目前还是初稿,初稿,所以你得收藏,时不时来看看。

       请给我时间,我得慢慢来改,也请大家一起来参与,如果你有更多的实践,也可以留言交流。我后续还会添加更多的图,更详细的内容,这篇文章将会很长,但是我尽可能通俗简单的来讲述,相信你读完一定会有所收获,我会尽最大可能努力打造一篇不可多得的能让你获得提升的文章。

       如果你现在出去面试技术岗,哪怕就是个初创公司,很多面试官也经常会问你如何处理亿级用户的高并发问题,我们今天来好好聊聊这个问题,我想尽可能简单的来说这个问题。

      技术永远不是凭空产生的。

      技术一定是在需求下产生的,技术是人创造的,那么它一定体现的就是人的思想。

      技术一定是因为存在某种需求,为这些需求而服务的。技术都是人造出来的,它一定体现的是人的思想,所以不要把它看的有多高大上。要从心理上藐视之。

      让我们秉持创业的初心,从一家小店干起,就从创业开始吧!干点啥呢?开个饭店吧!

      一开始,咱就是个小饭店,顾客既不多,客流也不稳定,但是我们还是得有个饭店该有的样子对吧?你得有大厨吧?得有跑堂的吧?得有收银的吧?有后厨还得有杂工吧?麻雀虽小五脏俱全,这些构成了一个饭店,嗯,饭店做到这样,我们就可以开店迎客了。

      后来,我们做的饭菜声名远播,来的客人越来越多,来的人越来越多,越来越多,越来越多,但是店小啊,根本坐不下啊!店都要被挤爆了啊,这怎么办呢?

       俗话说,来的都是客,你不能赶客人走吧?那么这个时候,你得有个人安排吧?店里招待不下啊,你的备菜,食材可能都不够啊!所以这个时候你得限制,比如每个人只能点一份,不可多点,然后人多得有秩序,所以要排队,但是这样还是扛不住啊,那怎么办吧?讲道理,这种情况老板肯定是非常开心的啊,这生意做的,睡梦都能笑醒了。

       从古到今,大道至简,道理都是相通的。

       天下虽大,分而治之。

       天下即便再大,周天子一个人哪管的过来?那就每个地方分个王去管就好了啊,所以周天子分九州,之后就有了齐楚燕赵韩魏齐秦周这九个国家,周天子坐拥九州称帝,每个板块交给每个王去处理就好了啊!

       自古以来,道理都是相通的,太阳底下没有新鲜事!

       那这个时候人太多了,生意做大了,很简单嘛,开分店啊!一个店扛不住,来它10个店,分流嘛!现在每个店都只有原来十分之一的压力了,虽然你店开起来了,但你还要做好调度对吧?不然虽然你有10家店,但是大家都涌向了某一两个店,其他的店闲置,这就违背本意了对吧?

       是的,现在我们生意做大了,我们有10家店,然后经过我们的合理调度,10家店都运转良好,每家店服务1000人,10家店就可以服务1万人了,生意真的是做大了呢!

       但是我们怎么降低成本呢?怎么样能让利润更上一层楼呢?继续优化,10家店,每家店都是一样的,那么它们有很多都是同样的服务,比如财务,再比如后厨,再比如杂工,这些人和事物都是一样的,但是顾客去每家店的时间段可能是有差异的,所以就存在某些时间点某些店很忙,但另一些店很闲,而且很多人是繁杂的,要把他们高效利用起来啊!不能让他们闲着啊!那怎么优化呢?

        分部门,是的,现在同样还是10家店,每家店都有很多同样的工作要处理,比如每家店都要处理财务问题,然后每个店处理完了要汇总,又要核算,整个过程非常麻烦,那么现在成立财务部,直接管理,省去中间流程,财务部直接管理10家店,哪个店需要处理财务工作财务部就出动去处理。再比如大厨,原来每家店都是自己的大厨,然后有的时间点他们就很闲,要让他们忙起来,所以就组建大厨部门,综合调度,哪个店需要就去哪个店。

       所以,理想的情况下,我们发现了,后来我们成立了一个个的服务部门,哪个地方需要什么服务就让这个服务部门去处理,高效执行。

       现在让我们把思考转向我们的程序开发。

       初创公司,业务量根本不高,核心的问题是解决业务需求,实际上并不会有什么并发量,因此这个时候就像我们初创,一个店就可以了,单机就可以了。

       再然后走向下一个台阶,业务量上来了,单机搞不定了,那么我们很简单嘛!就部署多套嘛!单机不行,那就十个机一起上!

       进入到第三个阶段,我们很容易发现,第二阶段的简单拆分,实际上有很多东西都是重复的,因为每个都是一样的,自然都是重复的,所以我们进行了部门服务化,我们减少了这种重复,让每一个原来重复的事情都变成了一个个部门,一个个服务,你需要什么服务?就去找什么服务。

       这就是一个公司发展的历程,这同样也是程序发展的历程。

       我们接着细聊:

       老板的钱也是一点点赚出来的,老板也不是啥有钱人,他还靠着你们给他赚钱呢!如果开分店那么容易的话,老板早全世界都开满店了,所以,开分店也不是那么容易的事,地段、房租、客流量都是因素,我们现在客流量是大,但还不足以大到支撑2家分店的情况,请尽可能在一家店解决,毕竟,即使开第二家店也是要考虑很多的。

        那么,现在我们只有一家店,如何尽可能的招呼住更多的客人呢?

        首先,你是不是得把那些闹事的,不是来吃饭的闲杂人员清理出去,所以咱们得做拦截,只接受真正的有需求的客户来,那些闹事的得拦在店外,不能让他们进去,其次,尽可能扩大单店的使用面积,尽可能接纳更多的客人,如果这样不行,就给客人排队,人太多,排队是最自然的需求对吧?排队的话可能又会分级,分为VIP队和普通队伍,这没什么不好理解的对不对?

        好,说回我们程序的问题,一开始规模小,大都是单体应用,直接,业务能很快跑起来,那么现在这个时候,我们要如何提高单机的效率?自然和上面的道理是一样的,客户端前端首先自己要做保护,只向服务端传递合法有效的信息,如果是同类信息,要做合理的拦截,同一个用户疯狂的请求,客户端首先就不应该把这种情况发到服务端去,前边首先要拦住。

        服务端要不要做拦截呢?自然也是要的,我们知道很多的攻击可能不是来自你的客户端的,你要想办法减少这种来自第三方的请求,只接受合理合法的自己家的请求,因为我们现在只有单机,只有一家店,我们要撑住,那么你就要看,怎么接住?自然是优化单机的处理能力,想办法提升整个程序的运行速度,换更好的机器,对各种服务配置做更适合的配置,总之就是提升单机的处理能力,这样往往不够,那么我们就采用排队的方式来处理,机器的处理能力最多就那样了,单店最多也就能撑住1000人,没办法了,那就是排队,把VIP客户先处理,其他的可以后处理,反应在我们的程序上,其实就是看你怎么处理嘛,有些东西可以往后面放,那你就把它放到后面去慢慢处理,这叫服务降级,比如日志分析这种功能,你没必要在吃饭的这个时候非要加入一层日志分析吧?

       所以单店就是这样,单体单机我们就是不断的优化这里面的每一个进程,怎么让它处理的更快更有效率。

       当我们单店达到极致的时候,这个时候单店必然扛不住了,那就考虑多店一起扛,单店最大也就能招待1000人,来10000人自然是不成的,这个时候我们就把我们优化的很好的单店复制到多家店,这样每家店压力自然小了,就能扛下来了。

        现实中开店是很贵的,同样程序中开店也是很贵的,现实中你钱够了可以开店,钱少了你也可以摆个摊嘛!程序也一样啊!如果钱多,咱们就全买机器了,直接往机器上搞起,但是很贵啊!哪个老板也不可能让你无限加机器,那都是要花钱买的,机器是有限的,所以我们在有限的硬件机器上发展出来了虚拟的机器,就是虚拟机技术,还不是因为买机器要花钱!还有很多事,比如维护、人工、水电等等,虚拟机相对实体机自然是省钱不少,但是虚拟机本身也有很多开销啊,这些开销又不能用在真正需要的算力上,浪费了。

        这个你可以自己测试自己模拟,开几个云服务器来调度,你自己看看你的这些云服务器间怎么协同,怎么处理业务,模拟高并发,我们可以自己通过云服务器来模拟这种场景,提升我们处理这种事情的技术能力。

        云服务器的话很便宜,我自己也买了很多,我一般都是买阿里云的,如果腾讯云比阿里云更便宜,我也会去选,记得使用优惠,可以便宜不少。微信和支付宝认证起来也都方便。以下是相关优惠信息,需要的看看看。

阿里云限量红包,不要钱,直接领。

云小站_专享特惠_云产品推荐-阿里云上云优惠聚集地,新人专享优惠价格,可叠加专享代金券购买价格更低。https://www.aliyun.com/minisite/goods?userCode=v6vhcyn8【腾讯云】新客户红包。

腾讯云优惠券_代金券_云服务器折扣券-腾讯云腾讯云优惠券,腾讯云代金券,腾讯云服务器折扣券https://cloud.tencent.com/act/vouchers/list?fromSource=gwzcw.2477393.2477393.2477393&utm_medium=cpc&utm_id=gwzcw.2477393.2477393.2477393&cps_key=b0c7af9380d6324294316347ba2c8a49阿里云家最新活动信息

最新活动_阿里云最新活动,阿里云最全的优惠聚集地https://www.aliyun.com/activity?userCode=v6vhcyn8腾讯云家最新活动信息

腾讯云11.11大促_腾讯云11.11优惠活动-腾讯云腾讯云推出11.11智惠云集活动:爆品秒杀,企业专享优惠,低至1折起;企业抽奖活动,100%中奖;免费领取11000元代金券!https://cloud.tencent.com/act/double11?from=pre-2021double11&spread_hash_key=3d5d628c89ca2247f5f05604d3ae5c3a阿里云腾讯云所有优惠汇总,全都在这里了。

浅谈VPS云服务器(内含神秘大额专属特惠)_zhumengyisheng的博客-CSDN博客怎么做一个网站?都需要什么?要个服务器?要个域名?去哪里买?哪个好啊?有优惠吗?所有的优惠都在这里了,给自己建个网站吧,毕竟要学以致用啊!https://blog.csdn.net/zhumengyisheng/article/details/121391896       买上几个云服务器,你可以做做测试,看看它们之间怎么沟通,怎么通信,怎么分配,事情怎么处理,模拟模拟真实的场景,自然能极大的提升你处理高并发的能力。

      所以我们下一步需要的就是如何降低虚拟机的自耗?

      我们要的是尽可能的提升我们程序的处理能力,我们自然不愿意把过多宝贵的服务器资源浪费在系统本身耗费上,但是我们又要服务器本身的支撑处理能力,服务器成本太高,就算用虚拟机还是内耗太大了,因此我们想要更低的内耗,把有效的算力尽最大可能都用到程序处理本身上去。

       因此docker之流出现了,相对虚拟机而言,它更加的优秀,自耗更少,因此可以把算力最大可能的用在程序本身上。

       伴随着docker出现的技术叫分布式微服务技术,其实docker这东西这没什么不好理解的,你想一个公司的业务是很多的,同一个业务有各种各样的功能,一个大功能会包含很多个小功能,就像我们写函数一样,你得小啊,你不能写一个很大的函数,因为这个函数内部有很多东西可能是要复用的,这里要用那里也要调用,你这里用了,人家那里也要用,所以我们就分成了一个个很小的功能点,每一个功能点就是一个服务,这样的话,你哪里要用,你就来取嘛,如果你做的大了,那人家怎么取?所以得做小,所以叫微嘛,微服务。

       什么是微服务?微就是小的意思啊,就是一个个的小服务,不能太大啊,大了你就包含了很多个小功能,那里面的功能可不仅你这里用,其他地方也要用啊,所以不是就又重复了嘛,所以要小。

       上面我们看到了微服务的好处,它把一个事情分成了一个个很小的服务功能点。

       (一个)微服务是一块砖,哪里需要哪里搬。

       是的,微服务这种模式很优秀,它极大的解决了我们重复的问题,但是它同样有问题啊,微服务太小了,一个项目要好几百个小功能点,那就可能是好几百个微服务,这样的话维护起来就会很麻烦,原来的单体应用只需要维护一个,后来微服务优秀的解决了高并发,一个微服务会起很多个docker,这样的话项目的维护成本很高!

      现在服务太细了,维护又费劲,那怎么办呢?

       所以,互联网永远在造词,但是你不要被它骗了,它们都是特定需求下逼出来的产物,然后起了个名字。

       现在你知道了什么叫微服务,后来它们又来个新名词:中服务。

       你还没搞懂微服务,这中服务又是啥?

       其实很简单嘛,需求下的产物而已,我们知道微服务很小,维护起来困难,为了减少维护的困难,那么服务你就不能拆的太小,你得把同类相似的,经常一起调用的那些打包提供,对吧?很简单嘛!洗澡是个服务,游泳也是个服务,洗头也是个服务,它们都是一个个单独的服务,但是这三个服务往往是一起提供的对吧?你去游完泳,是不是得洗个澡?洗澡的时候是不是得洗个头?所以这三个一般都是一起出现的啊!那就把这三个打包一起提供,这个服务就是中服务。

       所以中服务根本就不是什么新鲜名词,无非就是不那么细的微服务,减少维护困难!

       永远要记住:技术从来都不会凭空产生,技术一定是在需求下产生的,技术是人创造的,那么它一定体现的就是人的思想,人写出来的东西,它怎么可能不是人的思想呢?

       如果你想学习更多的编程相关知识,可以看看我写的系列文章: 

       态度篇(这是我唯一希望你认知到的东西,你可以什么都忘了,但态度得端正。)

       为什么985高校还是在上C语言?这难道不是大学教育的失败?   为什么现在985高校还是上C语言课?_zhumengyisheng的博客-CSDN博客现在工作它们不都在找java、PHP、golang之类的吗?可是为什么985大学了居然还在教学生古老的C++啊?这不是误人子弟?这难道不是大学教育的失败?https://blog.csdn.net/zhumengyisheng/article/details/121391642

       计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了? 计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?_zhumengyisheng的博客-CSDN博客计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?为什么挤破头都抢不上的计算机专业,毕业工资那么高,分分钟年薪几十万,那他们为什么要转行呢?这里面到底有什么不为人知的秘密?到底是什么想不开让他们放弃了如此大好钱程前程?https://blog.csdn.net/zhumengyisheng/article/details/121391821

       学习篇

       编程语言第一课 入门 程序员的道与术

程序员的道与术_zhumengyisheng的博客-CSDN博客什么样的程序员才是好的程序员?程序开发学习到底是在学什么?你适合学习程序开发吗?编程语言众多,如果要学习我到底该学习哪一种?程序员的道与术,讲述那些不为你知的秘密https://blog.csdn.net/zhumengyisheng/article/details/121391210     编程语言第二课 晋级 不忘初心 方得始终 

不忘初心,方得始终_zhumengyisheng的博客-CSDN博客难道我们学习程序就是学一堆一堆的框架吗?难道学习程序就是学一堆一堆的套路?如果不是,那我们到底又该学什么?程序的本质又是什么?本文将给你答案https://blog.csdn.net/zhumengyisheng/article/details/121391458     编程语言第三课 深入 想法也疯狂,创造一门语言 

想法也疯狂--创造一门语言_zhumengyisheng的博客-CSDN博客开天辟地走一遭学了那么多语言,敢不敢挑战一次自己,创造一门语言?语言从来都不是天生的,它们都是人写出来的,既然别人能写,那你能不能写?如果要创造一门语言,那么到底该怎么创造?https://blog.csdn.net/zhumengyisheng/article/details/121391567

    我永远有句话送给你:

    教程从来都不是最重要的东西,最重要的是你的学习态度。

    认真学习,刻苦专研,严谨求知的态度,坐的了冷板凳,强大的肾功能,最后再乘以时间,后积才能薄发。从来都是:

    台上一分钟,台下十年功。

    哪个行业里那些拿高薪的人不是如此?没有人可以随随便便成功。

    感谢阅读,感谢关注支持我!愿你幸福,愿你追逐的所有梦想都实现!

这篇关于超实用,一文读懂高并发处理之道(务必收藏点赞转发哦)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627187

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之

java线程深度解析(四)——并发模型(Master-Worker)

http://blog.csdn.net/daybreak1209/article/details/51372929 二、Master-worker ——分而治之      Master-worker常用的并行模式之一,核心思想是由两个进程协作工作,master负责接收和分配任务,worker负责处理任务,并把处理结果返回给Master进程,由Master进行汇总,返回给客

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、