浅谈网络八-负载均衡?CDN?

对于服务端的开发者而言,“负载均衡”这个词听起来可能并不陌生,那么负载均衡是为了做什么的呢?这个负载均衡服务器最基本的功能就是要保证所有提供服务的机器要大概一样忙,不能让一台机器太忙,也不能让一台机器太闲,这样就能保证集群中的机器都物尽其用。

说起负载均衡,如果从戏里说来,我们可能要了解太多的网络原理里,咱们就简单的先把里面可能设计的知识点说下吧,负载均衡相关的,需要了解DNS协议(其中又会引申出来HTTPDNS等等只是内容),CDN,如果用的负载均衡啥的是“阿里云”啥的,那咱还需要了解下数据中心,云主机方面,NAT,openSwitch,VXLAN,GRE,容器相关知识Docker,Flannel,Calico等等,想想就可怕。好了,言归正传,今天咱们先简单了解下这其中的基本内容。

1.DNS做全局负载均衡

说起DNS,那DNS是做什么的呢?之前咱们知道每个服务器实际上对应着一个访问它的IP地址,但是对于用户直接去访问的时候,记IP实在是太困难了,于是就有了DNS,通过名称,来查看起具体的地址。注意的是,日常使用的时候访问网站都要经过它,那么它故障的话整个网络都要GG,所以它一定是高可用,高并发和分布式的,于是有树状层次结构如下。

DNS服务器层次结构

知道了它的层次结构,那么DNS是如何解析的呢?
1.用户去访问 www.google.com这个网站,向本地DNS询问,这个域名对应的IP是什么?
2.本地DNS收到了用户的请求,就去找它自己的缓存,看看有没有www.google.com对应的ip地址,如果有的话就直接返回,没有的话,本地DNS会向根DNS发送一个请求,进行询问。
3.根DNS收到来自本地DNS的请求,看最后一层后缀是什么,然后给本地DNS返回对应顶级DNS的地址,供下一步询问。
4.本地DNS向顶级DNS进行询问,www.google.com的IP地址是什么?
5.顶级DNS收到请求后,返回权威DNS服务器的地址,供进一步的询问。
6.本地DNS向权威DNS服务器进行询问,www.google.com的IP是什么?
7.权威DNS将www.google.com的IP地址返回给本地DNS。
8.本地DNS将IP地址返回给用户,并在自己这里建立对应缓存,用户就可以和目标服务器建立连接了。

咱们了解了DNS了,那么如何做负载均衡呢?

1.DNS做内部负载均衡

我们知道的,一般服务端做的肯定是要连接数据库的,那么当配置数据库的时候要配置IP还是域名呢?如果配置域名的话就可以实现负载均衡了,每次连接,我都去按照一定的规则去返回数据库的ip。不过这样不太建议哈,只是举个例子,这个例子不太合适,暂时没想到更贴切的,哈哈。

2.全局负载均衡

现在应用为了保证高可用性,都是不实在多个机房的,每个地方对应的ip是不同的,为什么要这么做呢?道理很简单,就是某一处的机房挂了,从DNS服务器里面删除那个挂了的数据中心对应的ip,就能保证应用正常使用。另外,对于用户访问来说,我们肯定是想要让他访问更近的数据中心,访问速度会最快,经历路程最短。

但是有个问题需要注意的是,这其实存在问题,缓存问题,域名转发问题,出口NAT问题,域名更新
1.从咱们解析过程看,如果有缓存的话,会直接吧缓存的ip直接返回给用户,那如果这个ip发生了变更了呢?
2.还有的运营商将某些静态页面直接缓存了,那么就不会去访问真实ip地址对应的实时内容,那么页面发生了改变呢?
3.本地DNS会缓存就近的ip,那么,上次是最近的,过了一阵后,这个ip还是最近的吗?可能不一定。
4.咱们知道,咱们最初的流量肯定会到运营商,但是某些运营商可能会将流量转发给另一个运营商在进行请求,那么这就产生了问题,当分配就近的IP的时候,返回的可能是针对与被转发的那个运营商的,而不是当前用户第一个运营上的,那么这就不是最近的了吧。
5.NAT在进行转换IP的时候,IP就变了,那么我实际到权威DNS的IP就没法去判断是否是原始的,没有转过的,那么可能就判断错了。
6.域名更新的时候,我们很多时候会等权威DNS进行变更,但是吧,刷新速度往往是不同的,那么有的时候可能反问的就是错的。

这么多问题,看起来就可怕,不过随着技术的更新迭代,又有牛人创造了HTTPDNS,其实解释起来也简单,就是不走传统的DNS解析,而是走自己搭建的基于HTTP的DNS服务器集群,就相当于走了自己的配置,自己控制主动权。不过这一般依赖于客户端SDK。

2.进一步的优化 CDN

CDN与DNS有相同点,都是分布在一个多区域,多运营商的分布式系统,去找边缘节点的思路也很是相同,都是通过层层解析。

1.在没有CDN的时候,用户输入www.google.com访问本地DNS,然后去找真实服务器的IP,访问这个网站。有了CDN之后呢,我们会在google.com这个权威服务器上设置一个CNAME的别名,指向另外一个域名,例如www.google.cdn.com,返回给本地的DNS。
2.本地DNS拿到这个新域名,在访问的时候就是去访问google.cdn.com的权威服务器了,在这个服务器上还是会设置一个CNAME别名,指向CDN网络的全局负载均衡器。
3.接下来,本地DNS服务器去请求CDN的全局负载均衡去解析域名,选择合适的服务器。
4.返回被选中的机器的IP返回给客户端,客户端就去这个地址去下载所需要的资源就行。一般缓存静态图片,网页啥资源,当然也是支持流媒体的

3.负载均衡

其实实现负载均衡的方式有很多,例如通过Linux内核的Netfilter框架,虚拟服务器LVS,Haproxy等均可以实现,接下来咱们还是讲讲Netfilter吧,因为我觉得这个的还可以顺便用iptable举例讲讲安全。

Netfilter是一个Linux内核框架,它可以在网络包进入本级以后解析的几个节点内插入Hook函数,也就是我们常说的钩子。这些函数可以截取数据包,并对数据包进行一定的干预。

这个可能比较难理解,根据这个特性咱们可以把它用在咱们内部的负载均衡上,根据咱们自己的一些逻辑,然后把请求分配给不同的机器处理。先说以下咱们网络包进来的几个节点吧。

在网络包进来以后,先拿下来MAC头,看看是不是自己的,是的话走进去咱们的几个节点。
1.PREROUTING:取下网络包的IP头,开始准备进行路有判断,路由判断前的那个节点就是这个。
2.INPUT: 取下IP头后,发现是我的,发给上面的传输层
3.FORWARD:取下IP头后,发现这个不是我的,转发出去
4.OUTPUT:上层处理完毕后,返回处理结果发送出去
5.POSTROUTING:最后节点


节点示意图

这个应用有个特别著名的程序,就是iptables,这个咱们很多时候用在防火墙。具体实现就是在那5个节点埋函数,功能主要分为连接跟踪,数据包过滤,网络地址转换,数据包修改几类。

其实这个负载均衡思路也很好想了,简单的而言,就是请求进来后,咱们转发的时候,去按照每台机器的情况,转发给比较闲的机器而已。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容