暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何缩短单笔交易的执行时间

525

首先需要说明的是,给系统加速的方法很多,但具体到一个系统,是不是合适要具体分析。有些加速的方法会导致另一个方面的副作用(如:降低可靠性)、有些加速方法实现复杂或者成本很高。希望下面的方法总有一款适用你。


本文不涉及整体架构上的优化,即不讨论怎么提高总体吞吐量,只讨论如何缩短单笔交易的执行时间,虽然这两者是有强关联关系的。(比如说,大多数情况下,缩短单笔交易的执行时间会帮助系统提高最大吞吐量) 


我们先从软件层面看,如何提高交易的处理效率

1. 优化编译选项


2. 优化编译的依赖关系。

例如:使得动态链接库(so文件)不会轻易被unload,之后又出现load,反复的unload/load非常消耗时间和资源。例如,让动态链接库依赖于一个常驻进程。


3. 降低日志级别、减少日志输出(即减少写IO)


4. 并行写N个日志

多个应用进程并发写N个日志,或者

数据库并发写N个redo log日志(需要自行开发数据库)


5. 使用缓存或者缓存数据库


6. 使用双层缓存,在缓存的基础上再增加一层缓存,变成两层缓存


7.使用内存数据库,设置数据不落盘


8. 减少冷启动时间

定时唤起睡眠的函数,基于预测做函数预热,根据业务情况调整阈值,应对函数休眠、重启、资源扩容、初始化


9. 优化代码算法


10. 无需查找的“查找算法”

例如:

请求包中带上关键索引ID等信息,直接定位;

表结构中增加关键索引/指针信息,直接定位;

为关键使用频率高的信息增加缓冲池,缩小查询范围


11. 优化备份机制

第一,   备份要系统资源(CPU、网络、存储),无形中会拖慢整个系统运行速度。

第二,   如果是数据同步备份,需要一笔业务双写到两份存储后才能返回成功。响应时间变长


可以做的应对方式

a)取消备份机制,单机运行

b)优化备份机制:比如1主6备,改为1主2备(2备再拖4备)


从硬件层面看,如何提高交易的处理效率


1. 采用物理机而非虚拟机

虚拟机在各个层面(CPU、网络、存储)都有额外的虚拟化管理的消耗。而采用物理机无疑没有这方面的额外消耗。


注:采用物理机(而非虚拟机)会导致系统没有虚拟化层的高可用保证(比如HA、vSAN等等),也会失去虚拟化带来的管理便利。


2. 采用更高端的硬件设备

更强的CPU、网卡、存储服务器、交换机


3. 采用一体机(比如数据库和存储的一体机)

历史上是两个设备,后来整合到一个设备,以减少执行时间


4. 采用专用设备

采用低延时网卡缩短网络延时

1000M网卡延时为40-100us,

10G网卡延时为15us,

专业的低延时网卡为2.0-4.3us。


5. 采用新技术

例如

机械磁盘换为SSD

磁盘换为非易失性内存(这个算比较新的硬件,所以现在用的没那么普遍)


6. 亲和性

a)CPU亲和性:

a.1 进程绑定CPU,让一个进程只跑在一个固定的物理CPU上。这样可以进程数据在不同CPU之间的上下文切换。

a.2 使进程数据在CPU cache当中持续存在,定时发送指令,做数据保持。


b)网络亲和性:在有多条网络路径、存储路径的情况下,主动选择速度较快的链路。


上述一些方法(如取消备份机制、数据不落盘等等)会降低系统的可靠性,出现丢数据的可能,在应用时,需要采用额外的补偿机制(比如日终对账的方式)来找补错误,这种补偿机制是另一个系统/服务器来实现。另外,要帮助用户知晓、理解和承担交易失败导致的风险。




最后修改时间:2019-11-22 09:30:46
文章转载自性能测试与调优,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论