1.系统扩展方向
场景:并发流量激增
垂直扩展:
提升单机硬件配置:cpu、内存、网卡、硬盘
问题:摩尔定律,每隔18~24月,集成电路上可容纳元器件数目增加一倍,性能也将提升一倍,摩尔定律已经放缓。单机扩展性能有限,且成本会越来越高。
水平扩展
在系统能支持水平扩展的前提下,增加服务器数量,部署更多机器集群,能够带来无限的性能提升。
网络分发:网络负载均衡器
F5、LVS、Nginx、CDN
2.无限水平扩展
2.1负载均衡器-Nginx
反向代理
stable version 稳定版本
Nginx一般做到10万并发,常用调优手法:
Nginx参数: 进程与CPU绑定worker_cpu_affinity(线程无需切换)、并发连接数、缓存区、超时时间、压缩、日志
worker_connections 并发连接数
接口响应时间:50ms 要求高 100ms 1s
操作系统网络参数:
能打开的最大文件数: net.ipv4.tcp_keepalive_time
ulimit -a 命令查看 open_files
too many file
tcp 缓冲区 /proc/sys/net/ipv4/tcp_mem、rmem、wmem
为什么一般做到10w并发,不继续做优化?
Nginx通常用作HTTP反向代理的场景,在网络模型中,HTTP属于第七层应用层协议。http请求的处理包括解析和封装http内容,要处理更多请求,需要更多的内存、CPU等等资源。高配置的硬件价格很高,通常组成Nginx集群来获取更高的处理能力。
Nginx单机扛不住
使用nginx集群
2.2负载均衡器-LVS
Nginx集群使用LVS做分发
核心理念:原本是请求LVS服务器的数据包,被lvs软件篡改了数据包的目的地,将流量转移到了Nginx所在的机器IP,从而实现负载均衡。
LVS+keepalived 高可用、双机热备
2.3nginx的比较
LVS性能比Nginx强,能支持更高的并发量,lvs的功能没有nginx强大。
lvs比nginx快原因:网络第四层所使用的协议(如tcp)内容比http简单,解析和组装消耗的CPU、内存等资源比nginx低
2.4硬件设备,F5
华为、思科、浪潮、F5
LVS集群,使用F5做负载均衡
2.5服务端上限
Nginx支持 1w~10w并发
LVS支持10w~50w并发
F5支持200w~1000w并发
2.6 DNS-无限水平扩展的终极奥秘
DNS域名系统,Domain Name System 万维网上作为域名和ip地址相互映射的一个分布式数据库,服务商提供的域名解析功能,同一个域名多个IP
DNS + Nginx + java (比较多)
F5 + java
F5 + Nginx + java
3.常用架构图
(Nginx支持 1w~10w并发
LVS支持10w~50w并发
F5支持200w~1000w并发)
F5: 专业硬件实现
LVS:工作在网络四层,服务器内核集成
Nginx:工作在网络七层,软件实现