曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”
下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算如果出现不严谨都可能导致全盘崩溃 。
上面提到web性能优化需要多个角度去考虑,我们无法考虑到所有的优化细节,但可以从我们已知的层面去优化,我们就先从网络层面说起 。
①网络请求路径:
(客户端输入URL定位符)→(DNS服务器寻找映射)→(进入服务器,处理数据)→(返回数据至客户端)在这个用例中我们可以很清晰的看出网络请求到返回的过程,虽然非常抽象,但足够我们以他为基础来进行优化了 。
1)负载均衡
BOSS一次给了小明好多项任务,小明发现怎么安排时间也做不完,于是乎他盯上了在旁边偷偷看电影的小强,小强突然觉得背后有一股凉气,一回头小明一脸坏笑看着他在计算机上负载均衡也类似如此,我们的大BOSS客户端将请求发送至服务器,然而一台服务器是无法承受很高的并发量的,我们就会将请求转发到其他服务器 。
“这几个任务交给你,晚上请你吃饭,要不然…嘿嘿嘿”,小强虽然不情愿,但是在小明的请求(要挟)下,只能服从 。
第二天,小明顺利的完成了任务,给小强买了袋辣条 。
当然真正的负载均衡架构并不是由一台server转发的另一台server,而在客户端与服务器端中间加入了一个负责分配请求的负载均衡硬件(软件) 。
DNS
名词:DNS是客户端发送请求中一个非常重要的中转,他的作用是将用户请求的URL映射为具体的IP地址,全世界有13台根服务器,但通常为我们进行域名解析的并不是根服务器,而是直接访问我们的 LDNS(Local DNS Server),通常由网络运营商维护 。最早的负载均衡就是利用搭建本地DNS服务器实现的,实现方式简单易懂,为同一个主机名分配多个映射 ,可采用轮循,随机等方式分配请求 。
看上去没什么问题,但是在使用过程中会发现,如果其中一个地址down机,我们是无法及时发现的,如果有用户被分配到这个主机就会出现访问失败的状况,同时我们也无法判断每个server的负载,可能会出现,某个server几乎闲置,另外一个server负载压力极高的情况 。
文章插图
硬件设备
名词:负载均衡器(Load Balancer),负载均衡器通常作为独立的硬件置于客户端与服务器之间 。负载均衡设备拥有非常好的负载均衡性能,他拥有众多的负载均衡策略(权重,动态比率,最快模式,最小连接数等),可以保证以相对较优的方式分配请求 。
不过好的东西总是有代价的,那就是价格,一台负载均衡器的售价往往高达十几万甚至几十万,许多企业并不愿意为它买单 。
反向代理
名词:Nginx 。高性能,轻量级,已经成了人们对Nginx的第一印象,Nginx可作为HTTP服务器,在处理高并发请求的时候拥有比现在主流的Apache服务器更高的性能,同时Nginx也是一个优秀的反向代理服务器 。第一次听到“反向代理”,可能有些陌生,但如果了解与之对应的正向代理就很好理解了,正向代理通常由客户端主动链接,比如我们的科学的上网方式就是使用正向代理,以达到间接访问网站的目 。
而反向代理在服务器端,无需主动链接,当我们访问拥有反向代理的网站时,实际访问的是其反向代理服务器,而非真正的服务器,当请求到达反向代理服务器时,反向代理服务器再将请求转发至服务器 。
反向代理是实现负载均衡的主流手段之一,通常使用Nginx等服务器搭建,Nginx同样拥有众多的分配策略,以保证平均分配压力 。
文章插图
Nginx反向代理:
文章插图
BIGIP(硬件)负载均衡:
文章插图
2)CDN视频总在缓冲,图片各种加载不出来,几年前是再正常不过的事了,在当时大家也没觉得是回事,但把这种情况放在现在,我想人们绝对直接就小红叉了吧,那么我们如何避免这样的情况呢?这就是我要说的,内容分发网络(Content Delivery Network),简称:CDN 。
推荐阅读
- 教你跳过网页禁止粘贴&复制的限制
- 你的Windows10总是显示"更新并关机"?跟我学,让你彻底将它关闭
- 黑客教程——Padding Oracle Attack&CBC字节翻转攻击详解
- 基于LAMP环境搭建论坛
- Nginx负载均衡之upstream、server、location参数配置
- 怎么提升Linux性能,看完这篇文章,彻底掌握"平均负载"
- 2万字长文带你细细盘点五种负载均衡策略
- 记一次CPU使用率低负载高的排查过程
- ICMP ARP协议 TCP&UDP协议相关介绍,两分钟快速掌握
- 科技科普|吃一口它可能吃掉6000条寄生虫!水边这一"粉花"也别碰