负载均衡 是如何如何分发 请求到用户最近的服务器的?

看CDN说明的时候,看到这么一句话

全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上

刚开始学负载均衡技术,不是很理解流程。

假如有三台服务器
AB在北京,C在美国

A 为反向代理服务器,分发请求到 BC。

图片描述

当一个用户在美国发起请求,肯定是C来处理是最好的,A 分发请求给C ,由C 处理业务。

问题一:A是如何如果判断用户距离最近的服务器?

问题二:根据上图流程,C处理完业务,返回数据给A,由A返回给客户,那C服务器放在美国,反而增加了网络传送时间。实际中是如何实现 "访问指向离用户最近的工作正常的流媒体服务器上"

阅读 16.5k
5 个回答

如果你是看CDN的东西看到的这句话,那么我可以来解释一下流程。“全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上”。首先我们要明确几件事:
1、在CDN的案例图中,其实B和C不会在不同的城域。如果在不同的城市,一般会在那个地域也放置一个反向代理服务器或反向代理节点。B和C为同一地域,A为B、C的负载均稀器或调度器;
2、CDN的部署里,为避免单点故障或应对业务峰值,A并不是单台服务器,一般由多台服务器进行调度,一般采用LVS进行七层的负载和转发。通过LVS的负载均衡策略将业务转发至B和C,负载均衡策略可以进行设置,如轮询,权重轮询、随机等等;
3、CDN一般由DNS来做为用户流量调度,也是CDN的核心,即将用户的请求调度至距用户最近的节点,例如节点D,节点D通过负载均衡策略将请求分发至节点D后端的业务服务器E和F。
4、你看到的这句话,是指DNS层面的调度。

流媒体业务使用CDN的发布业务的前提和流程如下:
1、在流媒体业务服务器域名注册商修改域名的CNAME记录为CDN服务厂商的域名;(这一步是使用CDN的首要条件)
2、CDN服务厂商为业务设置不同地域的缓存节点,如北京、上海、美国等
3、不同地域设置的缓存节点具有不同的IP地址地址池,并且该节点内拥有业务调度器(LVS的DR)及真正的业务缓存服务器,缓存服务器通过类似Squid等程序定期缓存流媒体业务服务器的视频信息及网页信息,每隔一段时间进行更新请求;
4、用户通过DNS调度请求到某一节点时,该节点通过LVS技术将用户的请求调度至节点内某一以缓存节点进行处理,并返回结果给用户;(可参照LVS的工作模式)
5、当缓存节点有用户请求的内容时,将直接返回内容给用户,当缓存节点发现请求的内容不存在时,会主动返回流媒体业务的源服务器进行内容请求,并将结果缓存至缓存节点。
6、用户最终拿到缓存节点上的视频内容及信息,由于通过DNS调度至用户最近的节点,通过LVS调度至最快最优的服务器进行处理,故加快了用户访问网站及视频的速度。(视频的加速其实还有一种技术叫cache技术,即将视频提前下载到距用户最近的节点,用户看起来等于在局域网中查看)

DNS和CDN调度的流程如下:
1、用户访问流媒体业务的域名如“www.abc.com";
2、www.abc.com的cname记录为CDN服务厂商的域名,如www.abc.com.cdncache01.com;
3、用户的请求被转发至www.abc.com.cdncache01.com进行处理,即触发用户对www.abc.com.cdncache01.com域名的解析处理。DNS解析流程见图“DNS解析流程图”
4、www.abc.com.cdncache01.com域名在权威服务器里配置的记录为多条的,即智能DNS,可参考DNSPOD,即一个域名可以根据地域的不同配置不同的解析策略,源地址为北京联通的,即解析为用户指定的联通服务器IP地址,源地址为广州移动的,即解析的IP地址为用户指定广州移动的IP地址。
5、DNS通过AnyCast技术进行三层负载均衡,类似于OSPF的等价路由,如8.8.8.8这个地址实际为一个AnyCast地址,即谷歌全球的递归DNS服务器均使用8.8.8.8作为Global DNS地址,当用户通过8.8.8.8请求域名解析时会带上自己的DNS服务器地址进行请求,即8.8.8.8会查询请求过来的客户端地址是哪里的IP地址,如果是北京联通的,即将请求解析为北京联通的一个IP地址或解析为北京联通的一个负载均衡节点CNAME域名。
6、为了达到更精准备的DNS解析调度,谷歌还研发了edns-client-subnet,即在DNS授权、递归、缓存上均支持该Edns协议,支持该协议后,用户在请求DNS域名解析时,会带上自己客户端的源IP地址放在请求包里,而非客户端配置的DNS服务器IP地址。这样就有效的避免了用户使用Global DNS服务器时不能调度精准的问题。(有关DNS授权、递归等问题可以参照RFC 1034和1035)
7、按照以上流程用户请求www.abc.com.cdncache01.com,会得到一个距离用户上网所在地域最近的一个CDN缓存节点的IP地址即楼主图中的反向代理服务节点。假设IP地址为1.2.3.4。
8、用户请求1.2.3.4的流媒体业务,节点1.2.3.4通过LVS及其它负载均衡技术将用户的请求分发布该节点内最优最快的缓存服务器,如服务器E,IP地地址为192.168.1.4,即由192.168.1.4进行业务处理。
9,服务器192.168.1.4直接将结果返回给用户。

附DNS解析流程图:
DNS解析流程图

有个东西叫智能DNS

你需要一个支持anycast的DNS,然后根据地区自动来判断进行访问最近的服务器

访问指向离用户最近的工作正常的流媒体服务器上"

思路就是进行if else判断(伪代码)

大白话就是经过一系列算法判断出来的,这也就是cdn思路。
当然说是这样说,实现肯定复杂很多。

make~ make~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏