Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的

如今,Twitter每秒可以创建并保存3000张(20GB)的图片。2015年,Twitter甚至从对媒体存储策略的优化中节省出了600万美元。

但并非一开始就是这样的,2012年Twitter还主要是基于文本的,就像《哈利波特》中的霍格沃茨魔法学校没有了那些悬挂在墙上的炫酷活动照片一样。如今已经是2016年,Twitter已进入了富媒体未来时代。在新媒体平台发展的过程中,Twitter可以支持照片预览、多张照片、gif图、Vine短片以及在线视频。

Twitter的软件开发工程师Henna Kermani在Mobile @Scale London的谈话中提及,这个媒体平台每秒能够处理3000张图片。虽然这次谈话的主要话题是讨论图片管道,但她表示其中的大多细节也适用于其他的媒体类型。

这次谈话所总结的心得中,一些最有趣的内容摘录如下

按照可能奏效的最简单方式来执行,结果真的会让你大吃一惊: 发送一条带图片的推特是一个要么全有要么全无的操作,最简单的方式就是锁定。由于无法很好地扩展,尤其是网络状况不佳的情况下,Twitter很难再增加新功能。

分离处理: 将发推与发送媒体分离,通过解耦的方式来处理,Twitter便可分别优化各个途径,同时还能大幅增进操作灵活性。

移动handle(句柄),而不要移动blob(二进制大对象): 不要在系统中执行大块的数据移动,这样会消耗掉带宽,并导致接触到数据的各个服务有性能上的问题。请存储数据,并使用handle来引用。

改用分段的、可恢复的上传操作能够大幅降低媒体上传的失败率。

实验与研究: Twitter在研究中发现:将各类图片变体(缩略图、小图、大图等)的TTL(存活时间)设为20天可以让存储与计算达到最有效、最优秀的平衡。图片在20天之后的访问概率很低,删除后每天能节省下来的存储空间几乎有4TB——达到计算服务器需要数值的近乎一半,这样做之后每年能节省数百万美元。

按需操作: 我们可以删除旧图片的变体,是因为它们能在瞬间完成重建,而无需预计算。根据需求来执行服务能够增加灵活性,并在任务执行的方式上更为智能,控制时也更集中化。

渐进式JPEG(Progressive JPEG)是标准图片格式的真正优胜者:不但前端和后端对其支持都很优秀,在速度较慢的网络中,这类图片的效果也很好。

在Twitter发展为富媒体未来的过程中,有许许多多好事发生,让我们来一一解读。

过去——2012年的Twitter

写入方式

用户在应用中编辑一条推文,或许再附上一张图片。

客户端将这条带图推文发送给单一整体式端点。上传时,推文中的图片和其他元数据是捆绑在一起,发送给过程中所涉及的单体服务的。

在旧式设计中,端点就是诸多问题产生的根源。

问题一: 浪费大量带宽

创建一条推文与上传媒体,两者在一个操作中紧密耦合。

上传的动作是一个整体,要么全部成功,要么全部失败。无论失败的原因是什么——网络临时中断、暂时出错等等,都需要将整个过程从头来过,包括要重新上传媒体。如果在上传到95%的时候出现故障而导致失败,就必须重新再次上传。

问题二: 对较大的新型媒体来说,缺乏良好的扩展

这种办法缺乏针对大型媒体,比如视频的扩展性。媒体越大,失败的可能性也越大,特别是在IT业的新兴市场,比如巴西、印度、印尼等地,由于网速慢、网络可靠性差,这个问题更加严重,确实很需要增加上传的成功率。

问题三: 内部带宽的使用效率低下

终端与TFE(Twitter前端)相连,而TFE则负责用户身份验证,并将用户分配到不同图片服务器(Image Service)。

图片服务器与图片变体生成器(Variant Generator )会话,并生成不同大小的图片实例(比如小图、中图、大图、缩略图)。图片变体存储在BlobStore中,这是一个针对类似图片和视频等大型有效载荷而优化的key-value存储系统,存储在其中的图片是永久性的。

创建及保存推文的过程中,还涉及了许多其他服务。由于终端是单一整体式的,媒体与推文的元数据结合在一起,也会流经所有的服务。这个大型有效载荷被发送给直接负责图片的服务,这些服务并不属于媒体管道,但仍被强制执行大型有效载荷的优化。这种办法在内部带宽中效率非常低。

问题四: 臃肿的存储空间

推文中的图片在数月或数年后已经不再会被调用了,但仍存于BloStore中占用空间。有时甚至在推文被删除后,图片仍存在于BlobStore中,缺乏垃圾回收机制。

读取方式

用户查看推文以及相关联的图片。图片的来源是哪里?

客户端从CDN请求图片的变体,这个CDN可能需要向原点与Twitter前端请求图片,最终导致在BlobStore中直接查找特定大小、特定URL上的图片。

问题五: 不可能引入新的变体

设计上不够灵活,增加新的变体也就是不同尺寸的图片的话,需要在BlobStore中为每张图片回填新的图片大小,缺乏按需增加变体的机制。

由于缺乏灵活性,Twitter很难在客户端新增功能。

现在——2016年的Twitter

写入方式

将上传与发推解耦。

上传被设置为首要的,上传终端建立后,唯一的职责就是将原始媒体放在BlobStore中。

给上传方式增加了许多灵活性。

客户端与TFE会话,TFE与图片服务器会话,图片服务器将图片放置在BlobStore中,并向元数据存储添加数据,就是这样,没有其它相关的隐藏服务。

媒体ID(mediaId)是媒体唯一的标识符,由图片服务器返回。如果用户在客户端想要创建推文、DM或者上传个人资料照片时,系统会使用mediaID作为媒体的引用句柄,而不是直接使用媒体本身。

假设我们想要用刚刚上传的媒体来创建推文,流程如下:

客户端找到更新端点,在推文中加入mediaId;这些内容会被发送到Twitter前端;Twitter前端会将其引入合适的服务中,来执行创建。对于推文来说,使用的服务是TweetyPie,而DM和个人资料会使用其它服务;所有服务都会与图片服务器对话;图片服务器上有推文处理队列机制,可以执行类似人脸检测与儿童色情检测之类的功能;检测完成后,图片服务器与负责图片的ImageBird或者负责视频的VideoBird会话;ImageBird会生成图片变体;VideoBird会执行一些转码工作;无论如何,生成的媒体都会被放在BlobStore上。

不会直接发送媒体本身,从而节省了大量之前被浪费的带宽。

分段可恢复的上传:

用户走进地铁,没有信号;10分钟后出来,信号恢复,这时上传过程会从断开的地方自动恢复。对于用户来说整个过程是无缝的。

客户端通过上传API来初始化上传进程,后端会发给它一个mediaId,在整个上传进程中,这个mediaId都会被用作标识符。

一张图片被分为几部分,比如三个部分。通过API来append每个部分,每个append调用都会有段索引,所有append的mediaId都是相同的。上传完成后,意味着上传过程终结,媒体可供使用。

这个办法更能适应网络故障的情况,每个单独的部分都可以重试,如果网络由于某种原因而产生中断,那么暂停上传,等待网络恢复后继续该部分的上传。

简单的方法带来了巨大的收益。对大于50KB的文件,图片上传的故障率在巴西高达33%,在印度高达30%,在印尼则为19%。

读取方式

引入了名为MinaBird的CDN源服务器(Origin Server )。

MinaBird可以与ImageBird、VideoBird对话,因此如果没有的话,可以立即生成相应大小的图片及视频格式。

MinaBird在执行客户端请求时,更为动态也更为流畅。比如因为版权问题而需要将某个内容屏蔽,使用MinaBird可以很容易地对特定某条媒体执行屏蔽及恢复的操作。

能够实时生成需求大小的图片与视频格式转码,Twitter在存储上的智能性也更高了。

按需生成要求的媒体变体意味着无需在BlobStore中存储所有的变体。这是一个巨大的胜利。

原始媒体直到删除前都存储在BlobStore中,而变体只保存20天。媒体平台团队做了很多关于最佳保存时限的研究,所有请求的图片中,大约50%只保存15天,按收益率递减结果,删除较早的图片。很旧的媒体很可能没有人会发起相应的请求,在15天后会有很长的长尾期。

如果不设定TTL(存活时间)和过期时间,每天增加的媒体存储量有6TB。懒办法就是按需生成所有媒体变体,导致媒体存储增长为1.5TB。20天TTL所使用的存储空间比懒办法多不了多少,因此不会占用太大的存储空间,但在计算上这是一个巨大的胜利。使用懒办法来计算,读取所有变体需要在每个数据中心设置150个ImageBird,而使用20天TTL的话,只需要75个ImageBird。因此20天TTL是令计算和存储达到最有效、最平衡的时间点。

由于节省存储空间和计算资源就是节省金钱,引入20天TTL之后,在2015年Twitter节省下了600万美元。

客户端优化(安卓)

在使用WebP(谷歌创建的一种图片格式)进行了6个月的实验之后,

这种图片比相应的PNG或JPEG图片要小25%。

这样一来,特别是在新兴市场,由于较小的图片对网络压力也较小,因而用户参与度也更高。

由于不支持iOS系统,并且只支持安卓4.0以上的系统,缺少平台的支持使得WebP格式花费巨大。

于是Twitter尝试了另一个选项,渐进式JPEG格式。由于通过连续扫描的形式来渲染,首次扫描可能是块状的,但在连续扫描的过程中会逐渐自我完善。

这种格式的性能更佳。

后端很容易支持。

这种格式比传统JPEG格式的编码速度慢了60%,由于一次编码,多次服务,因此这不算大问题。

渐进式JPEG图片不支持透明图片,因此保留了透明的PNG图片,除此之外其它都使用了渐进式JPEG。

客户端由Facebook的Fresco库提供支持,Fresco的优点很多。在2G网络下,效果令人印象深刻。第一次扫描PJPEG图片只用了10kb流量,因此加载时间不长,在本地管道还等待加载,什么都没显示的时候,PJPEG已经显示出了可识别的图像。

有正在进行的实现结果显示,负载细节如下:减少了9%的P50加载时间,减少了27%的P95加载时间,减少了74%的失败率,慢速连接的用户确实能获得极大改善。

时间: 2024-10-11 16:24:55

Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的的相关文章

天弘基金移动App客户端架构优化之路

天弘基金移动App客户端架构优化之路 随着移动互联网时代的到来,移动技术也随之飞速发展.如今,APP已成为绝大多数互联网企业用来获取用户的核心渠道.与此同时,伴随着业务量的增长,愈来愈多的APP也在不断地挑战着每一个移动端研发人员的知识深度,而移动端技术人员也在这个不断接受挑战的过程中,成就了今天的移动互联网时代. 天弘基金作为一家在基金,金融行业高速发展的公司,APP面临着多重挑战,如庞大的用户群体.高频的基金业务.交易安全可靠性等等.天弘基金移动端的开发小伙伴在技术和业务的多重压力下,不断推

【转】秒杀业务架构优化之路

原文地址:http://www.infoq.com/cn/articles/flash-deal-architecture-optimization/ 一.秒杀业务为什么难做 IM系统,例如QQ或者微博,每个人都读自己的数据(好友列表.群列表.个人信息). 微博系统,每个人读你关注的人的数据,一个人读多个人的数据. 秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据. 例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万.又例如12306抢票,

解密 Uber 数据团队的基础数据架构优化之路

如果你用过Uber,你一定会注意到它的操作是如此的简单.你一键叫车,随后车就来找你了,最后自动完成支付,整个过程行云流水.但是,在这简单的流程背后其实是用Hadoop和Spark这样复杂的基础大数据架构来支撑的. Uber 在现实世界和虚拟世界的十字路口有令人羡慕的一席之地.这令每天在各个城市穿行的数十万司机大军趋之若鹜.当然这也会一个相对浅显的数据问题.但是,就像Uber数据部门的主管 Aaron Schildkrout所说:商业计划的简单明了带给Uber利用数据优化服务的巨大机会. “这本质

1年时间业务量疯长40倍,谈人人车的平台架构演进之路

人人车业务平台从最初典型的LNMP单机单服务部署架构,发展到如今分布式服务化架构,五百多台虚拟机部署,一路走来,踩过不少坑,也遇到过不少挑战,特别是对于基于云服务进行业务开发的场景,以及从零开始服务化与SOA之路更是颇有心得,希望通过此次分享全面回顾人人车业务平台技术架构发展之路,重点分享如下内容: 创业初期技术架构选型思考,那些年我们趟过的坑,云服务与三方服务使用心得: O2O型互联网创业公司,重线下团队技术型公司,技术架构优化之路,分享我们人人车是如何做服务拆分.如何做服务化.如何做SOA.

新浪微博iOS客户端架构与优化之路

随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类App不同,微博客户端具有多信息流.内容丰富多样.对数据量和延迟敏感等特点.微博的信息流承载着文字.网页.照片.视频.直播等多样的内容形式,所以复杂信息流对团队的开发效率.App的性能都带来了极大的挑战. 2016年6月24-25日,GMTC全球移动技术大会将在北京举行.本届大会,我们邀请到了新浪微博移动端资深研发专家邱晨老师.曾就职于F

精细化容量管理的设备成本优化之路

版权声明:本文由梁定安原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/224 来源:腾云阁 https://www.qcloud.com/community 作者简介:梁定安,现就职于腾讯社交网络运营部,负责社交平台.增值业务的运维负责人,开放运维联盟专家委员,腾讯云布道师,腾讯课堂运维讲师. SNG社交网络运营部管理着近10万台的Linux服务器,以此支撑着腾讯社交业务海量业务与用户,如日活2.47亿的QQ.月活5.9

<从编程到(架构)设计之路>的翻转式系列课程

<从编程到(架构)设计之路>的翻转式系列课程 课程(1):  从接口(Interface)出发:接口设计的技术和艺术 一個成功案例的實務傳承 高焕堂37年码农经验讲解 指导教练:高焕堂 1. 简介翻转式课堂 1.1  翻转式课堂的目标 萨尔曼·可汗 說:未来的世界是不确定的,因此重要的不是学到什么,而是学习新知识的能力.教育应该具有实践性,其目的应该是帮助学生掌握技能.取得信息,使他们能够谋生.教育应该具有实践性,其目的应该是帮助学生掌握技能.取得信息,使他们能够谋生.学徒制的基础是主动学习-

【58沈剑架构系列】秒杀系统架构优化思路

一.秒杀业务为什么难做 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表.群列表.个人信息): 2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据: 3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据. 例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万. 又例如:12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存.读写冲突,锁非常严重,这是秒杀业务难的地方.那我们怎么优化秒杀业务的架构呢? 二

【IT名人堂】何云飞:阿里云数据库的架构演进之路

[IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 ? 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”,阿里云将打造一个像淘宝电商一样多方共赢的云生态.而作为阿里云庞大帝国的重要成员,阿里云RDS为社交网站.电子商务网站.手机App提供了可靠的数据存储服务.好的架构不是设计出来的,而是演化出来的,那么RDS经历了怎样的架构演进?本期名人堂我们邀请到了阿里云RDS首席产品架构师何云飞,为我们揭秘RDS的