本文将从一个朋友的面试题入手,聊一聊HTTP重定向和负载均衡。一、HTTP重定向1.1什么是重定向?通过路径重定向数据报)。以上是百度百科的解释。其实一想到重定向,我的第一反应就是Java中的转发和重定向。其实道理都差不多。听我分析一波。其实HTTP重定向也可以看成是URL重定向,URL重定向又叫URL转发,是一种在迁移到时保留实际资源的方法,比如单个页面、表单或者整个Web应用。一个新的网址。(传统)链接可用技术。HTTP协议提供了一种特殊的响应形式——HTTP重定向(HTTPredirects)来执行此类操作,可应用于多种目标:网站维护期间的临时跳转,以维持外部链接持续可用的永久重定向,上传文件时的进度页面。1.2为什么重定向可靠地执行HTTP事务;最小化延迟;节省网络带宽;由于这些原因,网络内容通常分布在许多地方。这样做是出于可靠性原因。这样,如果一个位置有问题,还有其他可用的;如果客户端可以访问更近的资源,则可以更快地接收请求的内容以减少响应时间;减少网络拥塞。1.3负载均衡的部署方式负载均衡的部署方式有路由方式、桥接方式和服务直回方式三种。路由方式部署灵活,约60%的用户采用这种方式;桥接模式不改变现有网络架构;直接服务返回(DSR)更适合高吞吐量的网络应用,尤其是内容分发。大约30%的用户采用这种模式。1、路由模式(推荐)对于路由模式的部署方式,服务器的网关必须设置为负载均衡器LAN口的地址,与WAN口部署不同的逻辑网络。所以所有返回的流量也是负载平衡的。这种方法对网络的改动很小,可以平衡任意下行流量。2.桥接模式桥接模式配置简单,不改变现有网络。负载均衡器的WAN口和LAN口分别连接上游设备和下游服务器。LAN口无需配置IP(WAN口和LAN口通过网桥连接),所有服务器和负载均衡都在同一个逻辑网络中。通常不推荐这种安装类型,因为它的容错能力差,网络架构缺乏弹性,并且容易受到与广播风暴和其他生成树协议环路相关的错误的影响。3、服务直回方式这种安装方式的负载均衡LAN口不用,WAN口和服务器在同一个网络,外网客户端访问负载均衡机的虚拟IP(VIP),虚拟IP对应负载均衡机端口的WAN,负载均衡器根据策略将流量分配给服务器,服务器直接响应客户端的请求。因此,对于客户端来说,响应给他的IP并不是负载均衡器的虚拟IP(VIP),而是服务器本身的IP地址。也就是说返回的流量没有负载均衡。因此,这种方式适用于流量大、带宽要求高的业务。二、常见的软件负载均衡技术1、基于DNS的负载均衡由于在DNS服务器中可以为多个不同的地址配置同一个名称,最终查询名称的客户端在解析名称时会得到其中一个地址,所以这代理方式是通过DNS服务中的随机名称解析域名和IP来实现负载均衡。2.反向代理负载均衡(如Apache+JK2+Tomcat的组合)这种代理方式不同于普通的代理方式。标准的代理方式是客户使用代理访问多个外部Web服务器,所以称为反向代理模式是因为这种代理方式是多个客户端访问内部Web服务器,而不是访问外部服务器。3、基于NAT(NetworkAddressTranslation)的负载均衡技术(如LinuxVirtualServer,简称LVS)。该技术通过地址转换网关将每个外部连接平均转换成不同的内部服务器地址,这样外部网络中的计算机就可以自行与自己转换后的地址上的服务器进行通信,从而达到负载均衡的目的.网络地址转换网关位于外部地址和内部地址之间,外部客户端不仅可以访问转换网关的外部地址,转发到一个映射的内部地址,而且内部地址的计算机也可以访问外部网络。其实在Nginx中实现负载均衡时,就是通过第二种方式,反向代理负载均衡。关于这一点,之前的文章公众号有专门的文章实现反向代理实现负载均衡。地址是给大家的。去[http://www.justdojava.com/2019/09/05/nginx-tomcat/]三、负载均衡算法(重点)1、轮询方式轮询方式是将用户的请求依次分配给服务器.就好比一个一个数,依次分配。该算法比较简单,具有绝对平衡的优点,但恰恰因为绝对平衡必须付出高昂的代价,例如不能保证任务分配的合理性,不能根据任务的容量分配任务等。服务器。其实说白了就是把请求按顺序依次分发给各个节点,而不管各个节点的实际连接数和当前的系统负载。这种方法的优点很明显,缺点也同样明显。优点:简单高效,易于横向扩展,每个节点满足字面平衡,不需要记录当前所有连接的状态,是无状态调度。缺点:不考虑机器的性能。根据木桶中最短木板理论,集群的性能瓶颈更受性能差的服务器的影响。给你看最简单的图:给你看简单的代码处理:publicstaticvoidmain(String[]args){int[]arr={10,9,8,7,6,5,4,3,2,1,0};intindex=4;//Index:指定起始位置for(inti=0;i<17;i++){intnextIndex=(index+1)%arr.length;index=nextIndex;System.out.println(arr[index]+",index="+index);}}2.随机法随机法是随机选择一个服务器分配任务。它确保请求的分布是平衡的。同时,它是无状态的,不需要维护最后的选择状态和平衡因子[5]。但随着任务量的增加,其效果往往会出现轮询后轮询算法的一些不足。其实随机法的优缺点和轮训法差不多,就不做过多描述了。算法伪代码:privatestaticMap
