1月31日,阿里云课堂在北京再次开课,聚焦于“大型互联网应用架构之分发和存储”的技术和实践分享。由阿里云Web平台组研发专家姚伟斌(花名:文景)和阿里云飞天存储服务研发高级专家李文兆担任讲师。14:00点不到,架构师、工程师和实践用户已经将260人的会场挤的满满当当,最后进来的小伙伴们只好站在了后排的通道中。现场为何如此火爆?这和议题密切相关。CDN和存储,前者是提升用户满意度,留存率和转化率的关键,后者是云计算最基础的服务之一。二者的重要性自然不言而喻。
阿里云CDN技术演变之路
众所周知,在国内如此错综复杂的网络环境(中国电信、联通、移动、中国教育网、铁通等)中,要将源站内容分发到全国所有节点,缩短用户查看对象的延迟,提高用户访问网站的响应速度和网站的可用性,解决网络带宽小、用户访问量大、网络分布不均等问,只能依靠内容分发网络(CDN)。
阿里云Web平台组研发专家姚伟斌
CDN的用途:
加速:如图片、css、js等,视频流媒体,动态内容,SSL、SPDY等;
源站保护:如4、7层DDoS攻击防御,WAF等。
CDN如此重要。以至于在最初的图片CDN应用之后,2008年淘宝已着手建立自己的CDN。多年积累下来,一线机房布局完整,技术也比较成熟。2014年3月,阿里云正式商用CDN时,已经发展至数百节点,覆盖30多个国家,单节点10台机器拥有40Gbps吞吐能力。海外也已经有30多个节点。微博、唱吧、雪球都是CDN服务的典型用户,效果对比极为明显。2015年,姚伟斌表示:“图片CDN和阿里云CDN,逻辑配置和节点都已经共享,一切都在云上。”
CDN加速原理
仔细看CDN关键组件,可以分为以下几个部分:
IP库:APNIC、Maxmind等数据源多样,通过淘宝收货的IP地址进行校正;ECS?用户可以免费调?用。
调度系统:通过地域和监控实现调度。
节点缓存系统:内存、SSD、SATA三级缓存,支持各种尺寸的文件,热点实现自动迁移,访问速度快。
配置系统:按需加载、更新,10万域名的配置约消耗500M内存,全网分钟级别的配置?生效,高可靠、可运维。
刷新系统:Notify机制,利用cache下载,自定义hash key,支持多副本刷新等。
日志系统:支持多台目标服务器负载均衡,10分钟左右即可将线上日志传到OSS,每天数百T的离线日志写入ODPS进行数据分析。
姚伟斌还重点介绍了应用加速方案,包含TCP协议栈优化,动态内容加速(内容优化、路由优化),视频和大文件,无线加速等。值得注意的是,CDN和安全往往密不可分。在4层和7层DDoS攻击防御时,CDN和云盾(阿里云安全服务)的配合尤为密切。姚伟斌举了一个7层攻击的案例:“日前,针对一个小站突然遭受了攻击,响应约15KB,规模约15万QPS,阿里云抵挡了99.4%的攻击,节省了17G的流量,有效保证了用户的服务。”
开放存储架构以及应用实践
作为阿里云最基础的云服务之一,开放存储服务(OSS)是基于飞天平台,提供“高可用性、高可靠性,海量的对象数目,任意大小数据对象,公共服务,安全”的存储服务。李文兆在题为“开放存储架构和应用实践”的分享中,重点谈到了OSS的设计原则:硬件故障透明,数据的多份拷贝分布在不同机架/机房,易扩展(容量扩容,自动应对爆发式访问),各层都要考虑到安全。
阿里云飞天存储服务研发高级专家李文兆
开放存储服务架构是用户请求到云盾,再到负载均衡,然后是前端的协议接入层(协议处理、访问控制、QoS),数据访问层(分区、索引),持久存储层(持久、冗余、容错)。
其中主要概念有四个:
Service:OSS提供给用户虚拟存储空间,每个用户拥有一个到多个Bucket(普通用户最多10个)。
Bucket:Bucket是OSS的命名空间,Bucket Name在整个OSS具有全局唯一性。
Object:在OSS中,每个文件都是一个Object。
AccessKeyID、AccessKeySecret:安全标识,为访问OSS做签名验证。
具体来看:
Bucket在功能方面,包含创建/修改/读取/删除,ACL(私有、开放读,开放读写),防盗链,访问日志归档,异地数据容灾(如杭州、青岛、北京、香港等数据中心都部署了OSS,在某地创建之后,备份到其他节点)等。
Object在功能方面,也包含创建/修改/读取/删除,Multipart Object与断点续传,URL签名,Put与Post不同使用场景等。
为了加深大家对OSS的使用感受,李文兆特别举了一个例子:
手机端图片云存储的企业架构优化图
一家互联网创业企业,业务是手机端图片云存储。比如帮助用户在本地存储缩略图,节省手机空间;提供云照片冲印等。创业之初,他们的IT架构很简单,通过阿里云的虚拟机,搭建Web App Server,最初2-3台的时候可以,但扩展到40-50台的时候,计算资源和存储节点都不够用(因为云磁盘限制在8TB,数据在向上扩展,需要继续横向扩展磁盘)。而最初他们的架构这方面考虑的不多,如果在云磁盘的基础上增加,一方面存储容量扩容有限,另一方面存储性能扩展需要修改,最关键的是图片尺寸和类型各异带来处理极为费劲。这样情况下,通过OSS和技术上的优化,实现了架构的改变。数据直接从用户端上传到OSS,AppServer只是控制流,所以带宽可以节省下来。通过URL签名,帐号密码等都存储在App Server上,用户需要服务的时候,App Server在几秒钟或者几分钟有效的方式,返回到手机端,通过手机端写入,非常安全,而且节省带宽。当用户数量越来越多,为节省资源提升服务,可以做读写分离,读通过CDN和存储(图片服务),实现图片压缩和类型转化。
总结下来就是:
用OSS解决存储瓶颈;
用图片动态服务生成各种图片;
读写分离;
弱安全容器访问OSS;
表单提交和跨域访问;
数据单走OSS减少VM台数;
Cname屏蔽OSS域名,保持了切换的灵活性。
不止如此,通过阿里云的北京、青岛、杭州、深圳、香港的数据中心,企业还能轻松实现异地容灾和就近回源。事实上,OSS作为阿里云的基础服务,目前已经应用的十分广泛:不仅有微盟、有道、得图这样的创业公司,还有联想、宏基这样的传统企业,以及公安部、贵州政务系统等。
精彩问答
阿里云课堂为架构师、工程师和实践用户们留下了充足的与讲师的互动时间。在提问环节,小伙伴们的问题质量都很赞,专家们的回答同样极为精彩。
问:CDN如何支持游戏架构?没有对特定行业做优化?
答:目前阿里云CDN更多是针对场景来做的产品,比如分发,动态链路优化等。是针对手游、页游、端游等游戏,其中如安装包下载(流量大),网页的动态加速,四层攻击的防御等都是共性需求而涉及的。
问:服务上线之前都需要做测试。阿里云的产品测试是用迭代压力还是线上来做?设计的架构是怎么样的?
答:在研发方面都需要测试。开发软件要有单元测试的覆盖率,要到50-60%。开发做测试后,会提交给QA进行黑盒测试,然后放到日常环境(完全测试环境),用应用来做流量测试。最后才会放到线上,做几个几点的灰度测试,看功能;然后节点慢慢增多,最终做到全网。
问:面对可以预计的剧增的访问量,如何在上线之前,保证架构设计的弹性?有没有什么经验可以分享?
答:在系统设计之初,要预留一个一个数量级来准备。比如CDN刷新系统,几千的量级,但可支持到几万。在配置系统方面,1-2w,而跑到100w是可以的。CDN能否服务1000个节点,100万的用户等,要用目标来设计系统。而随着用户的增多,一些特殊需求也要持续优化。比如淘宝CDN重视的是稳定性和服务能力,而阿里云面对海量用户,设计点是不同的。所以摄制之初,要有预留。
问:CDN和云盾的关系?
答:架构是一致的。尤其是在防4层,500GB以上的攻击规模。CDN前面是有特殊设备做抵挡的,发现攻击做清洗后才会转到CDN上。7层,云盾也和CDN密切配合。WAF也是。
问:CDN服务如何计费?是分发区域,文件大小,带宽占用等么?
答:我们是按照流量计费和按照峰值带宽两种计费模式。
问:流媒体,传统CDN做静态视频放到CDN上。直播类的场景如何解决?
答:M318和TS文件。对延迟较为敏感。预设到CDN中。RTMP等方式也在测试中。
问:存储方面有没有其他的文件转换服务?比如PDF转成PPT,还有视频转化服务?
答:图片转换服务是有的。视频转码服务已经在公测,很快会对外商用。PDF转成Word等,还没有,但要看需求,后面会考虑。
问:怎么看待TFS?
答:TFS在业内也有很多企业在用。我知道的就有企业自己搭建的TFS用了一百来台这样的机器。但随着规模的扩大确实遇到了一些问题,现在和我们沟通,想迁移到OSS上。
问:S3实现了弱一致性。而OSS是三份写入实现强一致性。如何考虑的?
答:我们确实做到的了强一致。就是说写下去以后它的数据就是一致的。写是一个过程,要注意提高它的存储和数据写入的一致性。当写到数据中心的时候,已经有3份备份了。比如说我们的城市被光缆因为各种原因被断了,可以将数据从杭州同步到北京,或者更远同步到美国来保证数据的安全。
问:服务器ECS是否建立在存储上面?磁盘的性能包括存储的性能,他们中间的读写是多少?有没有限制?比如说在ECS限制上是多少?
答:我试着回答一下,最好是到阿里云官网直接找客服。ECS不是建立在OSS之上的,其是建立在一套类盘古的,可以随机插写的一套分布式文件上面,也就是说它的虚拟机本身的存储是建立在类盘古的分布式文件系统上面的,OSS是HTTP的协议出去的。那套类盘古的文件系统可以理解为直接加载进去就是块设备,所以其性能跟OSS的性能是无法比较的。
最后,针对大家关注的两位专家的PDF,目前还需简单修改,确认后将发布到CSDN下载中。