GEODNS GeoIP

GeoDNS 是什么,可以说是SLB + IP Geolocation + DNS View 组合
https://github.com/abh/geodns
我在A 国有一台server ,B 国有另一台server



我要让A 国的人直接存取A 国的server,B 国的人就存取B 国的server,达到快速浏览



本身Server Load Balanced 就是分散负载的功能,加上IP Geo 我就可以知道来源IP 是那个国家的,而将流量导过去,再靠DNS 的view 功能就可以回应该回应的ip



单独用IP Geo + DNS view 其实就有GeoDNS 的概念,但就少了判断server 是不是挂了的功能,会是美中不足的地方。

如何用BIND, GeoIP, Nginx, Varnish来创建你自己的高效的CDN网络?
CDN,意思是Content Distrubtion Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡,全地域的概念可以是全国,也可以是全世界。由统一的DNS服务器进行地址转发,选择离用户最近的地区服务器进行负载均衡。本质上是从一个机房内的负载均衡扩展到了全世界范围内的负载均衡。同时可以将本地化的内容,由当地的服务器实现。做浏览器的地区自动选择。
比如在中国,被人为划分成两大区域,北方是网通,南方是电信。这两个网络之间互访是比较慢的。作为大型网站,一种解决办法是将全部服务器架设在双线或三线ISP处,由ISP来提供路由上的选择。这样做,线路的成本会比较高。另一种办法就是将服务器架设在两边,南方一台,北方一台,然后由服务器自己选择,如果IP在电信,就转发请求到南方的服务器,如果是网通就转发到北方的服务器。



你需要下载如下软件以实现上述功能
Nginx,BIND,GeoIP,Varnish



https://www.php.net/manual/zh/book.geoip.php



未使用CDN缓存网站的过程为:




  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址;

  2. LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期);

  3. ROOT DNS将域名授权dns记录回应给 LocalDns;

  4. LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址;

  5. 域名授权dns 查询域名记录后,回应给 LocalDns;

  6. LocalDns 将得到的域名ip地址,回应给 用户端;

  7. 用户得到域名ip地址后,访问站点服务器;

  8. 站点服务器应答请求,将内容返回给客户端。



使用了CDN缓存后的网站的访问过程变为:




  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址;

  2. LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期);

  3. ROOT DNS将域名授权dns记录回应给 LocalDns;

  4. LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址;

  5. 域名授权dns 查询域名记录后(一般是CNAME),回应给LocalDns;

  6. LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址;

  7. 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns;

  8. LocalDns 将得到的域名ip地址,回应给用户端;

  9. 用户得到域名ip地址后,访问站点服务器;

  10. CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)



CDN层,这层是位于用户端和站点服务器之间。



智能调度DNS(比如f5的3DNS)



智能调度DNS是CDN服务中的关键系统。当用户访问加入CDN服务的网站时,域名解析请求将最终由智能调度DNS负责处理。它通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户可以得到快速的服务。
同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等,确保将用户的请求分配到就近可用的节点上.



缓存功能服务



负载均衡设备(如lvs,F5的BIG/IP)
内容Cache服务器(如squid)
共享存储(根据缓存数据量多少决定是否需要)



为了能让访客访问到最快的服务器,可以在DNS上动手脚。有一些DNS服务商如dnspod可以根据DNS查询者的位置,给出相应的DNS解析结果。



自己搭建DNS服务器,也可以实现类似效果。在 BIND 9.10 中,提供了 GeoIP 的功能,利用 GeoIP 库查询访客IP所在区域,根据区域给出结果。


Category web