欢迎来到天天文库
浏览记录
ID:15360361
大小:10.09 MB
页数:64页
时间:2018-08-02
《构建高性能的微博系统——再谈新浪微博架构》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、BuildHighPerformanceWeiboSystem@TimYang•微博是什么?•140字•根据关注关系实时投递•支持评论、转发及图片、视频等媒体相关演讲•《构建可扩展的微博系统》QCon2010•《微博架构与平台安全》WDC2010Agenda3421Part1海量存储每天近亿条新记录,大部分记录变更需要即时反映到业务系统(一致性),如何解决?MySQL•适合海量存储,可不断拆分扩展•久经考验拆分策略•按hash拆分•多维度,如关系•多级索引,如user_timelineindex问题•单机性能
2、限制、需要持续拆分•访问速度需求•用户•关系,每秒5万次•延迟MySQL+cache问题•雪崩•一致性•cache数据类型不够,需要序列化•额外开销•添加及修改问题NoSQL“Databasesarespecializing–the“onesizefitsall”approachnolongerapplies.”MongoDB设计哲学NoSQL?•单机思路•Redis•MongoDB•分布式思路•Cassandra•HBase用好一款开源产品的前提条件是深入了解它的定位。特性比较•MongoDB•Redis•HBase•Cas
3、sandraRedis-持久方式•持久化存储模式理解•snapshot-主流•vm-作者放弃•diskstore-作者新方向•aof-重建慢Redis-数据类型•string:keyvalueredisObject16bytes/item•list:双向链表40bytes/item•hash:zipmap(<64)•set/sortedsetRedis-Replication•重读rdb文件问题•代码实现简单Redis-容量规划Redis-定位•需要高速读写访问•能容忍短期不可用,无成熟failover方案•有list/se
4、t数据结构需求(optional)海量存储•MySQL,久经考验的海量存储•NoSQL,填补MySQL与cache之间空隙,但是需要有合适的驾驭能力Part2实时计算微博架构(第三版)$30%5)/.*#(4#,!0,86)&"7+'4- 521,服务→接口→应用问题一大部分Web系统瓶颈在于cache数据访问,仅用压缩是否足够?可用的cache资源放不下所有热点数据,导致数据加载日趋缓慢•扩容?•减负?“Web系统用json来存储及cache非常浪
5、费。一条微博用json数据结构来存所有字段(包括作者信息),需要2~5K字节左右,用xml需要10k左右,用protobuf序列化后,大约只有500字节。”3月6日00:47转发(495)
6、评论(134)历程RDBMS→Keyvalue(JSON)→Protocolbuffers(binary)JSON烦恼•DB•Cache•MessageQueue•APIPB优势•Numeric:varint,from1byte•仅传输编号,不传输字段名称•支持多语言:Java,C++,Python...•编解码高效•从cache最终结果
7、到中间结果,进一步节约空间•“192.168.0.1”→“0xc0a80000”→varintBenchmarkTextText(数据来源:http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking)“WewouldliketoprovidepublicAPIsthatacceptprotocolbuffersaswellasXML,bothbecauseitismoreefficientandbecausewe'rejustgoingtoconvert
8、thatXMLtoprotocolbuffersonourendanyway.”-Google数据结构,小即是美异步处理需求•微博的发表是异步处理•随着平台应用增多,与应用相关数据操作也逐渐转向异步方式•其他需要异步的操作?问题二随着系统增大,“一上线就出问题”情况增多,追究原因很大一部分是由于开发人员对异步处理缺乏深度理解。•传统LAMP应用中,单个操作步骤增多及处理时间增大对整体性能影响不大。•异步队列处理程序中1ms的处理时间延长可能会引起连锁反应及业务故障。•实时监控队列处理性能指标数据。异步监控•MQstat•MQ
9、Processorstat问题三明星用户上百万粉丝,数据如何实时投递到所有用户?为什么显示有“1条新评论”,点开却没有数据?实时性与一致性•Timeline消息流,计数,关系变更等业务需要及时投递给所有用户•为了解除耦合,功能由不同服务完成•异步处理•将写cache与数据库分开•RAM化老
此文档下载收益归作者所有