前端node高并发负载均衡策略-网易云课堂听课笔记
并发与负载均衡
一般来说,中高级前端可能会问到:有没有处理过高并发问题:访问量高,同时在线,同时访问。
负载均衡:把流量分摊到不同的机器上去用以平衡流量。
高级前端还需要掌握redis..等,不直接对接数据库,通过redis缓存。
系统扩展方向
例子: 双十一高峰期,并发量,系统流量不断扩大。
垂直扩展
随着系统访问量增大,系统处理不了这么大的流量,那么可以通过提高系统部件的能力来实现。
比如:增加CPU,增加内存,更换网卡垂直扩展的缺点:
由于摩尔定律,每一美元能买到的电脑性能随时间不断翻倍。单机扩展性能提高是有限的,并且==成本会不断的提高。==
水平扩展
目前高并发高可用的系统架构中,最优的方案是==水平扩展==。
理论上,在系统能支持水平扩展的前提下,增加服务器数量,部署更多的系统集群,能够带来无限的系统提升。
如何将网络请求分布给多个机器去处理?
负载均衡-Nginx
nginx:高性能的web服务器和反向代理服务,最常用的软件负载均衡器。
核心概念: 用户请求先到nginx,再由nginx转发请求到后边的应用服务器(如node..)
nginx配置
1 | upstream xx{ |
nginx调优
Nginx一般能做到十万并发,常用的调优手法:
- Nginx参数:
进程与CPU绑定worker_cpu_affinity、并发连接数、缓存区、超时时间、压缩、日志 - 操作系统的网络参数:
能打开的最大文件数、net.ipv4.tcp_keepalive_time、tcp缓冲区/proc/sys/net/ipv4/tcp_mem、rmem、wmem设置操作系统网络参数的原因:tcp请求先到达操作系统,然后转发到nginx。操作系统内有tcp缓存区,当网络连接过多的时候,显然多出来的溢出缓存的tcp连接就会造成阻塞。nginx可以支持10w并发,因此可以设置操作系统tcp缓冲区的大小,使得缓冲区可以存有更多的数据,减缓阻塞。
- 为什么只能支持10w并发?
nginx通常用在http反向代理的场景,属于网络模型第7层应用层的协议。
http请求的处理包括解析和封装http内容,要处理更多请求,需要更多内存和cpu资源。
所以,nginx需要处理解析和封装http内容,因此nginx运行也受到系统性能的限制。(又回到了垂直扩展的问题)
高配置硬件太贵,通常会组成集群来获取更高的处理能力。
Nginx集群
单台Nginx处理能力在10w左右,也就是说它也是有限的,可以通过集群的方式,来获得更高的处理能力。那么谁来将请求分发给Nginx?
LVS
Linux Virtual Server,Linux虚拟服务器,是基于第四层,也就是传输层的软件负载解决方案。
- 核心理念:原本请求LVS服务器的数据包,被LVS软件篡改了数据包的目的地,将流量转移到Nginx所在的机器IP,从而实现负载均衡。
- 为什么LVS比Nginx快?
传输层所使用的协议比http简单,解析和组装消耗的CPU内存等资源比Nginx低。
如何支持更多的访问?
硬件设备,例如F5。
专门的硬件设备。一台F5连接着很多LVS服务器,一个LVS服务器又连接着很多Nginx服务器。
最终的技术:DNS-无限水平扩展
一个域名可以对应多个ip。
总结
- 技术随业务发展而变化
- 技术选型上,不仅要考虑技术本身,还需要考虑团队能力
- 行业变化快,需要不断学习技术拓宽视野