当前位置: 首页 > 科技观察

DNS在架构设计中的巧妙运用

时间:2023-03-17 18:03:18 科技观察

1、从客户端到服务端的一个http请求的整个执行过程是怎样的?一个典型的流程如下:(1)客户端通过域名daojia.com-server请求dns(2)dns-server返回域名对应的外网ip(1.2.3.4)(3)客户端访问外网ip(1.2.3.4)到反向代理nginx(4)反向代理nginx配置多个后端web-server服务于内网ip(192.168.0.1/192.168.0.2)(5)请求最终落到某个web-server去处理,第一步域名daojia.com到外网ip(1.2.3.4)的转换发生在整个服务器之外,服务器不可控。在架构设计的时候,能巧妙的利用dns做什么,就是本文要讨论的问题。2.反向代理水平扩展在典型的互联网架构中,web层的性能可以通过增加web-server来扩展,但是反向代理nginx仍然是整个系统的最佳切入点。如果系统吞吐量超过nginx的性能限制,扩容困难,此时需要dns-server配合横向扩展。具体做法是:可以在同一个域名的dns-server上配置多个nginx外网ip,每次dns解析请求都会轮询返回不同的ip,从而实现nginx的水平扩展。这种方法称为“dns轮询”。3、web-server负载均衡由于“dnspolling”可以将同一个域名的流量平均分配到不同的nginx,所以也可以用来做web-server负载均衡:(1)去掉nginx层(2)改多个web-server的内网ip直接到外网ip(3)在dns-server中轮询解析域名对应的外网ip。与nginx相比,dns实现负载均衡的优缺点是什么?优点:使用第三方dns实现,服务器架构不用动,少了一层(比nginx差很多),而且nginx做反向代理时,之间有keep-alive检测机制web-server,当web-server挂了,可以自动迁移流量。需要很长时间才能生效,nginx是服务器完全可控的部分。Web服务器扩展更实时、更方便。由于以上两个原因,架构中很少取消反向代理层,直接使用DNS来实现负载均衡。4.用户就近访问在《缘起》一文中提到,http请求第一步中域名到外网IP的转换发生在整个服务器之外,服务器是不可控的,所以如果你想实现“根据客户端ip分配最近的服务器机房访问权限”,只能在dns-server上做:(1)??电信用户要访问某服务器资源(2)浏览器发起服务器域名解析向dns-server请求(3)dns-server识别访客为电信用户(4)dns-server返回电信机房的nginx外网ip给访客(5)访客返回最近的服务器ip根据用户ip,也就是所谓的“智能dns”,最常用于CDN和多机房多活。反向代理层去除反向代理层r、利用dns实现负载均衡智能dns,根据用户ip访问最近的服务器【本文为专栏作者《58神剑》原稿,转载请联系原作者】点此查看更多好文章由这位作者