秒杀系统(六)——性能因素

82 阅读2分钟

这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

前言

对于系统而言,对系统的每个模块下都会有对应的性能指标要求的,这是保证程序能提供良好的服务的前提,假如我们有一个数据的批量导入功能,明明才3万条的记录的导入操作,却要耗费数个小时,那么问题究竟出现在哪里呢?

发现性能影响因素

在上一篇文章,我们有提到,我们所拥有的服务器的前提下,代表我们服务器有一个恒定的处理上限,不会主观变化的。就像我刚刚所描述的那样,系统的导入功能,导入小数据量却耗费过多的时间,如果这时候打开监控软件,服务器的资源应该都没有被跑满的。但是处理能力表现不尽人意。那么如何来排查这个功能存在哪些影响因素呢?

代码原因

很多的BUG和性能都是由于编码质量本身决定的,低质量的编码,肯定产生低性能的效果,连既有的资源都没有消耗殆尽,何来的性能呢?我们可以先走读对应的代码逻辑,看是否多重嵌套循环?是否做了冗余的数据复制操作?是否重复的进行存储数据的查询?这些因素都可能导致性能下降。

CPU时间开销

代码的逻辑进行优化以及重构后,我们就可以对每个函数进行时间开销的评估,可以借助现成的评估工具,也可以采用最普通的Java计算时间差的方法,查看每个函数的时间开销,如果有发现几十秒时间的函数消耗的话,这些长时间消耗的函数肯定是有问题的,是否是I/O瓶颈,还是网络瓶颈呢,这些就是要具体的场景具体的进行分析,很多情况下都是I/O和网络传输的瓶颈的。

总结

我们今天探讨了影响系统性能的一些因素,这些因素制约着我们模块的性能,需要考虑如何让性能影响因素降低。