加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

剖析Twitter处理峰值方面所做的一些改进和优化

发布时间:2021-12-23 15:39:40 所属栏目:优化 来源:互联网
导读:景补充:日本网民一直都有在电视节目播出的同时,在网络平台上吐槽或跟随片中角色喊出台词的习惯,被称作实况行为。宫崎骏监督的名作动画《天空之城》于2013年8月2日晚在NTV电视台迎来14次电视重播。当剧情发展到男女主角巴鲁和希达共同念出毁灭之咒Blase时,
景补充:日本网民一直都有在电视节目播出的同时,在网络平台上吐槽或跟随片中角色喊出台词的习惯,被称作“实况”行为。宫崎骏监督的名作动画《天空之城》于2013年8月2日晚在NTV电视台迎来14次电视重播。当剧情发展到男女主角巴鲁和希达共同念出毁灭之咒“Blase”时,众多网友也在推特上同时发出这条推特,创造了每秒推特发送数量的新纪录。
根据推特日本官方帐号,当地时间8月2日晚11时21分50秒,因为“Blase祭”的影响,推特发送峰值达到了143,199次/秒。这一数字高于此前推特发送峰值的最高纪录,2013年日本时区新年时的33,388次/秒。更高于拉登之死(5106次/秒)、东日本大地震(5530次/秒)、美国流行天后碧昂斯宣布怀孕(8868次/秒)。
下图是峰值发生的邻近时间段的访问频率图,Twitter通常每天的推文数是 5 亿条,平均下来每秒大概产生5700条。这个峰值大概是稳定状态下访问量的25倍!
2016125105731234.jpg (700×209)
 
在这个峰值期间,用户并没有感觉到暂时性的功能异常。无论世界上发生了什么,Twitter始终在你身边,这是Twitter的目标之一。
 
“新的Tweets峰值诞生:143,199次Tweets每秒。通常情况:5亿次每天;平均值5700Tweets每秒”
 
这个目标在3年前还是遥不可及的,2010年世界杯直接把Twitter变成了全球即时沟通的中心。每一次射门、罚球、黄牌或者红牌,用户都在发推文,这反复地消耗着系统带宽,从而使其在短时间内无法访问。工程师们在这期间彻夜工作,拼命想找到并实现一种方法可以把整个系统的负载提升一个量级。不幸的是,这些性能的提升很快被Twitter用户的快速增长所淹没,工程师们已经开始感到黔驴技穷了。
 

开始重新架构
 
2010年世界杯尘埃落定,Twitter总览了整个项目,并有如下的发现:
 
Twitter正运行着世界上最大的Ruby on Rails集群,Twitter非常快速的推进系统的演进–在那时,大概200个工程师为此工作,无论是新用户数还是绝对负载都在爆炸式的增长,这个系统没有倒下。它还是一个统一的整体,Twitter的所有工作都在其上运行,从管理纯粹的数据库,memcache连接,站点的渲染,暴露共有API这些都集中在一个代码库上。这不但增加了程序员搞清整个系统的难度,也使管理和同步各个项目组变得更加困难。
Twitter的存储系统已经达到阈值–Twitter依赖的MySQL存储系统是临时切分的,它只有一个单主节点。这个系统在消化/处理快速涌现的tweets时会陷入麻烦,Twitter在运营时不得不不断的增加新的数据库。Twitter的所有数据库都处于读写的热点中。
Twitter面临问题时,只是一味的靠扔进更多的机器来扛住,并没有用工程的方式来解决它–根据机器的配置,前端Ruby机器的每秒事务处理数远没有达到Twitter预定的能力。从以往的经验,Twitter知道它应该能处理更多的事务。
最后,从软件的角度看,Twitter发现自己被推到了一个”优化的角落“,在那Twitter以代码的可读性和可扩展性为代价来换取性能和效率的提升。
结论是Twitter应该开启一个新工程来重新审视Twitter的系统。Twitter设立了三个目标来激励自己。
 
Twitter一直都需要一个高屋建瓴的建构来确保性能/效率/可靠性,Twitter想要保证在正常情况下有较好的平均系统响应时间,同时也要考虑到异常峰值的情况,这样才能保证在任何时间都能提供一致的服务和用户体验。Twitter要把机器的需求量降低10倍,还要提高容错性,把失败进行隔离以避免更大范围的服务中断–这在机器数量快速增长的背景下尤为重要,因为机器数的快速增长也意味着单体机器故障的可能性在增加。系统中出现失败是不可避免的,Twitter要做的是使整个系统处于可控的状态。
Twitter要划清相关逻辑间的界限,整个公司工作在一个的代码库上的方式把Twitter搞的很惨,所以Twitter开始尝试以基于服务的松耦合的模式进行划分模块。Twitter曾经的目标是鼓励封装和模块化的最佳实践,但这次Twitter把这个观点深入到了系统层次,而不是类/模块或者包层。
最重要的是要更快的启动新特性。以小并自主放权的团队模式展开工作,他们可以内部决策并发布改变给用户,这是独立于其他团队的。
针对上面的要求,Twitter构建了原型来证明重新架构的思路。Twitter并没有尝试所有的方面,并且即使Twitter尝试的方面在最后也可能并像计划中那样管用。但是,Twitter已经能够设定一些准则/工具/架构,这些使Twitter到达了一个憧憬中的更靠谱的状态。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读