简述负载均衡&CDN技术

  曾经见到知乎上有人问“为何像facebook这类的网站须要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统须要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算若是出现不严谨均可能致使全盘崩溃。php

  上面提到web性能优化须要多个角度去考虑,咱们没法考虑到全部的优化细节,但能够从咱们已知的层面去优化,咱们就先从网络层面提及。css

 

①网络请求路径:html

------------------------------------------------------------------------------------------------------------------------|web

(客户端输入URL定位符)→(DNS服务器寻找映射)→(进入服务器,处理数据)→(返回数据至客户端)   
缓存

 

在这个用例中咱们能够很清晰的看出网络请求到返回的过程,虽然很是抽象,但足够咱们以他为基础来进行优化了。
性能优化

------------------------------------------------------------------------------------------------------------------------|服务器

 

1)负载均衡网络

 

  BOSS一次给了小明好多项任务,小明发现怎么安排时间也作不完,因而乎他盯上了在旁边偷偷看电影的小强,小强忽然以为背后有一股凉气,一回头小明一脸坏笑看着他,“这几个任务交给你,晚上请你吃饭,要否则...嘿嘿嘿”,小强虽然不情愿,可是在小明的请求(要挟)下,只能服从。次日,小明顺利的完成了任务,给小强买了袋辣条。
架构

  在计算机上负载均衡也相似如此,咱们的大BOSS客户端将请求发送至服务器,然而一台服务器是没法承受很高的并发量的,咱们就会将请求转发到其余服务器,固然真正的负载均衡架构并非由一台server转发的另外一台server,而在客户端与服务器端中间加入了一个负责分配请求的负载均衡硬件(软件)。并发

DNS

  名词:DNS是客户端发送请求中一个很是重要的中转,他的做用是将用户请求的URL映射为具体的IP地址,全世界有13台根服务器,但一般为咱们进行域名解析的并非根服务器,而是直接访问咱们的 LDNS(Local DNS Server),一般由网络运营商维护。

  最先的负载均衡就是利用搭建本地DNS服务器实现的,实现方式简单易懂,为同一个主机名分配多个映射 ,可采用轮循,随机等方式分配请求。看上去没什么问题,可是在使用过程当中会发现,若是其中一个地址down机,咱们是没法及时发现的,若是有用户被分配到这个主机就会出现访问失败的情况,同时咱们也没法判断每一个server的负载,可能会出现,某个server几乎闲置,另一个server负载压力极高的状况。

                                       ↗(进入服务器1,处理数据)↘

(客户端输入URL定位符)→(DNS服务器寻找映射)→(DNS分配请求)                  (返回数据至客户端)   

                                        ↘(进入服务器2,处理数据)↗

硬件设备

  名词:负载均衡器(Load Balancer),负载均衡器一般做为独立的硬件置于客户端与服务器之间。

  负载均衡设备拥有很是好的负载均衡性能,他拥有众多的负载均衡策略(权重,动态比率,最快模式,最小链接数等),能够保证以相对较优的方式分配请求,不过好的东西老是有代价的,那就是价格,一台负载均衡器的售价每每高达十几万甚至几十万,许多企业并不肯意为它买单。

反向代理

  名词:Nginx。高性能,轻量级,已经成了人们对Nginx的第一印象,Nginx可做为HTTP服务器,在处理高并发请求的时候拥有比如今主流的Apache服务器更高的性能,同时Nginx也是一个优秀的反向代理服务器。

  第一次听到“反向代理”,可能有些陌生,但若是了解与之对应的正向代理就很好理解了,正向代理一般由客户端主动连接,好比咱们的***方式就是使用正向代理,以达到间接访问网站的目的,而反向代理在服务器端,无需主动连接,当咱们访问拥有反向代理的网站时,实际访问的是其反向代理服务器,而非真正的服务器,当请求到达反向代理服务器时,反向代理服务器再将请求转发至服务器。反向代理是实现负载均衡的主流手段之一,一般使用Nginx等服务器搭建,Nginx一样拥有众多的分配策略,以保证平均分配压力。

 

                                       ↗(进入服务器1,处理数据)↘

(客户端输入URL定位符)→(DNS服务器寻找映射)→(反向代理服务器)                     (返回数据至客户端)   

                                                                           ↘(进入服务器2,处理数据)↗

 

Nginx反向代理:                    BIGIP(硬件)负载均衡:

     

 

 

2)CDN

  视频总在缓冲,图片各类加载不出来,几年前是再正常不过的事了,在当时你们也没以为是回事,但把这种状况放在如今,我想人们绝对直接就小红叉了吧,那么咱们如何避免这样的状况呢?这就是我要说的,内容分发网络(Content Delivery Network),简称:CDN。

  CDN简单的来讲就是存储一些静态文件的一台或多台服务器,经过复制,缓存等方式,将文件保存其中。

  1.哪些是静态文件?

    css,html,图片,媒体都属于静态文件,也就是说用户发送的请求不会影响静态文件的内容,而jsp,php等文件就不属于静态文件,由于他们的内容会因咱们的请求而发生改变。

  2.CDN如何实现加速?

     一般状况下,咱们所要的数据都是从主服务器中获取,但假如咱们的主服务器在南方,而访问用户在北方,那么访问速度就会相对变慢,变慢的缘由有不少,例如传输距离,运营商,带宽等等因素,而使用CDN技术的话,咱们会将CDN节点分布在各地,当用户发送请求到达服务器时,服务器会根据用户的区域信息,为用户分配最近的CDN服务器。

 

  3.CDN数据从哪里来?

  复制,缓存,CDN服务器能够在用户请求后缓存文件,也能够主动抓取主服务器内容。

 

  分布在各地的CDNS:

  

相关文章
相关标签/搜索