Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

面试官:如何理解CDN?说说实现原理? #143

Open
linwu-hi opened this issue Jul 30, 2023 · 0 comments
Open

面试官:如何理解CDN?说说实现原理? #143

linwu-hi opened this issue Jul 30, 2023 · 0 comments
Labels

Comments

@linwu-hi
Copy link
Owner

linwu-hi commented Jul 30, 2023

面试官:如何理解CDN?说说实现原理?

一、CDN是什么?

CDN (全称 Content Delivery Network),即内容分发网络。

CDN是构建在现有网络基础之上的智能虚拟网络,通过部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户能够就近获取所需内容,从而降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

简单来说,CDN就是根据用户位置分配最近的资源,让用户在上网的时候不用直接访问源站,而是访问离他“最近的”一个CDN节点,该节点其实是缓存了源站内容的代理服务器。如下图所示:

二、CDN实现原理

在没有应用CDN时,我们使用域名访问某个站点的路径为:

用户提交域名→浏览器对域名进行解释→DNS解析得到目的主机的IP地址→根据IP地址发出请求→得到请求数据并回复

应用CDN后,DNS解析不再返回IP地址,而是一个CNAME (Canonical Name) 别名记录,指向CDN的全局负载均衡。

CNAME实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关键。

负载均衡系统

由于没有返回IP地址,本地DNS会向负载均衡系统发送请求,然后进入CDN的全局负载均衡系统进行智能调度:

  • 看用户的IP地址,查表得知地理位置,找相对最近的边缘节点。
  • 看用户所在的运营商网络,找相同网络的边缘节点。
  • 检查边缘节点的负载情况,找负载较轻的节点。
  • 其他因素,如节点的“健康状况”、服务能力、带宽、响应时间等。

综合上述因素,找到最合适的边缘节点,然后将该节点返回给用户,用户就能够就近访问CDN的缓存代理。

整体流程如下图所示:

image

缓存代理

缓存系统是CDN的另一个关键组成部分,缓存系统会有选择地缓存那些最常用的资源。

其中有两个衡量CDN服务质量的指标:

  • 命中率:用户访问的资源恰好在缓存系统里,可以直接返回给用户,命中次数与所有访问次数之比。
  • 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比。

缓存系统也可以划分成层次,分为一级缓存节点和二级缓存节点。一级缓存配置高一些,直连源站,二级缓存配置低一些,直连用户。

回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,这样可以有效地减少真正的回源。

现在的商业CDN命中率通常在90%以上,相当于把源站的服务能力放大了10倍以上。

三、总结

CDN的目的是为了改善互联网的服务质量,通俗一点说其实就是提高访问速度。

CDN构建了全国、全球级别的专网,让用户就近访问专网里的边缘节点,降低了传输延迟,实现了网站加速。

通过CDN的负载均衡系统,智能调度边缘节点提供服务,相当于CDN服务的大脑,而缓存系统相当于CDN的心脏,缓存命中直接返回给用户,否则回源。

参考文献

@linwu-hi linwu-hi added the HTTP label Jul 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant