全球智能DNS解析实践

1、什么是智能DNS解析 css

如下是百度的解释:前端

DNS策略解析最基本的功能是能够智能的判断访问您网站的用户,而后根据不一样的访问者把您的域名分别解析成不一样的IP地址。如访问者是网通用户,DNS策略解析服务器会把你的域名对应的网通IP地址解析给这个访问者。如访问者是电信用户,DNS策略解析服务器会把您域名对应的电信IP地址解析给这个访问者。

举个例子,咱们有个域名:ab.com,服务器部署在2个机房:中国、美国;当前访问用户的IP为中国,DNS解析会返回一个中国的IP;换之是海外用户,DNS会返回海外地址,这样保证每次用户均可以就近访问,加快访问速度。 nginx

2、为何要使用智能DNS解析web

智能DNS解析使用条件以下:redis

一、对外统一域名访问sql

即全部用户访问的都是统一域名。后端

二、用户分散在多地域,而且网络差别很大 浏览器

多是中国南、北,也多是中国、海外。服务器

这样在使用智能DNS解析后,用户能够就近访问,明显提升访问速度。cookie

3、智能DNS解析的范围

既然是DNS,就得和域名有关,那智能DNS须要将哪些域名作智能解析呢?

一、前端页面

主要指前端页面,即用户直接在浏览器里输入的地址,但不包括里面的js/css,图片内容,由于这些能够经过CDN的方式处理。

二、后端接口

由于前端页面作了DNS解析,所以后端接口至少和前端页面的主域保持一致,由于涉及到登陆状态的检测,具体来讲就是cookie的传递,由于http是无状态的,因此经过cookie来保存状态。

4、具体实践

下面咱们以一个具体的案例来分析智能DNS解析来如何实现。

设想咱们网站用户主要是中国、美国用户,所以服务器部署在中国、美国机房,域名为ab.com。

首先咱们来分析具体有哪些需求:

一、访问链路

A、中国用户访问中国服务

B、中国用户访问美国服务

      由于中国用户也可能须要访问海外的站点

C、外国用户访问外国服务

D、外国用户访问中国服务

      同上面的B同样

二、url规划

     中国和海外的页面都是同一域名,那最终区别也只能经过域名了,通常是不一样的地区加不一样的前缀,像咱们这个案例中,能够这样规划:

ab.com/cn

ab.com/us

     若是web服务器使用的是nginx,在中国机房配一个ab.com的server,再配2个location,大概以下:

location /us{
   proxy_pass {美国服务器集群地址}
}

location /cn{
   proxy_pass {中国服务器集群地址}
}

这里要注意集群地址配置,如今大多数公司前面有个大的负载均衡器,负载均衡器的IP多是不固定,若是是这种状况,则须要一种机制可以在负载均衡器更改IP的状况下能自动更新集群IP,否则可能出现没法访问的状况,咱们线上就发生过样的问题。

海外机房也能够参考中国机房配置。

三、自动跳转

     若是用户每次都要输入ab.com/us或ab.com/cn,体验就差异差,因此咱们须要根据用户的IP自动跳转到相应的机房中。

即若是一个美国用户输入ab.com,会跳转到ab.com/us,还包括具体一个页面的跳转,即访问 ab.com/abc,自动跳转到ab.com/us/abc

若是使用的nginx服务器,可使用GEOIP模块获取用户IP所在国家,而后写上lua脚本作相应的跳转。

5、踩过的坑

一、URL不标准化

     标准化若是没有作到,作起来会很麻烦;

     具体来讲,若是美国的部分页面在中国没有,或者中国某个页面在美国服务器上没有,则会出现有的URL须要跳,有的不须要,则要在代码中作大量的特别处理;

    另外就是要考虑爬虫之类的请求,这类请求无论当前用户来自哪里,都不该该作跳转。

二、URL规范很重要

     若是仅仅是几个机房之间跳转的需求还好,实际状况是有的公司可能有多商城的需求,二者混在一块儿,URL的规范就很重要了,建议以机房为前缀,机房后再加上商城的标识。

      如 ab.com/global/us,ab.com/globl/uk

三、不要和现有业务逻辑耦合在一块儿

     这块的代码通常是在nginx上用lua实现的,若是在nginx上还有其它相关代码,建议二者分开,否则调试、维护起来会很麻烦。

从一次线上故障来看redis删除机制

PHP内存池分析

一次线上Mysql死锁分析

相关文章
相关标签/搜索