面试题:Nginx负载均衡的算法怎么实现的?为什么要做动静分离?
面试题
Nginx负载均衡的算法怎么实现的?Nginx 有哪些负载均衡策略?Nginx为什么要做动静分离?
面试官心理剖析
主要是看应聘人员对Nginx的基本原理是否熟悉,需要应聘人员能够根据实际业务场景选择合适的负载均衡(转发)策略。其次,在网站建设上,了解 Nginx 的优劣势,能够找到弥补其不足的方法,使得企业的业务达到***访问状态。
问题剖析
1. Nginx负载均衡的算法怎么实现的?策略有哪些?
负载均衡是 Nginx常用的一个功能,当一台服务器在单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。
为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。
Nginx负载均衡实现的策略有以下五种:
(1) 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
- upstream backserver {
- server 192.168.0.12;
- server 192.168.0.13;
- }
(2) 权重 weight
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
- upstream backserver {
- server 192.168.0.12 weight=2;
- server 192.168.0.13 weight=8;
- }
权重越高,在被访问的概率越大,如上例,分别是20%,80%。
(3) ip_hash( IP绑定)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
- upstream backserver {
- ip_hash;
- server 192.168.0.12:88;
- server 192.168.0.13:80;
- }
(4) fair(第三方插件)
必须安装upstream_fair模块。
对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
- upstream backserver {
- server server1;
- server server2;
- fair;
- }
哪个服务器的响应速度快,就将请求分配到那个服务器上。
(5) url_hash(第三方插件)
必须安装Nginx的hash软件包
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
- upstream backserver {
- server squid1:3128;
- server squid2:3128;
- hash $request_uri;
- hash_method crc32;
- }
2. 为什么要做动静分离?
Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
让静态的资源只走静态资源服务器,动态的走动态的服务器
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
- 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
- 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。