目前Nginx已经逐渐成为平台服务必不可少的一环,就是因为它的反向代理与负载均衡能力满足了开发者对产品服务高可用性以及模块解耦的需求。
接下来大家分别来解释反向代理与负载均衡。
反向代理
反向代理是针对服务器端。对于用户来说,他只知道反向代理服务器的地址,但是反向代理服务器后面通常指向了多个服务器,负责了相同或者不同的模块。Nginx会根据conf文件中配置的正则表达式来解析用户实际请求的urlpath,然后再将请求转发至不同的服务器进行处理,最后再将请求结果返回给用户。这个过程就叫做反向代理,因此可以看做将不同的能力,不同的server整合到一个host和ip,从而减少用户的使用负担,也是对用户更加友好。
负载均衡
与反向代理相对应的是负载均衡。
偶通过一个例子来解释,当一台服务器能够承受的qps只有2000,但是当前用户量激增,qps达到了3500,在不修改代码不优化的情况下如何解决呢。
大家可以再布置一台server,两台服务器一起处理请求,从整体上来看,qps就达到了4000。但是两台服务器有不同的ip,大家总不能在扩容后和用户说,你的第奇数个请求发到8080端口,第偶数个请求发送到8082吧。
如何处理这个问题呢?这就用到了负载均衡。
大家可以在Nginx的conf文件中为同一个类型的path配置指向两台服务器地址,这样对于用户来说,他依然只需要请求Nginx的地址即可,Nginx会根据当前两台服务器的情况决定将请求转发给哪一个。这样布置还有一个好处,就是如果其中一个节点宕机了,只要另一个节点还活着,从用户的角度,整个服务就还能够运转,因为Nginx会将请求转给有正常反馈的server。
偶曾经尝试过,在两台服务器一样压力的情况下,请求是均匀分给两个不同的服务器的。
基于偶相信大家已经对偶说的“利用Nginx的反向代理能力,集合几个负责不同功能的server节点,从而实现分布式;也可以利用Nginx的负载均衡能力,集合几个相同功能的server节点,从而实现服务的高稳定性”有了进一步的了解了。
以上是偶的浅见,欢迎大家在下方评论留言。
偶是苏苏思量,来自BAT的Java开发工程师,每天分享科技类见闻,偶,与偶共同进步。
用nginx这个反向代理服务器实现负载均衡 集群几台服务器 同时协作完成一个任务 这样的情景下就是分布式吗? – 网络