DNS / 负载均衡

DNS

域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。

它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

DNS负载均衡一般用于地理级别的负载。

优点:实现简单透明。

缺点一,对改动有一定延迟,因为有dns缓存;缺点二,灵活度低,因为无法感知后端服务器的状态并基于此做负载 。

app端访问可以实现私有http-dns协议,优缺点和正常的dns负载相反。

【如何查看系统DNS服务器地址】https://jingyan.baidu.com/article/c74d6000cc0a1e0f6b595d77.html



负载均衡

(知乎 Hevin 的解释通俗易懂 https://zhuanlan.zhihu.com/p/32841479)

负载均衡是网络基础架构的关键组件。通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。


知乎 Hevin

在这里用户是直接连到web服务器,如果这个服务器宕机了,那么用户自然也就没办法访问了。


另外,如果有很多用户试图访问服务器,超过了其能处理的极限,就会出现加载速度缓慢或根本无法连接的情况。

- 在后端引入一个负载均衡器和至少一个额外的web服务器可以缓解这个故障。通常情况下,所有后端服务器能保证提供相同的内容,以便用户无论哪个服务器响应,都能收到一致的内容。

【脑洞1:把服务器比作一台笔记本,笔记本只有1个usb接口,然而要外接键盘还要接鼠标的蓝牙接收器,还要插其他的东西,需要4个接口。怎么办?在现有的usb接口上链接一个分线器,上面可以容纳很多usb接口。这里的分线器就相当于负载均衡器。

从后端引入一个负载均衡器,后端仍然只需要开一个门,如果从后端引入两个服务器不用负载均衡器,后端需要开两个门。听研发说,给后端开门挺麻烦的。

脑洞2:有住院的人应该有过这样的体验,护士每天都会给病人抽血,由于抽血的次数比较多,一般会在抽血处放一个类似『后门』的东西,下次抽血只需要打开这个『后门』接着抽血就可以了。不需要戳得手臂上都是洞,方便快捷。

原理应该都差不多。】

『“阿里云负载均衡SLB采用集群部署,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。其中四层负载均衡通过LVS(Linux Virtual Server)+ keepalived的方式实现,七层负载均衡通过Tengine(淘宝网发起的Web服务器项目,在Nginx的基础上,针对有大访问量的网站需求进行了优化)实现。云技术网提供负载均衡技术支持服务。”』


采用一台负载均衡器的情况

从图里可以看到,用户访问负载均衡器,再由负载均衡器将请求转发给后端服务器。在这种情况下,单点故障现在转移到负载均衡器上了。这里又可以通过引入第二个负载均衡器来缓解,但在讨论之前,我们先探讨下负载均衡器的工作方式。

负载均衡器可以处理什么样的请求?

负载均衡器的管理员能主要为下面四种主要类型的请求设置转发规则:

HTTP

HTTPS

TCP

UDP

负载均衡器如何选择要转发的后端服务器?

【准备工作:预先配置一个规则,有一个健康服务器池,判断后端服务器是否「健康」的方法】

负载均衡器一般根据两个因素来决定要将请求转发到哪个服务器。首先,确保所选择的服务器能够对请求做出响应,然后根据预先配置的规则从健康服务器池(healthy pool)中进行选择。

因为,负载均衡器应当只选择能正常做出响应的后端服务器,因此就需要有一种判断后端服务器是否「健康」的方法。为了监视后台服务器的运行状况,运行状态检查服务会定期尝试使用转发规则定义的协议和端口去连接后端服务器。如果,服务器无法通过健康检查,就会从池中剔除,保证流量不会被转发到该服务器,直到其再次通过健康检查为止。

负载均衡算法

负载均衡算法决定了后端的哪些健康服务器会被选中。几个常用的算法:

Round Robin(轮询):为第一个请求选择列表中的第一个服务器,然后按顺序向下移动列表直到结尾,然后循环。

Least Connections(最小连接):优先选择连接数最少的服务器,在普遍会话较长的情况下推荐使用。

Source:根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。

如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器。可以通过 Source 算法基于客户端的 IP 信息创建关联,或者使用粘性会话(sticky sessions)。

最后,想要解决负载均衡器的单点故障问题,可以将第二个负载均衡器连接到第一个上,从而形成一个集群。

【什么是ip_hash?

ip_hash是根据用户请求过来的ip,然后映射成hash值,然后分配到一个特定的服务器里面;

使用ip_hash这种负载均衡以后,可以保证用户的每一次会话都只会发送到同一台特定的Tomcat里面,它的session不会跨到其他的tomcat里面去的;】


两个负载均衡器形成一个集群

当主负载均衡器发生了故障,就需要将用户请求转到第二个负载均衡器。因为 DNS 更改通常会较长的时间才能生效,因此需要能灵活解决 IP 地址重新映射的方法,比如浮动 IP(floating IP)。这样域名可以保持和相同的 IP 相关联,而 IP 本身则能在服务器之间移动。

一个使用浮动 IP 的负载均衡架构示意图:



参考资料:

知乎 Hevin  https://zhuanlan.zhihu.com/p/32841479

《淘宝技术这十年》

你可能感兴趣的:(DNS / 负载均衡)