面试官最常用小心思:说说你的项目并发量多大?负载均衡怎么做?
在开始今天的文章之前,先抛一个面试题出来:
你接触过的单机最大并发数是多少?
你认为当前正常配置的服务器物理机最大并发数可以到多少?
说说你的理解和分析。
如果你能很好地在心里总结一下答案,那您可以好好地享受您的周末了,就不占用您太多时间了
如果你稍微的有点迷茫,不知道怎么回答,那占用您几分钟的时间看一下下面的内容,因为这个问题可扩展性挺大哦
理想情况
理想情况下,并发量简单来说就是看源IP和源Port数量,针对单机来说,可能这个数值真的不大,但是如果你真的这么想了的话,那你可能要回炉重造了或者你没接触过实际的生产环境**。**
分析一下,前面的我说的是针对单个服务器或者客户端的,但是实际上每个服务器会应对全网的所有客户端,那么从服务端看,源IP和源Port的数量是非常大的。
理论上服务端可以接受的客户端IP是232(按照IPv4计算),端口数是216,这么看是真的挺大的,好像用起来可供选择的也不少,但是,开头也说了,这是理想情况呀
实际情况
天下没有免费的午餐。
每一条连接都是要消耗系统资源的,所以这个理论最大并发数是不可能达到的,在日常的开发过程中,我们一般会设置一个最大并发数来控制。
实际中并发数和业务是直接相关的,像Redis这种内存型的服务端并发十几万都是没问题的,大部分来讲几十/几百/几千/几万等是存在的。
客户端最大连接数
理解了服务器的最大并发数是2^48,那么客户端最多可以连接多少服务器这个问题该怎么回答呢?
对于客户端来说,当然可以借助于多网卡多IP来增加连接能力,我们仍然假定客户端只有1张网卡1个IP,由于端口数的限制到2^16,再去掉系统占用的端口,剩下可用的差不多64000。
也就是说,客户端的理论最大连接数是2^16,含系统占用端口。
NAT环境下的客户端
解决前面的两个问题之后,来看另外一个问题:
一个公网出口NAT服务设备最多可同时支持多少内网IP并发访问外网服务?
毕竟公网IP都是有限并且要花钱的,我们大部分机器都是在局域网中结合NAT来进行外网访问的,所以这个场景还是很熟悉的。
来看下内网机器访问外网时的IP&端口替换和映射还原的过程,就明白了:
因为这时的客户端是NAT设备,所以NAT环境下最多支持65535个并发访问外网。
怎么样,看完上面的内容不知道大家对于刚开始的几道问题的回答是否清楚了呢?但是,我也说了,这道题有点意思,并发量的增大,对应的就是解决方案,这里因为篇幅原因,也没有办法讲解太多,就说一个最常用的吧——Nginx
Nginx负载均衡、限流、缓存、黑白名单
一、静态代理
Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。
二、负载均衡
Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。常用的负载均衡策略有,
1、轮询
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
2、加权轮询
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
3、ip_hash(源地址哈希法)
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
4、随机
通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
5、least_conn(最小连接数法)
由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
三、限流
Nginx的限流模块,是基于漏洞算法实现的,在高并发的场景下非常实用。
1、配置参数
1)limit_req_zone定义在http块中,$binary_remote_addr 表示保存客户端IP地址的二进制形式。
2)Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
3)Rate定义最大请求速率。示例中速率不能超过每秒100个请求。
2、设置限流
burst排队大小,nodelay不限制单个请求间的时间。
四、缓存
1、浏览器缓存,静态资源缓存用expire。
2、代理层缓存
五、黑白名单
1、不限流白名单
2、黑名单
上面就是nginx几个常用功能,动静分离、负载均衡、限流、缓存、黑白名单等,你都了解了吗,不了解的话还可以关注我等待后续更新nginx深入知识哦(没办法,我试过,因为篇幅原因,附完整得知识讲解,太多了,不好意思各位,看我下次分享)。
个人公众号:Java架构师联盟,每日更新技术好文
面试官最常用小心思:说说你的项目并发量多大?负载均衡怎么做?相关推荐
- IT人面试秘籍:面试官背后的小心思都在这儿
又是一年的毕业季,大批人才将迈出象牙塔:拿完年终奖的职场老鸟们,也在考虑着跳槽到新的公司:一年中最激烈的求职战,开启了. 某大厂资深HR总结出这样一个公式--offer=心态×(实力+面试技巧)+运气 ...
- 企业级小架构设计部署实现-docker变种(一)负载均衡网站
企业级小架构设计部署实现 企业级小架构设计部署实现-docker变种(一)负载均衡网站 企业级小架构设计部署实现-docker变种(二)日志系统 Elastic 企业级小架构设计部署实现-二- Ans ...
- 作为面试官的一点小感想
这两天公司要招大数据开发的人,让我去面试这些应聘者,几天下来面试的人也有10多个人了,这其中有应届生.刚工作不久的以及有一定年限的,学历有本科和研究生等.通过和这些人交谈后,心里也有一点小感触和小想法 ...
- 看完吊打面试官!微信小程序趋势及前景,复习指南
这篇文章主要介绍了20道经典Handler题及答案解析,文中通过示例代码介绍的非常详细,对大家的学习或者面试复习具有一定的参考学习价值,内容过多可以先收藏慢慢观看,需要的朋友们下面随着小编来一起学习学 ...
- 阿里P8面试官:如何设计一个扛住千万级并发的架构(超级详细)
如何降低RT的值 继续看上面这个图,一个请求只有等到tomcat容器中的应用执行完成才能返回,而请求在执行过程中会做什么事情呢? 查询数据库 访问磁盘数据 进行内存运算 调用远程服务 这些操作每一个步 ...
- 面试官:为什么单线程的Redis可以实现高并发访问
背景 上回说到小枫在接受面试官的拷打,所幸第一个问题回答的还不错,因此面试官对于小枫的初步印象还行.我们接着来看看小枫是怎么和面试官继续过招的吧,他还能扛得住面试官几个连环炮呢? 面试官考察目的分析 ...
- 面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...
- 面试官:支撑日活百万用户的高并发系统,应该如何设计其数据库架构?
点击上方"蓝字", 右上角选择"设为星标" 周一至周五早11点半!精品文章准时送上! 本文转载自公众号:石杉的架构笔记 目录: ...
- 面试官:介绍一下你简历中的项目,细讲一点,附项目实战
最近很多朋友跟我说目前学得差不多了,就是简历中项目不好写.也不知道面试官会问关于项目的哪些问题,心里没底. 这里我可以放心大胆的告诉你:不要慌,都会问,你不会的八成会问! 所以你要对你简历中所呈现的项 ...
最新文章
- 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程
- Linux进程的创建和父子进程同步,操作系统实验报告_Linux进程创建与通信.doc
- 作为我的第一篇csdn博客吧
- python编译成exe有意义吗_python工程编译成EXE
- ajax的模式_AJAX的完整形式是什么?
- Docker的思想来自于集装箱
- ensp配置access口_eNSP初学者配置以太网2种链路端口:access、trunk
- nginx部署前端代码
- android下载https文件,如何通过ssl(https)在android上下载文件
- 爬虫python创意_最经典的Python爬虫(图片)案例
- 基于Zigbee的智能家居系统
- android如何设置qq邮箱格式,邮件客户端和手机设置QQ邮箱IMAP服务
- 【MySQL】--架构简介
- 浏览器提示代理服务器出现问题,或则地址有误
- 高斯消元法与LU分解
- Win7关闭防火墙的脚本
- Converged System 一体机趋势不可挡 - IBM PureSystem与SAP
- 巴黎时装周儿童单元深圳站代言人伊朵,精彩演绎儿童时装
- 大话世界格局:春秋五霸与战国七雄
- 数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)