服务好“最后一公里”,高效CDN架构经验

标签: 服务器集群-云计算 | 发表时间:2014-02-17 17:04 | 作者:神刀
出处:http://www.shellsec.com

国内,随着互联网的高速发展,因为各大通信公司的政策,造成了南电信北联通互通有局限性,再加上大小且质量参差不齐的运营商,在这特殊的氛围的互联互通下号称“八线合一”的机房开始崭露头角。互联网的广泛性使得网民分散在全国各地,由于全国地区的经济发展和互联网建设的不平衡,实际网民的体验往往受限于最后一公里的速度。在技术大喷井的年代,一些无聊或者有目的黑客攻击也开始涌现,无论是渗透还是DDoS攻击都非常频繁,时刻威胁着网站的安全…… 上述种种问题,作为应用服务提供商,我们要如何解决此类问题呢?归根结底就是要充分利用好CDN(Content Delivery Network,即内容分发网络)。

CDN作用

缓存代理

缓存代理类似内容提供商源数据中心的一个透明镜像,这些内容可以在边缘服务器中缓存和分发,对于普通的网络用户来讲,它通过智能DNS的筛选,用户的请求被透明地指向离他最近的省内骨干节点,最大限度的缩短用户信息的传输距离。在任何时间、地点或者不同的运营商之间(尤其在中国),快速响应用户请求。 它是通过在网络各处放置节点服务器,所以无需更改源站的网络拓扑,而是根据智能路由和用户就近原则匹配,从而确保了内容快又稳定的传输,大大提高了用户访问网站的响应速度。

路由加速

CDN服务初衷是确保快速可靠地分发静态内容,相对于动态内容来说,由于动态内容必须长连接来操持连接和通讯,只是用户到服务商之间的链路和质量都无法控制。因此为了提供快速的网络体验,有必要事先设置一些最佳路由。如省内骨干网,双线机房,以改善用户的网络体验。在中国典型的互联互通问题上,网络游戏加速就是一些最佳实践。

安全防护

利用好了CDN网络,无论面对是渗透还是DDoS攻击,攻击的目标大都会被指向到了CDN,进而保护了用户源站。因为CDN是分布式的,所以即使遭受DDoS攻击,也具备分散性,大大减少了源站收到毁灭打击的可能性。在架构的前期,还可以通过CDN做一些前置的安全保护工作,如拦截SQL注入、XSS跨站、网站挂马、篡改等黑客攻击。

节省成本

CDN节点机房只需要在当地运营商的单线机房,或者带宽相对便宜的城市,采购成本低。由于通过CDN减轻了源站压力,节点越多,源站面对任何时间高峰时的带宽峰值会被平均拉低。从而降低了后端服务器硬件规模和带宽的采购成本。 由于源站服务器规模的减少,后期运维成本也大大减少,可谓是一举多得。 由此可见,为了能够满足全国乃至世界各地和多线路运营商的不同用户都有最好的体验,构建CDN的分布式服务其重要性不言而喻。但是,在面对如何根据自身场景去设计一个CDN架构,或者如何选择以一个适合自己CDN服务提供商,这里面也有许多问题需要考量。

CDN架构

存储介质 vs IO的关系

这里先简单的介绍一下SSD介质的一些考量。SSD作为采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,固态硬盘的全集成电路化、无任何机械运动部件的革命性设计,拥有极高的读取性能。 此环节,基本上不需要与传统的SATA、SAS作性能上的比较,SSD的胜出毫无悬念。而在整体方案中,只需要考虑承受的价格、容量大小(如120GB,160GB,300GB等规格)、是否能够满足设计需求这些问题。 作者建议:如果允许, 能使用SSD,就一定要考虑采用,用空间换性能,提升非常明显。 这里给几个SSD实战的小贴士: 
  • 选择EXT4文件系统+TRIM模式(mount -o defaults,noatime,nodiratime,barrier=0,discard),Btrfs建议少冒险
  • 如果是使用三星的固态硬盘,可以尝试它贡献给开源的针对固态硬盘优化的F2FS文件系统,相当不错的选择
  • I/O Schedulers调度算法,可以使用CFQ或者Deadline算法
  • 内核参数调整,SSD所在硬盘,echo 0 > /sys/block/sda/queue/rotational

随机读写 vs 顺序读写

机械硬盘的连续读写性很好,但随机读写性能很差。这是因为磁头移动至正确的磁道上需要时间,随机读写时,也就需要磁头和探针频繁的转动,而机械结构的磁头和探针的位置调整是十分费时的,这就严重影响到硬盘的寻址速度,进而影响到随机写入速度。 在存储小文件(图片)、OLTP数据库应用时,随机读写性能(IOPS)是最重要指标。由于固态硬盘没有普通硬盘的机械结构,也不存在机械硬盘的寻道问题,因此系统能够在低于1ms的时间内对任意位置存储单元完成输入/输出操作。 作者经验笔记:
  1. BIOS里务必开启AHCI模式(能支持SATA热插拔和NCQ寻址方式,提速→300%,当然内核也要支持AHCI模式)
  2. SSD的主控芯片相当于大脑中枢,非常重要,建议用Intel、Samsung、Marvell等知名品牌
  3. SSD更适合应用在随机读写场景,因此需要认真思考什么场合应用

大文件 vs 小文件

大多数的存储系统都是针对大文件而设计的,对小文件而言,大文件的存储系统无法适应小文件的存储需求,它造成元数据管理、数据布局和I/O管理、Cache管理、网络开销等方面性能和存储效率降低。 而且,文件系统的inode是线性存储的,因此,我们遍历一个目录下的文件,需要读取的磁盘的位置是来回跳跃的。不连续的读取意味着磁盘要不断的进行寻道,那么性能自然可想而知。 作者经验笔记: 
  1. 无论大小文件,首选EXT4文件系统,Reiserfs/Btrfs不要轻易尝试(虽然B-tree设计先进)
  2. EXT4针对小文件有所改进,使用了inode预分配,这使得inode具有很好的局部性特征,同一目录文件inode尽量放在一起,加速了目录寻址与操作性能。
  3. EXT4针对大文件使用了extent/delay/multi的数据块分配策略。这些策略使得大文件的数据块保持连续存储在磁盘上,数据寻址次数大大减少,显著提高I/O吞吐量。
  4. XFS在大文件方面,表现得不错,可以使用。
  5. SSD尽量应用在随机小文件读写的应用场景,毕竟容量宝贵,在有限的空间保存更多的文件是个明智之选。
  6. 有开发实力的可以选用基于LevelDB或其它的KV存储作底层文件系统,此为后话。

硬件红利 vs 软件设计

随着时间的推移,硬件升级已经突破了摩尔定律,在硬件不断升级带来的红利下,我们从最初的双核到四核、六核、八核心&超线程,从2G、4G内存到 8G、16G甚至128G内存的情况下,同样的价格所带来的硬件升级,性能提升也是非常可观的,因此,设置合适的硬件淘汰时间点也很重要,当老旧服务器超过3~5年的服役期,务必考虑做新陈代谢式的升级,充分利用好硬件潜力,保证架构设计平滑有序稳定的升级。 反观软件设计,相对硬件升级,可谈的话题就比较多了,举个反例:比如说 Squid软件的缺点(当然,诞生于1996年的Squid与Apache同样的古老,昔日的时代也是立下了汗马功劳,但时代进步就不能固步自封必须考虑革新):
  1. 无法利用多核优势,造成单核CPU压力太高;
  2. 鸡肋的DNS进程必须要运行;
  3. 无法利用大内存做缓存加速;
  4. COSS设计上的先天缺陷,初始化甚至重启后重建索引慢;
  5. 偶然机器重启,修复的效率非常漫长,慢到让人崩溃;
更多详情参考:  Varnish Cache 的架构笔记,为什么一些古老的软件正在被新的设计思想所淘汰,如Nginx替代Apache,ATS替代Squid,Postfix替代Sendmail等等。 建议:
  1. 负载均衡技术应用得当,如haproxy、lvs。一方面可以互援互备,另一方面也可以方便轮流升级;
  2. 要尝试新的软件开发思路和网络模型,如epoll、aio、内存加速,连接复用和事件驱动机制;

系统优化

  1. 系统服务精简瘦身;
  2. 文件系统性能调优;
  3. 提高磁盘IO性能;
  4. 优化网络性能;
  5. 优化路由策略;
  6. 数据库的优化;
……这里就不展开详述了,以后有机会再介绍。

CDN开源

开源世界里能够担当反向代理及缓存的软件不少,而且各有优劣。在这里,我就不一一介绍每个软件的介绍了,大家可以自行参考相关链接了解。 CDN架构上要充分体现出抗攻击能力和灵活应变的原则。因此,我们将CDN节点分解成反向代理+缓存加速+攻击防御这三个不同层次的功能结构。
  • 反向代理功能(作用:路由加速,隐藏主节点,负载均衡)
  • 缓存加速功能(作用:静态推送,节省后端主节点带宽)
  • 攻击防御功能(作用:快速解析,匹配过滤恶意攻击)
作为一个架构师,就必须要考虑如何选型,我们从性能、功能、配置上来进行比较筛选。  
软件名称 性能 功能 过滤规则配置
Squid 不能多核是硬伤; 磁盘缓存容量有优势; 性能中等 多; 支持ACL角色控制; 支持ICP缓存协议 支持外部文件读取及热加载; 支持热启动
Varnish 多核支持; 内存缓存; 性能强 够用; 支持集群,但不支持ICP集群; 支持后端存活检查 不支持外部文件读取; 需要转义; 支持热启动
Nginx 多核支持; 支持代理插件; 性能较强 多; 支持集群,但不支持ICP集群; 支持后端存活检查; 通过插件可以充当多角色服务器 不支持外部文件读取; 需要转义; 支持热启动
Apache TS 多核支持; 磁盘/内存缓存; 性能强 够用; 支持后端存活检查; 支持ICP协议,Cluster不稳定; 支持插件开发; 支持外部规则文件读取及热加载; 支持热启动
HAProxy 多核支持; 无缓存; 支持HTTP头部解析; 性能强 少,只专注HTTP头部解析和转发功能; 支持ACL角色控制; 支持后端存活检查 支持外部规则文件读取及热加载; 支持热启动; 支持会话粘滞和长连接
    现在,我们对这三层功能结构充分了解,在测试调优及生产线的实践检验中,我们发现:
  • HTTP防御性能:HAProxy在应对大流量CC攻击时,做正则匹配及头部过滤时,CPU消耗只占10%~20%。其它软件均狂占CPU资源约90%以上,容易成瓶颈导致整个系统无响应。
  • 反向代理性能:单纯转发效率以内存缓存型的Varnish性能最强,ATS和Nginx次之,考虑大容量缓存因素,ATS也是个不错的选择。Nginx是专门针对C10K的产物,性能不错,配合自己编写插件,业务可塑性很强。
  • 过滤规则的可配置性:HAProxy,ATS,Squid均支持规则文件读取、ACL定制和热加载、热启动。Nginx则不支持外部文件正则匹配,略差一点,但可塑性强。

负载均衡——高可用性:LVS

LVS是个重量级、高效稳定的四层转发,虽然不能作七层HTTP协议的识别,但完全可以架设在七层之前,与上述的各种软件搭配使用。 所以,LVS的使用并不会影响网络结构,后续仍然可以想上就上,前提是要兼顾到LVS的单点故障,这个我们可以通过Keepalived/Heartbeat来实现可用性和可靠性的保证。 作者简介: 邵海杨,UPYUN(又拍云)联合创始人兼运维总监,来自杭州Linux用户组,新浪微博@海洋之心-悟空 ,资深系统运维架构师,业余撰稿人,致力于开源软件及前沿科技的研究和探索。

The post 服务好“最后一公里”,高效CDN架构经验 appeared first on 神刀网.

相关 [服务 公里 cdn] 推荐:

服务好“最后一公里”,高效CDN架构经验

- - 神刀网
国内,随着互联网的高速发展,因为各大通信公司的政策,造成了南电信北联通互通有局限性,再加上大小且质量参差不齐的运营商,在这特殊的氛围的互联互通下号称“八线合一”的机房开始崭露头角. 互联网的广泛性使得网民分散在全国各地,由于全国地区的经济发展和互联网建设的不平衡,实际网民的体验往往受限于最后一公里的速度.

免费 CDN 加速服务:CloudFlare

- ArBing - 我爱水煮鱼
最近通过 MediaTemple 的后台了解到 (mt) 提供了 CloudFlare 加速服务服务,仔细看了下,CloudFlare 是一家功能非常强大的免费 CDN 免费加速服务. 什么是 CloudFlare. CloudFlare 是通过反向代理(reverse proxy)提供网站加速服务,为站长解决了 jpg/JS/CSS 这些静态文件到 CDN 上的问题,并且通过它部署在全球各大洲的缓存结点服务器(详细列表),提供高效的加速服务.

Webluker:为中小网站提供轻量级CDN 加速服务

- 午夜瞎想 - 36氪
对于任何网站来说,访问速度都是一个非常重要的参数. 如果你的网站加载了很久还是没有打开,那么一部分“不耐心”的用户就可能会离去了. 除了通过提升服务器性能之外,使用CDN 其实是一个提升网站访问速度的便捷方式. 不过对于中小网站来说,类似ChinaCache 的大型CDN 使用起来门槛非常的高,有没有一个轻量级容易使用的CDN 服务呢.

CDN服务哪家强?我们分别来测一测

- - PingWest品玩
为了提高用户访问网站的速度,开发者一般都会使用一项名为 内容分发网络(Content Delivery Network,简称CDN)的服务. 借助于这套系统,用户可以在离自己最近的网络节点上请求数据,这样“上网速度”自然也就变快了. 这几年,随着CDN市场的发展,越来越多的厂商加入到了这个行业中来.

国内常用静态资源 CDN 公共库加速服务

- - 我爱水煮鱼
静态资源 CDN 公共库是指一些服务商将我们常用的 JavaScript 库存放到网上,方便开发者直接调用,并且还对其提供 CDN 加速,这样一来可以让用户加速访问这些资源,二来还可节约自己服务器的流量. 国内提供静态资源 CDN 公共库加速服务服务的厂商还是有蛮多的,今天就给大家介绍一下:. 提供的库比较全,但是不支持 https,使用了 https 加密站点使用会出现警告.

Speedy Mirror – 国外免费CDN加速服务免费GAE反代服务

- 桔子 - iGFW
Speed ​​y Mirror为你的网站在各地快速建立镜像,免费GAE反代服务,支持静态及动态页面,也支持ssl,具有防盗链功能,使用简单,提供一个二级域名给你. 如果你要使用自己的域名也非常简单. 无需修改DNS服务器,设置CNAME别名解析到给你的二级域名就可以了. Speed​​y Mirror免费用户只有50G流量,超过流量限制就要花钱了.

网络视频技术问答(11):CDN如何为视频网站服务?

- - 钛媒体TMTpost
CDN是Content delivery network的缩写,即内容分发网络,它具有下图所示的结构. 而随着网站规模的扩大,自建CDN也是一种选择. 问:CDN如何为视频网站服务. 答:CDN是Content delivery network的缩写,即内容分发网络. 如上图所示,CDN由两种服务器组成:.

分布式还是混合式? 谈CDN架构对服务质量的影响

- - ITeye博客
通 常,内容分发网络(CDN)采用分布式模型. 在这种模型里, 用户的文件存放在一个源服务器上,并且由大量边缘服务器负责分发这些文件. 这些边缘服务器的磁盘空间比较小,所以大多数的文件被放在内存中. 因此,当一个 文件传输至终端用户之前,如果该文件在边缘的CDN缓存服务器上不存在,那么这些服务器会先去原始服务器请求该文件或流.

Google宣布Google CDN

- way - Solidot
Google宣布了最新的帮助加快互联网速度的工具Page Speed Service,加快静态网页的载入速度,不支持动态网页. 在开发者注册该服务之后,可将网站的DNS入口记录指向Google,然后Page Speed Service从服务器上抓取内容,采用最佳的Web性能方案重写网页,通过Google在全球部署的服务器将内容展示给终端用户,加快网页载入速度.