当前位置: 首页 > news >正文

cdn 内容分发网络

cdn 内容分发网络

CDN的全称是Content Delivery Network,即内容分发网络。
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

服务模式

内容分发网络是一种新型网络内容服务体系,其基于IP网络而构建,基于内容访问与应用的效率要求、质量要求和内容秩序而提供内容的分发和服务。而从广义的角度,CDN代表了一种基于网络而构建的高质量、高效率、具有鲜明网络秩序的网络应用服务模式。

简单地说,内容分发网络是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要求,而内容管理和全局的网络流量管理是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

总的来说,内容服务基于缓存服务器,也称作代理缓存,它位于网络的边缘,距用户仅有"一跳"之遥。同时,代理缓存是内容提供商源服务器的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。

主要优势

在传统的动态系统的访问中,用户对网络的请求过程,一般需要经过网络中多台路由器的传输,最终将发送的请求交于动态系统来处理,但是由于IP网络本身的“尽力而为的原则”、网络链路中复杂的环境及硬件的不可靠性的确实存在,致使用户要出现重复发送的请求的现状,所以最终导致用户的请求在提交的过程中出现等待、数据加载时间过长的一些现象的普遍存在,这些在线提交式系统的缓慢直接地影响到办公人员的工作效率,这也是制约着很多大型企业在协同办公OA、ERP、SAP等信息化建设中,出现最多的问题。

而CDN分发解决方案解决了与静态网站相关的性能和可靠性问题,而在当今在线业务体验中,与分发静态和动态元素和应用相关的独特挑战,则由速网的动态网站加速来解决。

CDN能几乎涵盖国内所有线路。而在可靠性上, CDN 在结构上实现了多点的冗余,即使某一个节点由于意外发生故障,对网站的访问能够被自动导向其他的健康节点进行响应。CDN能轻松实现网站的全国铺设,不必考虑服务器的投入与托管、不必考虑新增带宽的成本、不必考虑多台服务器的镜像同步、不必考虑更多的管理维护技术人员。

使用CDN的好处

  1. 不用担心自己网站访客,在任何时间,任何地点,任何网络运营商,都能快速打开网站。
  2. 各种服务器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。
  3. 给网站直接带来的好处就是:流量,咨询量,客户量,成单量,都会得到大幅度提升。

技术原理

CDN的基本原理为反向代理,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个节点服务器。通过部署更多的反向代理服务器,来达到实现多节点CDN的效果。

在描述CDN的实现原理,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

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

由上可见,用户访问未使用CDN缓存网站的过程为:

  • 用户向浏览器提供要访问的域名;
  • 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
  • 浏览器使用所得到的IP地址,向域名的服务主机发出数据访问请求;
  • 浏览器根据域名主机返回的数据显示网页的内容。

通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,下面让我们看看访问使用CDN缓存后的网站的过程:

在这里插入图片描述
通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:

1、用户向浏览器提供要访问的域名;
2、浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。
3、此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
4、缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
5、缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,另一方面把获取的数据返回给客户端,完成数据服务过程;
6、客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后,用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问),又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务,下面是CDN网络实现的具体操作过程。

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

实际工作内容

目前cdn技术还是在比较大的企业内使用-比如阿里、腾讯,运维工作比较倾向于web界面的配置,例如对缓冲策略的配置,当然物理层和应用层下的其他层也需要相应的运维工作,如果想从事相关的工作,可以了解学习一下。
cdn技术的实现离不开虚拟软件的帮助,cdn如何动态调度,各个节点的缓冲应该使用那些中间件,这些每个企业都有自己的选型,如果想要从事相关工作,可以使用cdn集成商的云服务,面试以及工作的话肯定会涉及到的,毕竟互联网技术都差不多,无中生有都很难一个企业的产品功能和配置大多都相似;

再多说一句,找cdn工作的话,请一定要用一下cdn集成商的产品(看看里面有哪些配置,有些名称是通用的,要知道)。正常来说面试官都是在工作的,除了正在解决客户问题,要么就是等客户问过来在解决问题,面试问题的话都是工作经常出现的或者用到的,所以才会脱口而出,然而这些问题互联网上早已有对应的官方回答,记住它,你的面试将一帆风顺。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Cesium 高德地图暗黑化
  • LangChain(八)构建多Agent的AI系统-实战!
  • JavaScript模块化
  • 数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
  • java使用责任链模式进行优化代码
  • 使用腾讯云域名解析实现网站重定向
  • 程序编译和链接
  • 032-GeoGebra中级篇-列表与集合(list and set)及常用操作大全
  • latex换行\left[和\right]编译报错-解决方案
  • JavaScript 打印 V 和倒 V 图案的程序(Program to print V and inverted-V pattern)
  • 【前端面试】七、算法-迭代器和生成器
  • 【Stable Diffusion】(基础篇九)—— 扩展
  • 黑客的收入到底怎么样?
  • 物理笔记-八年级上册
  • Springcloud物流配送后台-计算机毕业设计源码69809
  • 【前端学习】-粗谈选择器
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • C语言笔记(第一章:C语言编程)
  • docker-consul
  • JavaScript函数式编程(一)
  • javascript面向对象之创建对象
  • Java编程基础24——递归练习
  • uni-app项目数字滚动
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 构建二叉树进行数值数组的去重及优化
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记一次和乔布斯合作最难忘的经历
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 项目实战-Api的解决方案
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 智能合约Solidity教程-事件和日志(一)
  • 【干货分享】dos命令大全
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (ros//EnvironmentVariables)ros环境变量
  • (二)springcloud实战之config配置中心
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)php投票系统 毕业设计 121500
  • (十六)视图变换 正交投影 透视投影
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .md即markdown文件的基本常用编写语法
  • /tmp目录下出现system-private文件夹解决方法
  • ::前边啥也没有
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @Validated和@Valid校验参数区别
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [android] 手机卫士黑名单功能(ListView优化)
  • [BetterExplained]书写是为了更好的思考(转载)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C/C++]数据结构 循环队列