美文网首页PHP面试题
1【服务器篇】负载均衡和反向代理的区别?

1【服务器篇】负载均衡和反向代理的区别?

作者: 叫我峰兄 | 来源:发表于2019-03-29 19:06 被阅读0次

前言

用100篇文章讲清面试过程中80%的知识点,只要这100篇文章熟练掌握,了然于胸,就可以面试势如破竹,对面试官进行360°的反击,吊打大部分面试官,疯狂收割大厂Offer!

文章持续更新,每周两篇。会按照知识点进行分类。分为服务器篇、PHP篇、数据库篇、缓存篇、消息队列篇、算法设计模式篇、分布式服务篇。

本系列的写作思路是,用一个大部分程序员容易混淆或者不太理解的概念入手,用第一性原理讲解问题涉及的知识点,如何将知识点用到实际项目中,以及存在哪些坑、如何避坑,一切站在实战的角度。争取用一篇文章讲清楚,以后您再遇到此类问题,直接参考文中的解决思路即可,无需再浪费时间,查阅大量隔靴搔痒的文章。

一 本篇文章要解决的问题

什么是负载均衡、反向代理
什么是负载均衡、反向代理的区别
nginx如何来实现负载均衡、反向代理

二 什么是负载均衡、反向代理

负载均衡

负载均衡是干什么用的呢?这个涉及到了分布式系统的设计。例如我们现在有两台服务器(Server1和Server2)为用户提供服务,如果没有负载均衡就有可能出现95%的用户都去访问Server1,而只有5%的用户访问Server2。那样不就出现Server1快被压死了,而Server2工作负荷完全不满的情况吗。我们当然希望将用户的访问均衡的分配到这两天服务器上,那样对我们的系统是最有利的,这就是负载均衡最大的意义。

负载均衡:将客户端的请求按照一定的规则分配到一群服务器上,并将处理结果返回给相应的客户端。

所以如果我们现在访问百度服务器,请求首先是发到了是其负载均衡上面,Ip地址也是负载均衡的,我们对其后台的服务器集群一无所知。

负载均衡实现方式

1.单独的专门做负载均衡的硬件设备。如F5,工作在网络层
2.软件方式,不需要特定的设备。如nginx,工作在应用层

负载均衡的作用
  1. 负责调度客户端请求,使其按照最优方式分配到不同的服务器上执行,避免其中某台服务器过载。
  2. 消除单点失败,这个比较好理解,因为我们有多台服务器,如果其中某一台发生了错误,可以由其他服务器完成请求。
  3. 通过减少错误返回结果提升用户体验,因为负载均衡可以检查某一台服务器是否存在问题,如果发现存在问题,它就会将请求安排到其他运行良好的服务器上执行,所以用户很少会接到返回失败的错误。
  4. session持久化( session persistence),这个名词的意思就是在一个session有效期内,将某一个客户端的所有请求都交给同一个服务器执行。这有什么意义呢?假设我们在淘宝上购物,好不容易花了两小时选了两件心仪的宝贝放到了购物车里面,发现添加第三件的时候前两件不见了,那你是不是想问候一下阿里程序员老妈?为什么会这样,因为Http是无状态的,我们使用session维护状态,那假设前两件商品的操作是在Server1上完成的,而第三件商品是在Server2上完成的,那么这种糟糕的情况就出现了,因为Server2第一次接到这个session。

反向代理

首先应该明白什么是代理和正向代理,代理应该不用多解释了,理解成中间人就可以了。什么是正向代理,正向代理是内网通过代理访问外网,这个代理就是正向代理。而反向代理是指,外网通过代理访问内网,那这个代理就是反向代理。
假设把你公司的网看成是内网,那么你从公司里面的一台电脑上访问你家里的电脑上的服务,那就的通过正向代理,而你从你家电脑访问公司的这台电脑,就要通过反向代理。

反向代理与负载均衡一样,也是位于客户端与服务器之间,客户端向服务器发起的请求都是先经过反向代理,然后分发到服务器上,然后服务器将返回结果交给反向代理,反向代理在交给客户端。

反向代理的作用

  1. 增强了安全性。首先,你背后的服务器是在反向代理后面的,其不会暴露任何信息到网络上,所以可以防止恶意攻击。第二可以防止DDoS( distributed denial-of-service)攻击,例如通过限制某一IP访问,限制每个客户端的访问次数等。
  2. 增强了可伸缩性与灵活性。因为客户端只能看到反向代理的Ip地址,所以我们就可以灵活的改变其后面服务器的配置。
  3. 加速Web访问速度。第一:将返回结果压缩后交给客户端,这样就会节省网络带宽,从而加快速度。第二:将请求的加密解密操作放在反向代理服务器上行执行。第三:在反向代理服务器上做缓存。

三 负载均衡、反向代理的区别

反向代理是手段,负载均衡是目的。 也就是说,反向代理可以实现负载均衡,同时负载均衡可以用其他方式来做。

一般可以这样认为,如果一台服务器只是作为中介,将请求转发给另一台服务器,可以认为这台服务器是反向代理服务器。如果这台服务器是将请求按照某种规则分发到多台服务器,则认为这台服务器是负载均衡服务器。

四 nginx如何来实现负载均衡、反向代理

NGINX实现负载均衡 和反向代理都还是比较简单的,在nginx的配置文件里修改。

nginx实现负载均衡
找到nginx的配置文件,在http区块中添加如下内容:
http{
  负载均衡可以随便起名字,如我这个地方起的是my_host
  upstream my_host{
        根据实际情况设置server的值,如要访问的真正服务在192.168.1.104:8080 端口,同时可以设置权重。
        server 要代理的ip:80 weight=5; 
        server 192.168.1.104:8080 weight=1;
  }

 server{
     listen 80;
     server_name [www.abc.com](http://www.abc.com)
     index index.html index.php
     
     location / {
        root /var/www/html
        根据upstream设置的名字,前加http
        proxy_pass http://my_host;
     }
     
  }
}

nginx实现反向代理
找到nginx的配置文件,在http区块中添加如下内容:
http{
 server{
     listen 80;
     server_name [www.abc.com](http://www.abc.com)
     index index.html index.php


     location / {
         root /var/www/html
         可以设置反向代理相关的一些参数
         proxy_set_header Host www.54php.cn;
         设置反向代理的服务器的地址
         proxy_pass http://192.168.1.104:8080;
     }
  }
}
nginx实现负载均衡的六种策略
  1. 轮询(默认)——每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  2. weight ——指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  3. ip_hash ——每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
  4. backup——其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
  5. down——表示单前的server暂时不参与负载
  6. fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
扩展nginx和tomcat的区别是什么?

虽然Tomcat也可以认为是HTTP服务器,内部集成了http服务器的相关功能,但通常它仍然会和Nginx配合在一起使用。
nginx常用做静态内容服务和反向代理服务器,以及页面前端高并发服务器。
严格的来说,Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上),这种特性导致了它们在使用中有明确的分工职责。tomcat更多用来做做一个应用容器,让java web app跑在里面的东西。大部分适用于静态资源文件的访问(图片,文件)

相关文章

  • 负载均衡之lvs

    1.负载均衡 VS 反向代理区别 1.1 功能(原理) 负载均衡 lvs 请求做转发 反向代理 Nginx Hap...

  • Nginx反向代理服务器+负载均衡

    nginx反向代理服务器+负载均衡 用nginx做反向代理和负载均衡非常简单, 支持两个用法 1个proxy, 1...

  • Linux运维-day56/57-负载均衡之lvs

    一、负载均衡与反向代理的区别 1.1 功能(原理) 负载均衡lvs---请求做转发 反向代理Nginx Hapro...

  • 负载均衡与lvs

    一、负载均衡与反向代理的区别 1.1 功能(原理) 负载均衡lvs---请求做转发 反向代理Nginx Hapro...

  • nginx基于tcp的转发,适用于HTTPS

    nginx的主要功能 1,正向代理2,反向代理3,负载均衡4,WEB服务器 通常用nginx主要做反向代理,负载均...

  • Java中的代理

    隐藏服务器真实IP:使用反向代理,可以对客户端隐藏服务器的IP地址。 负载均衡:反向代理服务器可以做负载均衡,根据...

  • nginx 能做的事

    Nginx主要功能: 1、反向代理2、负载均衡3、HTTP服务器(包含动静分离)4、正向代理 一、反向代理 反向代...

  • nginx 能做什么?

    Nginx主要功能: 1、反向代理2、负载均衡3、HTTP服务器(包含动静分离)4、正向代理 一、反向代理 反向代...

  • nginx-知识点整理

    一、Nginx Proxy代理 1、代理原理 (1)反向代理:需要有一个负载均衡设备(即反向代理服务器)来分发用户...

  • nginx做反向代理和负载均衡

    nginx的反向代理和负载均衡的区别是什么? 反向代理:是把一些静态资源存储在服务器上,当用户有请求的时候,就直接...

网友评论

    本文标题:1【服务器篇】负载均衡和反向代理的区别?

    本文链接:https://www.haomeiwen.com/subject/ysprbqtx.html