关键字:
KFS,实时同步,程序性能,perf命令
概述
程序的性能是指计算机程序在执行任务时所表现出的速度、效率和稳定性等方面的度量。性能的好坏直接影响到程序的用户体验和开发成本。优化程序性能通常包括提高代码质量、减少资源消耗、采用更高效的算法和技术等方面。本文将简要介绍KFS提供的与性能相关的命令-perf。
实时同步流程概述
源端
Stage(阶段) | Extraction | Applying |
binlog-to-q | 从事务日志获取增量 | 将增量放入内存队列 |
q-to-kufl | 从内存队列中获取增量 | 1.将增量写入KUFL 2.更新数据库中的中间表断点 |
目标端
Stage(阶段) | Extraction | Applying |
remote-to-kufl | 通过网络从源端KUFL获取增量 | 将增量写入本地KUFL |
kufl-to-q | 从本地KUFL获取增量 | 将增量写入内存队列 |
q-to-dbms | 从内存队列中获取增量 | 将增量加载到目标端数据库 |
KFS源端的工作流分为两个阶段:binlog-to-q, q-to-kufl.
binlog-to-q阶段,KFS从源端的数据库日志中抽取增量数据,经过extractor模块解析封装后,以DBMSEvent的形式在内存队列queue中暂存,此阶段的主要工作是将数据库的元组信息抽取转化为DBMSEvent,我们称此阶段为“解析”阶段。
q-to-kufl阶段,将队列中的DBMSEvent取出,封装为KUFLEvent,经过序列化成为KUFL持久化在外存文件中,此阶段主要是将内存中的数据转化为外存文件持久化,我们称此阶段为“存储”阶段。
KFS目标端工作流分为三个阶段:remote-to-kufl, kufl-to-q, q-to-dbms.
remote-to-kufl阶段,KFS目标端通过主动访问源端的监听,建立TCP连接,从源端的KUFL文件中反序列化按顺序将KUFLEvent获取,获取完成后序列化成为KUFL存储在本地,此阶段的主要任务是将源端的文件发送到目标端,我们将此阶段称为“传输”阶段。
kufl-to-q阶段,KFS将本地的KUFL中反序列化成为KUFLEvent,同时解析为DBMSEvent存储在内存队列queue中。
q-to-dbms阶段,applier将内存中的DBMSEvent取出,同时将其翻译成为SQL语句,应用到目标端数据库中,此阶段的主要目的是将数据入库,因此我们将此阶段称为“入库”阶段。
简要来说,各个阶段所进行的活动如下:
源端
binlog-to-q:1.从事务日志获取增量数据 2.将增量数据放入内存队列
q-to-kufl:1.从内存队列中获取增量数据 2.将增量数据写入KUFL文件持久化 3.更新数据库中间表中的断点位置。
目标端
remote-to-kufl:1.通过网络从源端获取增量数据 2.将增量数据写入KUFL文件持久化
kufl-to-q:1.从本地KUFL文件获取增量数据 2.将增量数据放入内存队列
q-to-dbms:1.从内存队列中获取增量数据2.将增量数据加载到目标数据库
KFS中perf命令
KFS提供了fsrepctl perf命令来进行同步过程中各阶段的性能监控。
源端:
目标端:
Perf结果解析:
Stage:表示当前服务的工作阶段。
源端的工作阶段有:binlog-to-q和q-to-kufl,目标端的工作阶段有:
remote-to-kufl、kufl-to-q、q-to-dbms。详细参考第2节“同步原理概述”。
Seqno:表示对应阶段正在处理的事务seqno号,一个seqno对应数据库中的一个事务。
Latency:表示对应阶段当前的延迟时间,单位秒。
Events:表示对应阶段运行至今所处理的事务frag数量,一个seqno中可能包含1个或多个frag。
Extraction:表示对应阶段的抽取动作消耗的时间。
Filtering:表示对应阶段的过滤动作消耗的时间。
Applying:表示对应阶段的应用动作消耗的时间。
Other:其他时间消耗,可忽略。
Total:该阶段的所消耗的总时间。
在目标端增加配置参数collect_sys_info=ture,在使用perf命令时,会对最后一条KUFL的latency进行判断,若latency小于基准值则判断无性能问题,perf命令正常结束,若latency超过基准值(默认为5秒,可通过replicator.stage.reference_latency参数配置),则进行定时信息收集并打印(可通过replicator.collection_time和replicator.collect_interval配置收集时间以及收集间隔),同时后台会进行执行时间超过基准值(默认值为5秒,可通过replicator.transaction_reference_latency参数配置)的事务记录在文件中。