一种比较简单的方法是基于地理位置的routing,即,对于DNS请求总是返回距离请求者最近的节点。实现方法很多,不过最终都依赖于一个CIDER到地理位置的表。
这里的地理位置,可以是经纬度,也可以是就近城市的代号。
DNS服务器,接收到请求之后,会根据用户IP找到最匹配的一项,并且计算距离这个用户最近的Edge服务器,将这个最优点的IP返回给用户。
这种方法并不是最优的。因为地理位置上最近的两个点,延迟可能反而很高。比如欧洲某些国家到美国东海岸的延时可能相当小。
或者某个网络服务提供商内部延迟比较小,北美自己的教育网内部延迟比较小,等等。
还有就是根据用户AS号码和AS之间的样本延迟来估计延迟的。这种做法比较复杂:比如,我有很多分布在世界各地的主机,这些主机之间可以周期性的计算延迟,这样就能动态的获得AS-AS之间的延迟。由于网络的特殊性质,这种方法比起前一种要准确得多。
DNS是用户请求的第一步,所以针对DNS查询结果的优化是一个很重要的课题。
DNS对于CDN还有其他功用,比如负载均衡(load balancing)(使用RR或者WRR)和DNS failover。我不是很熟悉,就不多说了。
CDN是一种重要的优化方法,它与DNS相结合,使用户能够以最小的延迟访问节点。
一个更简单的方法是基于地理路由,也就是说,对于DNS请求,总是返回到请求者最近的节点。实现方法有很多,不过最终都依赖于一个CIDER到地理位置的表。
这里的地理位置可以是纬度和经度,也可以是附近城市的代号。
DNS服务器在收到请求后,根据用户的IP找到最匹配的项目,并计算出离用户最近的边缘服务器,并将最佳IP返回给用户。
这种方法不是最佳的。由于地理位置上的两个最近点,延迟可能非常大。例如,从一些欧洲国家到美国东海岸的延误可能很小。
或者网络服务提供商的内部延迟相对较小,北美自身教育网络的内部延迟相对较小,等等。
另一种方法是根据用户as number和as之间的样本延迟来估计延迟。这种方法更复杂:例如,我在世界各地分布了许多主机,它们可以定期计算这些主机之间的延迟,以便动态地获得as-as之间的延迟。由于网络的特殊性,该方法比以前的方法更准确。
DNS是用户请求的第一步,因此DNS查询结果的优化是一个非常重要的课题。
DNS还具有用于CDN的其他功能,例如负载平衡(使用rr或wrr)和DNS故障转移。我不太熟悉,我们不要说太多。
CDN使用了DNS的CNAME、edns-client-subnet和负载均衡等技术。
1.CNAME
在用户访问某网页、视频等资源时,会将域名指向另一个CDN中定义的域名,再解析成另一个IP地址来供客户端进行访问,使客户端访问时进行加速。
2.edns-client-subnet
智能DNS解析是CDN重要的组成部分,是根据请求用户对同一域名作出相应不同的解析,因此CDN的调度准确性是依靠DNS智能解析的。
在常见的请求场景中,往往十之八九都是来自于资源的访问,那么如何将服务器里的资源js.,css,jpg等静态资源完美的平滑迁移到cdn上,让cdn应对资源的访问,从而减轻对服务器的压力呢?
CDN+OSS+回源服务器
1.申请域名
2.获得一个SSL证书
3.申请一个OSS
第一步:
我们在七牛申请一个OSS对象存储的空间:
第二步:
将其绑定一个域名:
第三步:
1.等待txt验证
第四步:
1.等cdn域名验证通过,将cdn回源到我们开始创建的im-oss空间
至此就完成了cdn与oss的配置,具体流程是 用cdn域名访问静态资源后,如cdn服务器上没有该资源将立即回源到oss,请求oss对象存储里的资源,如果oss也没有该资源,oss将立即回源访问我们的原始服务器抓取文件并存储到oss,并缓存到cdn服务器
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)