为什么要用nginx?
在网上搜索负载均衡的时候,总会跳出nginx这个字眼,对于我这样只关注开发功能却从未关心过架构的人来说,还是比较陌生的,印象中用了nginx好像可以扛更多的访问量。
过完年后开发工作告一段落,正好有时间,就决定从一个初学者的角度来描述一下,为什么要用nginx。
经查阅各种资料,nginx的主要功能和使用方式包括
- nginx反向代理
- nginx负载均衡
- nginx配置https
- nginx静态资源服务器
- 整合keepalive、lvs等
以上5点主要作为后续实践内容的大纲。
nginx反向代理
这个名称和概念有点让人懵逼,从数据的流向方面来说一下我的理解。
通过时序图可以看出,相当于nginx就是个方案公司的FAE,你的所有需求和沟通交流,都和对方公司的FAE对接,并不需要知道对方公司的工程师如何开发能不能实现你的需求,一旦有结果之后,也是FAE告诉你,并且给你部署实施或者烧录,这就是反向代理。
那什么是正向代理呢,就是你作为公司内部的工程师,需要第三方公司的配合才能搞定任务,其他公司都是工程师直接对接三方公司,但你们公司为了节省工程师的时间,减少扯皮带来的精力消耗,所以专门给你配备了个FAE,你告诉FAE我需要第三方公司给我搞定芯片我才能开发,FAE去三方公司沟通,然后你只用忙其他事情,最后FAE搞定了这坨事,把芯片交给你,这就是正向代理。
所以我个人理解的是,正向还是反向代理,关键看nginx这个FAE为谁代言,为服务器代言就是反向代理,为客户端代言就是正向代理。
正向代理的用途,由于没有实践,目前实在想不到使用场景,这里暂且不提。
反向代理的用途就比较直接了,如果单从这个代理功能来说,脑子进水了,本来直接就能和服务器通信,为什么要多一个东西不嫌麻烦吗?这就牵涉到nginx的其他特性了。
nginx负载均衡
nginx有一些负载均衡算法,细节部分等后面实际操作时再谈,要想实现负载均衡,就必须要用到前面的反向代理特性了,看图:
所有的请求先到nginx,然后nginx根据算法分发请求到某个服务器,服务器再通过nginx返回数据给客户端。
当然选择nginx还有一些其他性能方面的优势,比如并发能力比apache还强等其他因素。
nginx配置https
这个是为后续的实践提供大纲,现在服务器是java编写的,用的是springMVC、spring、mybatis开发,因为我们的硬件客户端设备能用很长时间,长时间积累下来,并发不算太小,而本人的java并发经验几乎都停留在理论阶段实践为零,既然都是重新尝试为什么不学一下新技术呢,所以出于个人意愿,后期打算换成golang,听说golang的https好像比较难搞,并且做集群的时候每个业务服务器都搞一下https好像不现实,所以提前把这个功能实践了。
nginx静态资源服务器
这个动静分离功能是必须要做的,这样也可以显著提升性能,如果一些图片和js脚本都放在web容器里,比如tomcat里,就损耗了一部分tomcat的性能。
整合keepalive、lvs等
为什么要整合这些呢,有这样一种场景:nginx部署在A云服务器,然后后面集群了B、C、D三台云服务器上,然后A云服务器突然挂了,这时候就算B、C、D没挂,整个系统也不能用了,所以会有一些高可用方案。
这个keepalive和lvs目前只停留在理论阶段,是否能够整合以及怎么整合,或者是否有其他更流行的方案,这里只是列出大纲,以后实践的时候再查阅资料并进行详细描述。
有疑问加站长微信联系(非本文作者)