shoutingwei / frontend-learning

0 stars 0 forks source link

CDN的实现原理? #23

Open shoutingwei opened 6 years ago

shoutingwei commented 6 years ago

传统方式

  1. 用户向浏览器提供要访问的域名。
  2. 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址。(在何处进行,函数库从何而来)
  3. 浏览器使用所得到的IP地址,向域名的服务器发出数据请求。
  4. 浏览器根据返回数据显示内容。

CDN方式

  1. 用户向浏览器提供要访问的域名
  2. 浏览器调用域名库进行解析,由于CDN对域名解析过程做了调整,所以域名解析得到其对应的CNAME记录。再次对CNAME进行域名解析可以得到实际IP。在此过程中,使用全局负载均衡DNS解析,如果能根据地理位置解析,就能就近访问。
  3. 解析得到CDN缓存服务器ip地址,向缓存服务器发出请求。
  4. 缓存服务器根据浏览器提供的要访问的域名解析得到实际ip地址,再由缓存服务器向此ip发出请求。
  5. 缓存服务器获取内容后一方面本地保存,另一方面返回给浏览器。
  6. 客户端得到缓存服务器返回的数据以后显示出来。
shoutingwei commented 6 years ago

实际操作过程

  1. 作为ICP,需要把域名解释权交给CDN运营商,其他方面不需要进行修改。也就是,ICP修改自己域名的解析记录,使用CNAME方式指向CDN网络Cache服务器地址。(解释权不在DNS服务器?
  2. 作为CDN运营商,首先要为ICP的域名提供公开的解析,为了实现 sortlist ,一般是把ICP的域名解释结果指向一个CNAME记录。当要进行sortlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊的处理,使DNS服务器,在接受到客户端的请求时可以根据客户端的ip地址,返回相同域名的不同ip。
  3. 由于从cname获得ip地址并带有hostname,请求达到Cache后,Cache必须知道源服务器的ip地址,所以在CDN运营商内部维护一个内部DNS服务器用于解释用户所访问域名的实际ip地址。
  4. 维护内部DNS服务器的同时,需要维护一个台 授权服务器 ,控制哪些域名可以缓存或者不缓存,以免发生 开放代理 的情况。