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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 面试官:说下你在项目中是如何处理高并发的???

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



什么是高并发呢?


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


image.png

高并发原理图


初期解决方案


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


 1)增大服务器的CPU。


 2)增加内存条。


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


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


 5)增加到二块网卡。


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


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


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



 2.应用级别的解决方案


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


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


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


 4)镜像(下载较多)


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



能否增加服务器数量?


解决办法:增加App服务器


image.png

image.png

随之出现更多问题


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


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



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



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



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


image.png

image.png

负载均衡原理图



负载均衡的功能:


转发请求


故障移除


恢复添加



负载均衡种类


 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


负载度 LVS KO Nginx


功能多少 Nginx KO LVS


稳定度 LVS KO Nginx


服务器性能要求 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)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。


image.pngimage.png

image.png

读写原理架构图


image.png

image.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
3月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
104 6
面试官:项目中如何实现分布式锁?
|
2月前
|
缓存 算法 架构师
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
资深架构师尼恩在其读者交流群中分享了关于分布式ID系统的设计与实现,特别是针对高并发场景下的解决方案。他强调了分布式ID系统在高并发核心组件中的重要性,并详细介绍了百度的UidGenerator,这是一个基于Snowflake算法改进的Java实现,旨在解决分布式系统中的唯一ID生成问题。UidGenerator通过自定义workerId位数和初始化策略,支持虚拟化环境下的实例自动重启和漂移,其单机QPS可达600万。此外尼恩的技术分享不仅有助于提升面试表现,还能帮助开发者在实际项目中应对高并发挑战。
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
|
2月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
46 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
|
2月前
|
前端开发 Java 关系型数据库
【保姆级SSM教程】高并发朋友圈点赞项目设计
【保姆级SSM教程】高并发朋友圈点赞项目设计
47 0
|
4月前
|
JavaScript 安全 前端开发
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
这篇文章介绍了Vue项目中解决跨域问题的方法,包括使用CORS设置HTTP头、通过Proxy代理服务器进行请求转发,以及在vue.config.js中配置代理对象的策略。
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
|
4月前
|
JavaScript 前端开发 API
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
这篇文章讨论了Vue项目中错误的处理方式,包括后端接口错误和代码逻辑错误的处理策略。文章详细介绍了如何使用axios的拦截器处理后端接口错误,以及Vue提供的全局错误处理函数`errorHandler`和生命周期钩子`errorCaptured`来处理代码中的逻辑错误。此外,还分析了Vue错误处理的源码,解释了`handleError`、`globalHandleError`、`invokeWithErrorHandling`和`logError`函数的作用和处理流程。
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
|
4月前
|
JSON JavaScript 前端开发
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
这篇文章讨论了在Vue项目中封装axios的最佳实践,包括设置接口请求前缀、请求头、状态码、请求方法的封装,以及如何使用请求和响应拦截器来处理token和响应状态,从而简化HTTP请求的配置和错误处理,提高代码的可维护性。
【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
|
4月前
|
缓存 NoSQL 物联网
这些年背过的面试题——个人项目篇
本文是技术人面试系列个人项目篇,作者总结了一些自己的实战项目经验,一文带你详细了解,欢迎收藏!
|
4月前
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
72 5