Page 364 - 《软件学报》2026年第4期
P. 364

张宾 等: 基于大型    DNS  递归服务的域名访问模式测量与分析                                             1805


                  3   测量分析方案

                    对于  DNS  服务商提供的如此庞大的数据量, 如何进行有效的测量分析是本文首先要解决的问题. 测量需要实现
                 周期数据存储不遗漏, 数据不重算, 不少算; 每天汇总数据存储不遗漏, 累加数据不重算, 不少算; 并且在常态下, 分析
                 速度接近留存速度, 平均滞后在         30 min  以内; 同时, 保证分析程序状态和存储数据程序状态可被持续监控.
                  3.1   多机分布式并行测量机制
                    数据的分析目标是一系列大量的包括              DNS  报文的  PCAP  压缩文件, 需要对这些文件的内容进行快速有效的
                 读取和分析. 测试发现, 使用       Python  直接读一个   PCAP  压缩包耗时   120 s 以上, 而先解压缩再读包时间超过 50 s,
                 主要原因是直接读       PCAP  压缩包实际是在内存中解压输出文件流, 支持在内存中读压缩包的组件是                        Python  内置
                 的, 性能比较差, 而通过执行       Linux  系统的  tar 命令解压, 采用  C  语言实现, 性能较好, 所以采用先解压再读方式读
                 取  PCAP.
                    但是, 对于这些文件, 需要考虑在一台机器中用一个线程一次读取一个文件, 还是用多个线程并行读取多个文
                 件, 哪种方式读取效率更高的问题. 表          1  是具体的测试数据, 按照正常推算, 在一台机器上单线程顺序读取两个文
                 件时间为    110 s, 小于表  1  中单台机器两个线程读取两个文件的时间            141 s, 在单台机器单线程顺序读取        5  个文件
                 的时间为    275 s, 远小于在单台机器上启动       5  个线程读取同样     5  个文件的时间, 对于更多的线程通过进一步测试,
                 并没有单线程处理文件效率更高. 可能的原因在于线程在使用多个内核或处理器的 CPU 密集型任务上获得更好
                 的性能, 但文件读取不是 CPU 密集型任务, 磁盘           IO  是大文件读取的主要性能瓶颈, 使用多线程对文件读取还额外
                 需要进行互斥锁的竞争, 反而降低了效率. 因此, 采用单线程的方式具有更加快速的读取效率.
                    但是, 由于要处理的文件量比较大, 采用分布式多机的处理方式, 需要把文件及时分发到不同机器上进行并行
                 处理, 具体分发    PCAP  的逻辑如图    2  所示. 主要机制是当解析文件速度不落后留存文件太多时                 (≤3  个文件) 时, 只
                 让本机分发节点处理, 减少跨节点传输文件带来的时间消耗. 采用此分发机制的主要因素是                             PCAP  文件较大, 特别
                 是应答报文要远大于请求报文, 传输的网络带宽有限, 而过于频繁的文件分发会降低文件的读取效率, 经过测试,
                 留存  3  个文件以内只在本机分发可以获得较好的文件处理效率. 后续, 对于文件的分发过程可以进行进一步的动
                 态优化, 对于较大的文件留存更少, 而较小的文件留存量增加, 同时增加网络状态参数进行控制.

                                                                      分发 PCAP


                                                                        待处理       否
                                                                       PCAP 数
                                                                         ≤3?

                         表 1 不同线程读取时间的对比                                   是

                    线程数          耗时 (s)      读取的文件数
                                                                    只分发到本机节点             均衡分发
                      1            55             1
                      2           141             2
                      5           1 007           5
                                                                       分发结束
                      10          1 101          10
                      15          1 453          15
                                                                       图 2    PCAP  压缩文件分发流程
                    这样, 一天   DNS  流量对应的   PCAP  压缩文件, 主要解析和分析流程如图           3  所示. 流程分为留存    PCAP  分发, 解
                 析  IP  和分析  IP, 其中分发流程由留存文件所在机器执行, 并轮询被分发的机器获取                  IP  列表文件, 被分发的机器包
                 含多台, 每个机器启动解析        IP  的程序, 负责把分发的     PCAP  压缩包解析出     IP  文件; 分析  IP  程序也在  PCAP  留存
                 机器执行, 负责分析      IP  的归属地和运营商等信息, 并做实时累加统计, 完成分析每天留存文件后再通过                       Kafka 发
                 送到一个分布式实时存储和搜索引擎             Elasticsearch  服务平台存储. 这样, 后续分析的所有特征和统计信息都进入
                 Elasticsearch 服务平台.
   359   360   361   362   363   364   365   366   367   368   369