知识卡片

复杂度定量分析法:从业务量倒推性能目标

普通读书笔记卡

内容

复杂度分析(高可用、高性能、可扩展等)最忌讳完全拍脑袋式决策,每个约束和限制都应该有详细的逻辑推导过程。书中以”前浪微博”消息队列的高性能分析为例,展示了一套从真实业务量倒推系统性能目标的具体计算方法:假设前浪微博系统用户每天发送1000万条微博,那么微博子系统一天会产生1000万条消息;假设平均一条消息有10个子系统读取,那么其他子系统读取消息的总次数大约是1亿次。把这些数据按秒折算:一天内平均每秒写入消息数为115条,平均每秒读取的消息数是1150条。但系统的读写压力并不是全天完全平均分布的,设计目标应该以峰值来计算而不是均值——峰值一般取平均值的3倍,因此消息队列系统的TPS是345,QPS是3450。除此以外,还要再考虑一定的性能余量:由于当前业务基数较低,为了给后续业务发展预留系统容量,可以把设计目标进一步设定为峰值的4倍,最终得到的性能要求是TPS为1380、QPS为13800。通过这组数字还能进一步识别出真正的复杂度焦点:TPS 1380本身并不高,但QPS 13800已经比较高了,因此可以判断”高性能读取”才是这个系统的复杂度关键点,而不是笼统地说”这个系统要做高性能”。这套方法的核心价值在于,把”这个系统需要多高性能”这种容易变成主观争论的问题,转化成”日活跃量→日消息量→平均QPS/TPS→峰值倍数→预留倍数”这样一条可追溯、可复现的推导链条,让最终的性能设计目标有据可查,而不是拍脑袋定一个看起来”安全”的数字。

参考来源

- 位置:《从零开始学架构》第50讲《架构实战:架构设计文档模板》"复杂度分析"之"高性能"(源文件:_epub-src/OEBPS/text00003.html) - 结论依据:原文说明"前浪微博系统用户每天发送 1000 万条微博……平均每秒写入消息数为 115 条,每秒读取的消息数是 1150 条……峰值一般取平均值的 3 倍,那么消息队列系统的 TPS 是 345,QPS 是 3450……我们将设计目标设定为峰值的 4 倍,因此最终的性能要求是:TPS 为 1380,QPS 为 13800。TPS 为 1380 并不高,但 QPS 为 13800 已经比较高了,因此高性能读取是复杂度之一",直接支撑本卡结论。 - 原始内容:前浪微博系统用户每天发送 1000 万条微博……峰值一般取平均值的 3 倍,那么消息队列系统的 TPS 是 345,QPS 是 3450,考虑一定的性能余量……我们将设计目标设定为峰值的 4 倍,因此最终的性能要求是:TPS 为 1380,QPS 为 13800