一、名词介绍
PCDN的英文全称是P2P CDN,中文名叫P2P内容分发网络,是以P2P技术为基础,通过挖掘利用边缘网络海量碎片化闲置资源而构建的低成本高品质内容分发网络服务。你可以通过集成PCDN SDK(以下简称SDK)接入该服务后能获得等同(或略高于)CDN的分发质量,同时显著降低分发成本。
二、相关技术分析
PCDN是P2P CDN组合的技术,CDN这里就不解释了,一般用来加速访问存放静态资源,有源站、边缘节点等概念,CDN访问链路大概流程如下:
1、用户访问附近的CDN边缘节点,边缘节点如果有内容直接返回,没有则往下;
2、边缘节点访问CDN中心节点,如果中心节点有内容则返回,没有则往下;
3、中心节点访问源站,从源站得到内容后缓存;
4、同样边缘节点也会缓存从中心节点返回的内容;
当然实际上可能比这更复杂,CDN节点不止2层,还有过期时间等。
而P2P是一种点对点的技术,一个典型的应用是迅雷,如果不用P2P,则所有下载都有到迅雷的服务器上下载,这样会带来几个问题:
1、服务器成本高;
2、访问速度得不到保障;
有了P2P之后,用户发起一次下载就可以查找附近有没其它迅雷的客户端然后看这些客户端有没下载这些文件,如果有直接从附近客户端的机器上下载了,这里的客户端是指用户所在的电脑。
三、PCDN的原理
首先说明如果要使用PCDN,则必须集成PCDN的SDK,用于屏蔽实际访问的细节;
这是网上一张PCDN的访问链路图,可能比较复杂,接下来会讲下用户访问PCDN的流程,会忽略图中一些不太重要的步骤;
1、用户发起请求到PCDN调度系统;
2、PCDN调度系统返回路由信息,包括路由器及最终从哪里下载的节点地址;
3、用户向2返回的路由器地址请求,路由器查询2返回的节点地址信息返回给用户;
4、用户向3返回的地址下载资源;
和CDN访问有几点差别:
1、所有使用方既是客户端也是服务端,一方面它可以向PCDN发起请求,另一方面它还可能供其它客户端下载,这就是P2P技术的应用;
2、多了个CDN调度系统,用来做全局路由,即将用户的请求分发到相应的路由器上;
3、路由器缓存节点信息,即哪些PCDN客户端下载过哪些内容,然后记录路由信息,下次其它节点要下载同样的资源就可以从这里下载了;
这里有几个问题要注意:
1、安全性
作为PCDN的客户端随便就可以让其它机器从本机下载内容了,不过只是下载我下载过的CDN内容应该还好;
2、流量
前面说了作为PCDN的客户端承担了服务端的功能,这样就会有一下的带宽成本,这块不知道厂商们是怎么解决利益问题的,是补贴钱还是其它,当然还有其它办法,像流量控制,即控制同时下载的任务数,然后超出的还是回源到厂商的CDN服务器上。
3、质量保证
整个下载过程相对以前链路可能更短了,但可能更容易出错,所以需要做很多容错的设计,并且要控制好重试次数,不要让用户找了几个节点都没下载到的情况。
四、总结
PCDN是一种P2P CDN的技术,主要用来解决成本和质量的问题,核心思想是去除单点,让用户也参与到其中来,这和分布式系统设计的思想原理是一致的,所以说任何新的技术背后的原理都是一样的。