Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Architecture

shijiashuai edited this page Mar 9, 2026 · 1 revision

架构设计

核心设计原则

  • 性能优先: 最大化处理吞吐量和资源利用率
  • 现代 C++: 全面使用 C++23 标准特性
  • 高内聚低耦合: 清晰的模块边界和接口设计
  • 测量驱动: 性能优化必须以 benchmark 数据为依据

架构层次

┌─────────────────────────────────────────────┐
│ 用户 / 调用者 │
├─────────────────────────────────────────────┤
│ CLI 层 (src/cli/) │
│ main.cpp → 参数解析 → 命令分发 │
├─────────────────────────────────────────────┤
│ 应用命令层 (src/cli/commands/) │
│ StatCommand / FilterCommand │
├─────────────────────────────────────────────┤
│ 核心库层 (include/fqtools/) │
│ ProcessingPipelineInterface │
│ StatisticCalculatorInterface │
│ FastqReader / FastqWriter │
├─────────────────────────────────────────────┤
│ 实现层 (src/processing, io, statistics) │
│ TBB 并行流水线 / 批量 I/O / 统计计算 │
└─────────────────────────────────────────────┘

1. CLI 层

  • 入口: src/cli/main.cpp
  • 职责: 参数解析、命令分发、日志初始化
  • 依赖: cxxopts(命令行解析)+ spdlog(日志)

2. 应用命令层

  • 接口: CommandInterface(command_interface.h)
  • 实现: StatCommandFilterCommand
  • 职责: 参数验证、构建领域对象、调用核心库

3. 核心库层(公共 API)

  • 位置: include/fqtools/
  • 聚合入口: fq.h
  • 主要接口:
    • processing_pipeline.hProcessingPipelineInterface
    • statistic_calculator.hStatisticCalculatorInterface
    • io/fastq_reader.hFastqReader
    • io/fastq_writer.hFastqWriter

4. 实现层

模块 目录 职责
I/O src/io/ FASTQ 批量读写、gzip 压缩/解压
处理 src/processing/ TBB 并行流水线、Predicate、Mutator
统计 src/statistics/ 并行统计计算、结果合并
配置 src/config/ 配置加载与验证
错误 src/error/ 异常体系
通用 src/common/ Timer、IDGenerator 等

数据模型

FastqRecord — 零拷贝视图

struct FastqRecord {
 std::string_view id; // 记录标识符
 std::string_view sequence; // DNA 序列
 std::string_view quality; // 质量分数
 std::string_view separator; // 分隔符行(+)
};
  • 使用 std::string_view 指向 FastqBatch 的连续内存,避免字符串拷贝

FastqBatch — 批量容器

FastqBatch
├── buffer_ 连续内存块(存储原始 FASTQ 文本)
└── records_ FastqRecord 数组(string_view 指向 buffer_)
  • Reader 将解析结果填入 FastqBatch
  • 上游处理只读写 FastqRecord(视图),无需额外分配

FastqBatchPool — 对象池

基于 ObjectPool<FastqBatch> 实现,减少 TBB pipeline 中的频繁分配与回收。


并发模型

使用 tbb::parallel_pipeline 实现三阶段流水线:

┌──────────┐ ┌───────────────┐ ┌──────────┐
│ Source │───▶│ Processing │───▶│ Sink │
│ (serial) │ │ (parallel) │ │ (serial) │
└──────────┘ └───────────────┘ └──────────┘
 串行读取 并行过滤/修剪 串行写入
 FastqBatch Predicate+Mutator 有序输出

关键特性

  • Source(serial_in_order): 串行从文件读取 FastqBatch
  • Processing(parallel): 并行对 batch 执行 predicates/mutators 并统计
  • Sink(serial_in_order): 按顺序写出结果,合并统计数据
  • 背压机制: 通过 maxInFlightBatches 控制内存使用,自动平衡 I/O 和计算速度

单线程/多线程自动选择

ProcessingPipeline::run() 根据 threadCount 自动选择:

  • threadCount == 1processSequential()(便于调试、小文件)
  • threadCount > 1processWithTBB()(生产场景)

性能调参入口

按优先级排列:

优先级 参数 说明
首选 batchSize 每批 reads 数量 (10K–100K)
首选 threadCount 并行线程数
首选 maxInFlightBatches 并发批次数 (×ばつ 线程数)
首选 batchCapacityBytes 批次内存限制
次选 专项算法优化 需要 benchmark 数据支撑
不做默认目标 SIMD/PGO 高耦合优化,需要充分证据

CMake 模块拆分

fq_common ← Timer, IDGenerator
fq_error ← FastQException 异常体系
fq_config ← Configuration 配置管理
fq_modern_io ← FastqReader / FastqWriter
fq_processing ← ProcessingPipeline / Predicate / Mutator
fq_statistics ← StatisticCalculator
fq_cli ← CommandInterface / StatCommand / FilterCommand

依赖方向保持自下而上:fq_cli → fq_processing → fq_modern_io → fq_common

安装导出

find_package(FastQTools REQUIRED)
target_link_libraries(my_app PRIVATE FastQTools::FastQTools)

项目目录结构

fastq-tools/
├── include/fqtools/ # 公共 API 头文件(对外接口)
├── src/ # 源代码实现
│ ├── cli/ # CLI 入口与命令
│ ├── common/ # 通用工具
│ ├── config/ # 配置管理
│ ├── error/ # 错误处理
│ ├── io/ # I/O 层
│ ├── processing/ # 处理流水线
│ └── statistics/ # 统计分析
├── tests/ # 测试(unit / integration / e2e)
├── tools/ # 开发工具(benchmark / fuzz / data)
├── config/ # 构建配置(Conan / sanitizers / valgrind)
├── scripts/ # 构建与工具脚本
├── docker/ # Docker 配置
├── docs/ # 项目文档
├── examples/ # 使用示例
└── changelog/ # 变更记录

相关页面

FastQTools v3.1.0

🚀 快速上手

🏗️ 架构与设计

🔧 构建与部署

🧪 质量工程

📖 规范与参考

🔗 外部链接

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /