赞助商

云存储

又拍云架构师黄慧攀:又拍云CDN技术探秘

由InfoQ 主办的全球软件开发大会(简称QCon)在上海光大会展中心国际大酒店隆重召开。又拍云首席架构师黄慧攀也受邀在会上分享《又拍云CDN技术架构探秘》的主题。

Zoeee Zoeee 2014/07/29

浙江 2013-11-11(中国商业电讯)--11月1日到3日,由InfoQ 主办的全球软件开发大会(简称QCon)在上海光大会展中心国际大酒店隆重召开,这是一次技术开发者的顶级盛宴,又拍云作为国内最大的针对企业级的云服务平台,又拍云首席架构师黄慧攀也受邀在会上分享《又拍云CDN技术架构探秘》的主题。

       分享过程中,黄慧攀着重介绍了又拍云的四大模块——防盗链模块,流量统计模块,缓存调度模块和防攻击模块。
       防盗链模块:防盗链模块在Nginx启动时并没有任何防盗链策略,但会到数据中心获取一份完整的客户域名列表,但针对某个空间域名的具体防盗链策略是未获取的,而是在某个URL请求访问过来的时候触发策略更新动作(该次请求只判断是否是合法的空间域名,如果该URL的空间域名不在客户列表上是不允许被访问的),前往数据中心获取该URL对应空间域名的防盗链策略,并以自定好的数据结构存储于Nginx的共享内存中,下次访问该空间的所有URL都能检索到对应的防盗链策略。也就是说防盗链模块是以按需被动触发、主动更新的模式进行操作,本地的防盗链策略不会跟数据中心保证严格一致,通常会延迟几分钟。因防盗链模块会每间隔几分钟前往数据中心获取一份防盗链策略更新的客户列表,如检测到某个空间域名的防盗链策略有更新,将把本地共享内存中的对应记录标记为“需更新”,当该空间再次有访问请求进来的时候再主动触发一个更新操作。
       流量统计模块:为降低数据统计的数据量,我们采用先在前端进行初步统计一个中间结果再交予数据中心进行大汇总的模式。每个URL访问请求进入Nginx,将通过流量统计模块并把该次请求的内容大小(如:102400字节)记录到该请求对应的空间域名记录下,而不是直接就把这次请求的流量数字报到后端数据中心。在前端的流量统计模块上暂时保留5分钟的记录,每隔5分钟后进行每个空间域名的汇总统计,得到一个中间值再报入到数据中心进行全部节点的汇总统计。这样一来,数据量从几百万条记录降低到每5分钟几百条记录,那么在数据中心的汇总统计就相对简单很多。
缓存调度模块:调度模块在Nginx共享内存中存有几百万条URL信息,这些信息是标记某个URL应该调度到SSD磁盘或者SAS磁盘。这数百万条记录主要通过Nginx内部提供的RbTree 算法进行查找,百万条记录,最多只需20步就能定位到记录。而我们在RbTree算法基础上加入了LRU和MRU算法,以实现在固定范围内对这些URL进行排序操作,当某些URL访问密度明显大于其他URL时,它将被调到SSD磁盘的Squid缓存进行读写。
        虽然每个访问请求都会经过缓存调度模块的判断,但模块的判断速度非常快,不会带来任何延迟。可将热门内容(占访问总量70%以上)都被调度到SSD磁盘上读取,明显提高系统整体性能。
防攻击模块:该模块核心算法跟缓存调度模块类似,都是要对大量的URL进行排序,对访问量大的URL进行判断。如果某个URL的访问频密度超过正常阈值,系统将对此URL的所有请求进行初步屏蔽处理(该次屏蔽以302重定向的方式进行保护,如果该次请求不是浏览器发起的正常访问一般是不会识别302重定向信号,从而可屏蔽掉机器刷新类型的攻击),如情况还继续恶化,系统将禁止该URL的访问请求,每隔5分钟再次审核该URL的请求量是否恢复到正常阈值,自动判断是否可以解除禁止。

        黄慧攀还介绍:“虽然又拍云CDN系统的业务功能较传统的CDN系统复杂,多了好几个模块运算,但对访问请求的处理耗时并没产生影响,可忽略。并且使用到SSD固态硬盘来提供热门内容的缓存服务,整体的服务处理能力还大大增加(前后对比,使用SSD固态硬盘后单台服务器的服务能力提升了1倍多)。
整体系统分为三层,可充分降低数据中心的访问压力。我们还在第二层中间结点部署有图片处理服务器和音频处理服务器的集群,把一部分数据中心工作向外扩,进一步减轻压力并能提高整体系统性能。
又拍云CDN系统上线正式投入服务到今已稳定运行3年多,较我们早年部署的CDN系统有了很大提升。未来我们还将继续完善UpCDN系统,在自动化管理方面加大研发力度(这将涉及到服务器硬件、系统环境和软件部署等方面,需制定软硬件标准和完善的节点监控系统),以实现一个智能化、自动维护的CDN系统。”
评论(4)