当前位置:首页 > 服务端 > 面试官:说下你在项目中是如何处理高并发的???

面试官:说下你在项目中是如何处理高并发的???

2022年11月09日 19:00:12服务端8

在最近的面试反馈中,不少小伙伴被问到,在项目中你是如何处理高并发的。针对高并发问题,我特意整理了企业高并发的成熟解决方法,希望小伙伴们被面试官问到了,可以和面试官聊一聊,也不至于场面一度尴尬。

 

什么是高并发呢?

多个进程或线程同时(或者说在同一段时间内)访问同一资源会产生并发问题。

 

面试官:说下你在项目中是如何处理高并发的??? _ JavaClub全栈架构师技术笔记

高并发原理图

初期解决方案

  1. 系统或服务器级别的解决方案

  1)增大服务器的CPU。

  2)增加内存条。

  3)增加硬盘个数,对硬盘做Raid5。

  4)换掉免费的Tomcat,使用商用weblogic(美国Oracle公司出品的) 

  5)增加到二块网卡。

  6)聘请系统架构师优化Linux内核

  7)甚至花高价直接购买高性能服务器

随着业务的不断增加,服务器性能很快又到达瓶颈

 

  2.应用级别的解决方案

  1)网页HTML 静态化(需要CMS项目支持)

  2)图片服务器分离(常用解决方案)

  3)缓存(常用解决方案) 上上策为分布式缓存

  4)镜像(下载较多)

随着业务的不断增加,服务器性能很快又到达瓶颈

 

 能否增加服务器数量?

 解决办法:增加App服务器

 

面试官:说下你在项目中是如何处理高并发的??? _ JavaClub全栈架构师技术笔记

 

随之出现更多问题

问题1;用户访问IP多了,怎么解决?

问题2:数据库出现瓶颈 怎么办?

 

由上面的问题引出终极解决方案—— 负载均衡

 

由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。 

 

  针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。

 

面试官:说下你在项目中是如何处理高并发的??? _ JavaClub全栈架构师技术笔记

负载均衡原理图

 

负载均衡的功能:

  • 转发请求

  • 故障移除

  • 恢复添加

 

负载均衡种类

  1)一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的

   2)一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略

 

负载均衡——软件解决方案

主流软件:

1.apache+jk

2.nginx

3.lvs+keepalived

 

什么是Apache+JK?

   Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件

   JK是apache提供的一款为解决大量请求而分流处理的开源插件

 

什么是nginx?

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·西索夫)所开发,供俄国大型的入口网站及搜索引擎Rambler(漫步者)(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。

优点:

1:可运行linux,并有 Windows 移植版。

2:在高连接并发的情况下,Nginx是Apache服务器不错的替代品Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。

 

什么是LVS?

LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内核2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

 

为什么选择LVS? 优势

1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和 cpu方面基本无消耗。

 2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

 3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

 4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

 5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

 

LVS 对比 Nginx

  1. 负载度 LVS KO Nginx

  2. 功能多少 Nginx KO LVS

  3. 稳定度 LVS KO Nginx

  4. 服务器性能要求 LVS KO Nginx

 

效率最高的负载均衡技术

调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的

 

LVS中提供了八种不同的调度算法

1轮叫调度(Round-Robin Scheduling)

2 加权轮叫调度(Weighted Round-Robin Scheduling)

3最小连接调度(Least-Connection Scheduling)

4加权最小连接调度(Weighted Least-Connection Scheduling)

5基于局部性的最少链接(Locality-Based Least Connections  Scheduling)

6带复制的基于局部性最少链接(Locality-Based Least  Connections with Replication Scheduling)

7目标地址散列调度(Destination Hashing Scheduling)

8源地址散列调度(Source Hashing Scheduling)

9最短预期延时调度(Shortest Expected Delay Scheduling)

10不排队调度(Never Queue Scheduling)

对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

 

上述是从访问人数过多时引起的高并发解决方案,接下来我来讨论数据库高并发的解决方案

 

大数据量

场景:我说的大数据量处理是指同时需要对数据进行检索查询,同时有高并发的增删改操作。

 

大数据的处理:例如腾讯,盛大,动辄数以亿计的帐号,怎么能这么快呢, 于是找到了互联网现在对数据处理的发展。

 

对于大数据量处理,如果是互联网处理的话,一般分为下面阶段

第一阶段,所有数据都装入一个数据库,当数据量大了肯定就会出现问题,就像刚刚说的查询,于是想办法

第二阶段,那时肯定想做缓存机制,确实可以,如加上缓存Memcached,但缓存也是治标不治本,数据量太大了也是不行,于是

第三阶段,master-slave模式,进行主从数据库,master提供写,slave进行读,这个适合于有写造成数据库卡的方法,还是不行,于是

第四阶段,垂直分库,这个意义还是不大,于是

第五阶段,进行水平分库,这个不错,记得以前从兴也是按这个分时间水平分库,其实可以分的更细点估计效果更好

 

那么数据库出现瓶颈怎么办呢?

以Mysql为例:

  • 对Mysql进行优化(重点讲解)

  • 缓存,主流缓存Memcached,redis…

  • mysql读写分离 + 主从复制

  • Oracle

  • Oracle读写分离 + 主从复制

  • Oracle Partition 分区

  • Oracle RAC集群(终级解决方案)此方案:非常贵,即使是淘宝,京东这样的大公司,也是很难受的。

解决方案有:MySql 主从复制与读写分离

MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践

Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。

因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。

面试官:说下你在项目中是如何处理高并发的??? _ JavaClub全栈架构师技术笔记

读写原理架构图

作者:IT枫斗者
来源链接:https://blog.csdn.net/Andrew_Chenwq/article/details/117854279

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/69126.html

标签: 高并发面试
分享给朋友:

“面试官:说下你在项目中是如何处理高并发的???” 的相关文章

并发编程|说完AQS,面试官为何不淡定了?

并发编程|说完AQS,面试官为何不淡定了?

你能说下什么是AQS AQS是队列同步器AbstractQueueSynchronizer的简写,它是用来构建锁和其他同步组件的基础框架,它定义了一个全局的int 型的state变量,通过内置的FIFO(先进先出)队列来完成资源竞...

JAVA面试精选【Java基础第一部分】

  这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱。只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了。对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中...

面试官问:为什么你们项目要用消息队列?

面试官问:为什么你们项目要用消息队列?

同学们应该都会被问到过这个问题:你的系统为什么要用消息队列? 大家普遍回答:我入职前,系统里面就已经用了消息队列啊,然后就用了。 其实面试官就是想看看你有没有深入了解过消息队列,有没有认真思考过消息队列解决了哪些问题? ​ 这篇文章主要带大家解决以...

近期安卓与IOS招聘面试有感

版权声明:本文出自汪磊的博客,转载请务必注明出处。 一、你总是想一步登天,却不知道路是一步步走出来的 大概是放年假前一个月开始招聘吧,陆陆续续到目前为止安卓面试10几个,IOS面试了15个左右,本以为很好招聘的,没想到没有一个合适的,要求本不高只想基础扎实一些,但是就这一条...

最强面试题整理第三弹:Python 后台开发面试题(附答案)

最强面试题整理第三弹:Python 后台开发面试题(附答案)

大家好呀,我是 Rocky0429。 Python 面试的时候,会涉及到很多的八股文,我结合自己的经验,整理Python 最强面试题。 Python 最强面试题主要包括以下几方面: Python 基础(已完成) Pytho...

互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?

互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?

引自:“ 石杉的架构笔记”公众号 (1)背景引入   今天跟大家聊一个互联网大厂的Java面试题:使用无界队列的线程池会导致内存飙升吗?   因为在面互联网大厂的时候,一定会问并发,问并发的时候一定会问到线程池,问到线程池一定...

Python面试题总结

谈谈你对Python的理解 Python是一门解释型语言,它就相当于找了个翻译,你说一句话它给计算机翻译一句话;Python也是一门动态类型语言,在声明变量的时候不需要指定数据类型Python还支持多继承(其他语言不支持)Python语言语法简洁、代码编写快但是运行速度比其他语言...

go面试题[3]

第一题 1.下面的两个切片声明中有什么区别?哪个更可取? A. var a []int B. a := []int{} 参考答案及解析:A 声明的是 nil 切片;B 声明的是长度和容量都为 0 的空切片。第一种切片声明不会分配内存,优先选择。 2. A、B、C...

Python 中删除列表元素的三种方法

列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的。 那到底有哪些方法可以删除列表中的元素呢?这篇文章就来总结一下。 一共有三种方法,分别是 remove,pop 和 del,下面来详细说明。 remove L.remov...

python基础面试题

面试题 面试题---python面试题 阅读目录 一、 【第一部分】 1.为什么学习python 2.通过什么途径学习python 3.公司上线和开发环境 4.python和其它语言对比 5.简述编译型和解释型语言 6.Python...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。