NGINX的负载均衡

大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务6中,NGINX的负载均衡



一、背景介绍

什么是ngnix

Nginx是一个http服务器。是一个使用c语言开发的高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师IgorSysoev所开发,官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

我们主要用nginx来做什么

1、反向代理

2、负载均衡

3、动静分离

1、反向代理:反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。

2、动静分离:运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻应用服务器的压力

3、负载均衡:负载均衡也是 Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

总而言之:负载均衡不论是各种软件或硬件上的解决方案,主要还是将大量的并发请求按照一定的规律分发给不同的服务器处理,从而减少某台服务器的瞬时压力,提高网站的抗并发能力。nginx在负载均衡的应用之所以广泛,我认为这归功于它的灵活配置,一个nginx.conf文件解决大部分问题,不论是nignx创建虚拟服务器、nginx的反向代理服务器,还是nginx的负载均衡,几乎都在这个配置文件中进行。服务器上只负责把nginx搭好,跑起来即可。而且它本身轻量级,不需要占用服务器太多资源就可以达到较好的效果,是一个非常值得推崇的网页服务器。



二、知识剖析

1、nginx负载均衡是如何实现的

a.两台或以上的应用服务器

b.在nginx.conf中写入相关配置,主要是对proxy_pass,upstream的使用

nginx的upstream目前支持这几种方式的分发策略

1)、轮询(默认)——每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight ——指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash ——每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。

4)、backup——其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

5)、down——表示单前的server暂时不参与负载

6)、fair(第三方)——按后端服务器的响应时间来分配请求,响应时间短的优先分配。

7)、url_hash(第三方)——按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。



三、常见问题

都是http服务器,nginx和tomcat的区别是什么?



4.解决方案

答:虽然Tomcat也可以认为是HTTP服务器,内部集成了http服务器的相关功能,但通常它仍然会和Nginx配合在一起使用。严格的来说,Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上),这种特性导致了它们在使用中有明确的分工职责。



五、编码实战



六、扩展思考

负载均衡下服务器集群间会话保存的问题

nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的



七、参考文献

1.CSDN博客:http://blog.csdn.net/daybreak1209/article/details/51554045

2.CSDN博客:https://www.cnblogs.com/microtiger/p/7623858.html



八、更多讨论

Q1、讲了动静分离没有?

答:动静分离:运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻应用服务器的压力

Q2、ip_hash既然有根据客户端ip默认匹配服务器的优点,为什么不作为默认配置呢,是不是在某些情况下设置ip_hash会有弊端

答:有限制条件,代理服务器必须既作为最前端接受客户端ip的服务器,又作为直接连接应用服务器的服务器才能生效

Q3、nginx的功能tomcat可以完成吗?

答:在一定条件下可以完成,但是术业有专攻,还是按照常规用法比较合适

今天的分享就到这里啦,欢迎大家提问和探讨!

小课堂视频

PPTPPT

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

作者:东

链接:https://www.jianshu.com/p/1ebbafa093b6

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐阅读更多精彩内容