一个典型的性能分析案例
知识星球一位同学问了这样一个性能问题:
需求场景:车端上传触发类信号数据到 TOS 桶,持续 1 分钟会产生 1G 左右的包,但不是每分钟都会传。然后云服务 Kafka 监听到数据产生,处理这些数据。
测试方式:等比例准备 20T 数据,按单位时间的量,从桶间复制到监听的桶来模拟并发。
问题一:车多了以后同时上传数据,如何确认公有云桶吞吐性能?如果这里有瓶颈怎么处理?
问题二:如果同时模拟大批量用户(1000)在 2 小时内上传巨量数据(20T),这种场景怎么做?带宽费用如何计算?
这个问题可以说描述的比较全面了,有场景有具体数据还有明确的问题方向。有了这些信息之后,我们对这个案例展开分析,看看如何解决上述的两个问题。
首先,分析问题之前先尝试把服务请求和调用关系绘制出来,如下图:
简单理解该场景,即车辆端(可以理解为本地)产生信号数据时,会上传到云端 TOS 桶进行存储。Kafka 会监听 TOS 是否有新数据产生,如果有则拉取对应数据,进行对应处理。
这里简单介绍下 TOS。TOS,意为顶级的对象存储(Top Object Storage),它是一款分布式存储产品。区别于传统的文件存储系统是多层级树形目录结构,TOS 采用的是扁平化存储方式,即桶内所有对象都处于统一逻辑层级。其中:
存储桶:存储桶(bucket)是用户存储对象(Object)的容器。
对象:对象(Object)是 TOS 存储数据的基本单元对象由键(Key),数据(Data)和元数据(Metadata)三部分组成。
key:对象名,类似 MAP 的 key。
Data:对象内容,是存储主题。
MetaData:对象的元数据,如对象大小、类型。
PS:图源于网络,侵删。
问题一:车多了以后同时上传数据,如何确认公有云桶吞吐性能?如果这里有瓶颈怎么处理?
这个问题其实在我看来是很简单的,因为数据存储采用的是云服务,即第三方厂商提供的服务。类似云服务这种产品,相对来说都是比较标准化的,且 TOS 这种分布式的存储服务,都是支持水平扩展的,因此不必太过担心它的性能瓶颈。
假如该产品真出现所谓的性能瓶颈,大概率是采购规格问题,即购买的 TOS 服务本身的产品设计如此。如下图:
PS:图源于火山引擎 TOS 产品文档,侵删。
当然,不能将自己服务的可靠性全部交给云服务,因此在这个问题上,要考虑自己服务范围内的场景,即车端上传 TOS 这部分的带宽和流量大小。
在这点,要考虑真实的用户场景中,日常和极限场景下,单位时间内的数据产生量,对此进行一定的冗余处理即可。
问题二:如果同时模拟大批量用户(1000)在 2 小时内上传巨量数据(20T),这种场景怎么做?带宽费用如何计算?
这个问题问到了如何做,其实就是性能测试场景设计和实施方面。下面是分析思路:
前置条件:数据上传是持续性的。
数据分析:1000 用户在 2 小时内上传 20T 数据,平均每秒上传约 2.84G 的数据。
用户场景:车端(本地)上传数据,上传速率➗8,排除车端本身网络带宽限制,则 TOS 入口带宽需要达到 22.72Gbps。
场景分析:如上都是按照平均值,且 1 个车端 1 分钟产生 1G 数据位前提进行计算的。但需要考虑具体场景,比如:车端正常产生数据需要多少时间?极端场景产生数据会持续多长时间(极限阈值)?不同场景的所占比率各是多少(流量模型)?
数据准备:依据上述场景得到具体的流量模型分布,然后准备对应的测试数据(或按照场景自行预埋数据)。
带宽费用:按照火山引擎的文档说明,标准的服务带宽无法用户场景,解决方案有两种:一种是提供单,由服务商配置专有网络通道(网络更稳定,但费用更高);另一种则是车端数据上传前压缩,或者 TOS 入口限流(带宽费用较低,但需技术改造,会影响一定的时效性)。
补充说明:
1-从桶间复制数据到监听的桶模拟并发,取巧但不符合实际场景。
2-需求分析要按照实际场景,分段分场景讨论(如我是先梳理请求调用关系,再逐段分析)。
3-数据从 TOS 监听桶到 kafka,同样需要考虑带宽传输速率,以及 Kafka 自身的容量(配置规格)。
如上就是我对这个性能需求案例的分析和思考,仅供大家参考。
版权声明: 本文为 InfoQ 作者【老张】的原创文章。
原文链接:【http://xie.infoq.cn/article/e8bf8a33a877492fc77bdad65】。文章转载请联系作者。
评论