DNS域名解析负载均衡
DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。人们在通过浏览器访问网站时只需要记住网站的域名即可,而不需要记住那些不太容易理解的IP地址。
在DNS系统中有一个比较重要的的资源类型叫做主机记录也称为A记录,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
如果你有一个自己的域名,那么要想别人能访问到你的网站,你需要到特定的DNS解析服务商的服务器上填写A记录,过一段时间后,别人就能通过你的域名访问你的网站了
Domain Name System
一种能进行主机名到IP地址转换的目录服务,这就是域名系统(Domain Name System),DNS协议运行在UDP之上,使用端口53
DNS采用分布式设计方案,DNS服务器分为四类:
- 根DNS服务器。
- ***域DNS服务器。这些服务器负责***域名,如com,org,net,edu和gov以及国家的***域名,如uk,fr,ca,jp。
- 权威DNS服务器。这些服务器记录了主机名到IP地址的映射关系。
- 本地DNS服务器(local DNS server)
DNS查询有两种方式:
- 递归查询
- 迭代查询
从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的
DNS解析过程:
神奇的解释权机制(SOA)
根服务器拥有一切域名的起始解释权,但是如果你去问根服务器它是不会直接告诉你最终答案的。因为如果它要存储所有的记录,那它也太累了,这个负载和开销是惊人的。那它会告诉你什么呢?它会告诉你应该去问谁,也就是它授权下一级服务器来解答你的问题。拟人化这个过程
- 我: root, root 告诉我, segmentfault.com 怎么走?
- root: 呵呵,你可以去问.com的dns服务器,地址是xxxxxx
- 我: .com, .com 告诉我,segmentfault.com 怎么走?
- .com: 呵呵,你可以去问segmentfault.com的dns服务器(dnspod之类的),地址是xxxxxx
- 我: dnspod, dnspod 告诉我,segmentfault.com 怎么走?
- dnspod: 拿着 xxxxxx,走你
DNS负载均衡工作原理
利用DNS工作原理处理负载均衡的工作原理图:
由上图可以看出,在DNS服务器中应该配置了多个A记录,如:
- www.apusapp.com IN A 114.100.20.201;
- www.apusapp.com IN A 114.100.20.202;
- www.apusapp.com IN A 114.100.20.203;
每次域名解析请求都会根据对应的负载均衡算法计算出一个不同的IP地址并返回,这样A记录中配置多个服务器就可以构成一个集群,并可以实现负载均衡。上图中,用户请求www.apusapp.com,DNS根据A记录和负载均衡算法计算得到一个IP地址114.100.20.203,并返回给浏览器,浏览器根据该IP地址,访问真实的物理服务器114.100.20.203。所有这些操作对用户来说都是透明的,用户可能只知道www.apusapp.com这个域名
优缺点
DNS域名解析负载均衡有如下优点:
- 将负载均衡的工作交给DNS,省去了网站管理维护负载均衡服务器的麻烦。
- 技术实现比较灵活、方便,简单易行,成本低,使用于大多数TCP/IP应用。
- 对于部署在服务器上的应用来说不需要进行任何的代码修改即可实现不同机器上的应用访问。
- 服务器可以位于互联网的任意位置。
- 同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成距离用户地理最近的一个服务器地址,这样就可以加速用户访问,改善性能。
DNS域名解析也存在如下缺点:
- 目前的DNS是多级解析的,每一级DNS都可能缓存A记录,当某台服务器下线之后,即使修改了A记录,要使其生效也需要较长的时间,这段时间,DNS仍然会将域名解析到已下线的服务器上,最终导致用户访问失败。
- 不能够按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以负载均衡效果并不是太好。
- 可能会造成额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。
有哪些DNS服务商支持负载均衡呢?
这是一种比较高级的服务,一般域名注册商的dns服务器不会支持,目前我已知支持它的服务商有
- AWS Route 53
- NSONE
- Dyn
- dnspod
- 万网