首页 > 其他分享 >如何理解CDN?说说实现原理?

如何理解CDN?说说实现原理?

时间:2024-03-27 17:56:20浏览次数:30  
标签:负载 缓存 CDN 用户 访问 理解 原理 节点

一、是什么

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

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

简单来讲,CDN就是根据用户位置分配最近的资源

于是,用户在上网的时候不用直接访问源站,而是访问离他“最近的”一个 CDN 节点,术语叫边缘节点,其实就是缓存了源站内容的代理服务器。如下图:

二、原理分析

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

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

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

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

负载均衡系统

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

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点

  • 看用户所在的运营商网络,找相同网络的边缘节点

  • 检查边缘节点的负载情况,找负载较轻的节点

  • 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等

结合上面的因素,得到最合适的边缘节点,然后把这个节点返回给用户,用户就能够就近访问CDN的缓存代理

整体流程如下图:

缓存代理

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

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

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

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

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

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

三、总结

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

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

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

参考文献

  • https://zh.wikipedia.org/wiki/內容傳遞網路
  • https://juejin.cn/post/6844903890706661389#heading-5
  • https://blog.csdn.net/lxx309707872/article/details/109078783

标签:负载,缓存,CDN,用户,访问,理解,原理,节点
From: https://www.cnblogs.com/smileZAZ/p/18099895

相关文章

  • 对数组方法reduce和map的深入理解,用reduce方法实现map方法
     引言:偶然看到一道面试题,希望可以用reduce方法实现map方法,看过之后发现这是个有趣的逻辑思维题、既要对数组方法有深入理解也要有一定编程能力。一、reduce语法reduce:高阶数组方法,对数组中的所有元素应用一个函数(由你提供),将其减少为单个输出值。arr.reduce((prev,cur,ind......
  • AQS 巨好理解的版本
    AQS同步队列(入口等待队列):(ReentrantLock、ReentrantReadWrite)用于实现独占锁,例如ReentrantLock、ReentrantReadWrite首先,CAS尝试加锁。加锁成功:设置state=1(原来state=0),然后设置独占属性exclusiveOwnerThread=thread()(用于可重入锁判断)加锁失败:只能干什么两件......
  • ThreadPool-线程池使用及原理
    1.线程池使用方式示例代码://一池N线程Executors.newFixedThreadPool(int)//一个任务一个任务执行,一池一线程Executors.newSingleThreadExecutorO//线程池根据需求创建线程,可扩容,遇强则强Executors.newCachedThreadPool()//自定义线程池方式newThreadPoolExec......
  • 深入理解 React 中的 children props 和 render props
    深入理解React中的childrenprops和renderprops在React中,childrenprops和renderprops是两种常见的组件复用模式,它们都可以帮助我们更好地组织和复用组件代码。虽然它们的实现方式有所不同,但都能够有效地实现组件之间的数据传递和功能共享。childrenpropsch......
  • 布隆过滤器原理及应用场景
    布隆过滤器(BloomFilter)是一种高效的数据结构,用于快速判断一个元素是否属于一个集合中(会有误判),它以极低的内存消耗和高效的查找速度而著称。布隆过滤器的原理基于哈希函数和位数组。原理解释:初始化:布隆过滤器由一个长度为m的位数组(bitarray)和k个哈希函数(hashfunction)组......
  • 我的芯片测试理解
    前言:芯片测试:确保芯片在生产和使用过程中的稳定性和可靠性 (芯片的质量和性能)。测试芯片主要分为:解密芯片测试,功耗测试,性能测试,可靠性测试,芯片烧录和老化测试。一、解密测试解密测试:通过分析和测试来验证解密芯片的正常运行,它包括对芯进行开放测试(指芯片解密和破解,用来了解......
  • 【Linux】Nginx reload原理
    当我们更改了nginx.conf配置文件以后,向master父进程发送SIGHUP信号或者执行nginx-sreload,master父进程会用新的配置文件启动新的worker子进程,此时新的worker子进程与旧的worker子进程是并存的,旧的worker子进程在正常的情况下在处理完老的请求连接以后会关闭这个连接和旧的worker......
  • CAN盒上接120Ω电阻的作用及原理
    提高信号质量:通过在CAN总线两端各加一个120欧姆的终端电阻,可以使总线的两端阻抗与通讯电缆的阻抗相同,这有助于减小信号的失真和抖动,从而保证信号传输的准确性。提高抗干扰能力:120欧姆的终端电阻能够确保高频低能量的信号迅速衰减,减少对原信号的干扰,这对于提高整个系统的抗......
  • 计数排序:原理、应用与性能分析
    计数排序:原理、应用与性能分析一、引言二、计数排序的基本原理三、计数排序的算法流程四、计数排序的伪代码五、计数排序的C代码示例六、计数排序的应七、计数排序的性能分析八、未来展望九、结论一、引言在计算机科学中,排序算法是一种重要的算法,它广泛应用于各种数......
  • COMP9021编程原理
    COMP9021编程原理2024年第1学期课业1价值13马克,第7周星期一上午10点到期1.一般事项1.1目标本任务的目的是:•培养解决问题的技能。•以中型Python程序的形式设计和实现问题的解决方案。•练习算术计算、测试、重复、列表和字符串的使用。•使用程序编程。1.2标记该课业价......