HTTP重定向
 
HTTP重定向服务器就是一个普通的服务器,当用户访问时,其会根据一定的算法得到服务器集群的一个真实服务器的IP地址,将其放在HTTP响应头中,响应状态码为(302),当用户浏览器接收到这个响应时,会将得到的真实服务器的IP地址提出并重新访问。如上图所示,当用户访问域名时通过DNS解析得到114.100.20.200,然后访问114.100.20.200,也就是HTTP重定向服务器,响应重定向至114.100.20.203,用户浏览器再重新访问。

缺点: 
1. 这种方式需要用户浏览器访问两次,性能较差 
2. HTTP重定向服务器的处理能力会成为负载均衡的瓶颈 
3. HTTP重定向返回302,可能会使搜索引擎判定为SEO作弊,降低搜索排名

DNS域名解析

DNS:通过域名获取ip地址的手段

当我们通过域名访问网站时,需要通过DNS服务器得到服务器的IP地址,我们可以在DNS服务器上设置一定的算法,每次得到不同的IP地址来进行访问从而实现负载均衡 
如图,当用户访问www.apusapp.com时,这个域名对应了多个IP地址,通过DNS服务器解析会得到一个IP地址(可以看到,得到的这个IP地址,是服务器集群中一个服务器的IP地址),用户访问这个IP地址来达到真实的服务。

优点:

将负载均衡的工作丢给了DNS服务器去做,省去了网站管理人员的维护工作
对于真实地址的服务器,不需要做任何的配置
简单易用,成本低,而且方便灵活
服务器可以放在任何的地方
同时,DNS服务还可以做基于地理位置的解析,可以让一个距离最近的服务器的IP地址放回,提高性能
缺点:

DNS服务是有多级的(之后有时间写一个详细的DNS服务介绍)

大致上来说,首先是在浏览器中有一个DNS缓存,如果找不到就在本机地址的hosts文件中查找,再找不到就去路由器缓存中查找。然后是本地DNS服务器,如果没有,就是根服务器,顶级服务器,权限域名服务器等等等

总之,在每一级都有可能缓存这DNS的对应关系,所以有可能当某一台真实服务器下线之后,修改了DNS服务器的记录,但在生效之前还有一段时间,在这段期间,其IP地址已经不可用了,通过域名进行访问时还是会访问到这个IP地址。会访问失败

DNS服务器和真实服务器是完全分开的,所以DNS的负载均衡不能监测到真是服务器当前的运行状态,其负载均衡的效果不是很好
可能会造成额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。
事实上,大型网站都将DNS负载均衡作为第一级的负载均衡手段,在服务器内部再进行第二级的负载均衡,也就是说,我们通过DNS得到的IP地址并不是真实服务器的IP地址,而是内部负载均衡服务器的IP地址。

反向代理


代理与反向代理:VPN服务就是我们常用的一种代理(正向代理),用户将请教交给代理服务器,代理服务器访问网站获取数据,之后代理服务器再将数据返还给用户。在这个过程中,应用服务器并不知道用户的存在。只知道代理浏览器的访问。 
反向代理是指在服务器端的代理,代理服务器接收用户的请求,再转发给真实服务器,之后再返回给代理服务器再给用户,在这个过程中,用户并不知道真实服务器的存在。

反向代理服务器管理了一组服务器,当用户访问时,代理服务器根据负载均衡算法将请求转发到真实服务器,真实服务器也通过反向代理服务器返还数据。内部服务器不对外部提供服务,所以不需要外部IP,而反向代理服务器需要两个网卡,一个IP用于外部用户访问使用,另外一个用于内部使用。 
 
如上图所示,当用户发起访问,请求访问的ip地址是114.100.20.200,到达反向代理服务器时,根据负载均衡算法得到一个真实服务器的IP地址,并将用户请求转发到该服务器上,当真实服务器处理完之后将数据返回到反向代理服务器。反相代理服务器再将该响应的内容返回给用户。

优点:

反向代理服务器位于应用层,负载均衡方案和反向代理服务器集成在了一起,部署简单
缺点:

反向代理服务器用户处理所有的请求和响应,其性能可能成为服务器集群的瓶颈
有名Nginx就是反向代理服务

IP层的负载均衡

先来看看IP数据包 
 
其中,可能看到有源地址和目的地址两项,这两项就是用来做IP层的负载均衡的关键。我们就是通过修改这两个地址来达到“转发”目的 
 
如上图所示,当用户发起请求时(源地址为200.110.50.1),访问负载均衡服务器(目的地址为114.100.20.200),负载均衡服务器在内核进程获取网路数据包,根据一定的算法得到一个真实服务器的IP地址,其后将IP数据包的目的地址修改为该IP地址(192.168.1.1),之后就会将数据包发送到该真实服务器上去,之后再向负载均衡服务器返回数据,负载均衡服务器将源地址修改为114.100.20.200后返回给用户浏览器。

这个方法的关键就是因为只能在负载均衡服务器出修改源地址和目的地址,所以在真实服务器处理完之后要想办法将数据返回给负载均衡服务器而不是用户浏览器。 
比如,当用户发出请求时,目的地址是114.100.20.200,源地址是200.110.50.1,到达负载均衡服务器后,将目的地址该位192.168.1.1,源地址还是200.110.50.1,所以当真实服务器处理完之后的数据无法回到负载均衡服务器

解决方法:

提供两个网卡,负载均衡服务器就有内部IP和外部IP两个IP,当请求到达负载均衡服务器时,修改目的地址,也修改源地址,将源地址修改为负载均衡服务器的内部IP,这样的话,真实服务器处理后的响应就会再次回到负载均衡服务器
将负载均衡服务器作为真实服务器集群的网关服务器,这样的话所有的请求响应都要经过网关服务器
优点:

IP负载均衡在内核进程完成数据分发,处理性能得到了很好的提高。
缺点:

由于所有请求和响应都要经过负载均衡服务器,集群的最大响应数据吞吐量将受到负载均衡服务器网卡带宽的限制,对于提供下载服务或者视频服务等需要大量传输数据的站点而言,这是难以满足需求的

链路层的负载均衡

MAC地址:mac地址是与网卡相关,其编号只与网卡生产厂商和流水号有关,基本上可以作为每台电脑的“身份证”。以太网中数据帧之间是通过MAC寻址来到达对应的计算机网卡或者路由的

链路层的负载均衡通过修改帧数据包中的MAC地址来达到转发的目的。这种方法,所有的真实服务器和负载均衡服务器都有相同的IP地址,不用修改IP数据包的目的地址和源地址,只通过修改MAC地址就可以达到效果,因为请求的IP地址和实际处理的真实服务器的IP地址一致,所以不需要回到负载均衡服务器进行地址交换,可以将响应直接发会给用户浏览器,避免了负载均衡服务器成为传输瓶颈的可能

Linux中的LVS(Linux Virtual Server)就是链路层负载均衡的开源产品

参考: 每天进步一点点——负载均衡之数据链路层

转自:https://blog.csdn.net/ran_max/article/details/81350955

负载均衡的几种常见方式相关推荐

  1. Web负载均衡的几种实现方式

    摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的 ...

  2. 负载均衡的三种实现方式

    不懂高性能的负载均衡设计?架构师带你飞 在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中, ...

  3. 服务器负载均衡的几种部署方式

    负载均衡有三种部署方式:路由模式.桥接模式.服务直接返回模式.路由模式部署灵活,约60%的用户采用这种方式部署:桥接模式不改变现有的网络架构:服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络 ...

  4. IIS Web负载均衡的几种方式

    Web负载均衡的几种实现方式 摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应 ...

  5. 【Nginx】实现负载均衡的几种方式

    要理解负载均衡,必须先搞清楚正向代理和反向代理. 正向代理与反向代理[总结] 注: 正向代理,代理的是用户. 反向代理,代理的是服务器 什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压 ...

  6. nginx负载均衡的5种策略

    nginx负载均衡的5种策略 nginx负载均衡 发布于 2018-04-19 要理解负载均衡,必须先搞清楚正向代理和反向代理. 负载均衡的几种常用方式 1.轮询(默认) 每个请求按时间顺序逐一分配到 ...

  7. Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n

    负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务 ...

  8. nginx负载均衡的五种方式

    文章目录 前言 :负载均衡是什么 一.方式1:轮询 二.方式2:权重 方式3:iphash 方式4:最小连接 方式5:fair 总结:根据这几种方式可以猜测处nginx的底层使用了计数器,从而可以将海 ...

  9. nginx实现负载均衡的6种方式

    nginx实现负载均衡的6种方式 一.负载均衡 1.轮询 2.权重 3.ip_hash 4.最少连接least_conn nginx.conf配置文件内容详解 后续更新 一.负载均衡 nginx负载均 ...

最新文章

  1. 智能指针unique_ptr
  2. 《快捷键 系列》 - Eclipse快捷键
  3. linux gcc 内联汇编入门
  4. Linux iterm 快捷键
  5. php接收rs485的数据如何处理,为什么485不能连续接收?
  6. wxWidgets:wxStdOutputStreamBuffer类用法
  7. Build 2021 :正式发布.NET 6 Preview4
  8. C#结构体和字节数组的转换
  9. 神奇的文本编辑,惊人的移花接木 | ACM MM 2019 论文赏析
  10. oracle删除一张表的sql语句,oracle删除表的语句
  11. AppStore新应用上传指南
  12. 炉石整活拔线方法_酒馆战棋:整活如何简单“拔线”?瓦娘在线教学,却3本得死神?...
  13. centos 6 install EPEL
  14. Postgresql 9.3外部数据封装的新功能
  15. 解读对象存储九大关键特征
  16. 不玩游戏,何谈人生!
  17. 程序员如何接私活?十年码农悄悄告诉你
  18. C#实现斐波那契数列
  19. Hexo | NexT打造一个炫酷博客
  20. PNAS|助人为乐—助人行为能减轻自身身体疼痛

热门文章

  1. apktool.bat获取方式
  2. 可靠性培训大纲- Sam Wang
  3. 关于omnigraffle存为visio格式乱码的问题
  4. 三天学会opencv(十三)——阈值操作
  5. 【算法题目】【DFS】岛屿数量 岛屿中面积最大值
  6. 大数据处理 - Bitmap Bloom Filter
  7. php电子商务源码,电子商务系统源代码 TWE-Commerce
  8. 计算机硬件故障产生的主要原因,计算机病毒产生的原因是计算机系统硬件有故障。...
  9. Silverlight 2.5D RPG游戏技巧与特效处理:(二十一)自定义路径动画
  10. start-stop-daemon