Skip to content

Latest commit

 

History

History
228 lines (183 loc) · 8.24 KB

File metadata and controls

228 lines (183 loc) · 8.24 KB

pacPrism 发展路线图

三阶段演进:从中心化到去中心化

核心理念

目标:构建去中心化的软件包分发网络,让任何人贡献闲置存储和带宽,共同组成逻辑上的镜像源。

策略:渐进式演进 —— 在每个阶段验证核心价值,避免一次性设计过度复杂的系统。


Phase 1: 中心化校内缓存

愿景

为 NWPU 校园网提供单机版高性能缓存代理,解决教育网出口带宽瓶颈。

核心功能

  • 真实 APT 代理拦截:解析 GET /debian/pool/main/v/vim/vim_9.0.0.deb 请求
  • 本地文件系统缓存:磁盘持久化,LRU 淘汰策略
  • 官方源回退:缓存未命中时转发到上游镜像(如清华源)
  • 监控面板:缓存命中率、请求日志、可视化统计

当前实现状态 (Updated 2026-01-17)

✅ 已完成 (~90% 功能完整度):

  • HTTP/1.1 透明代理服务器 (Boost.Beast, port 9001)
    • 真正的 HTTP 代理(非重定向):从上游获取文件并直接返回
    • FileCache 系统:
      • HTTP 客户端从上游获取
      • 本地磁盘缓存,自动创建目录
      • SHA256 校验和验证
      • 可配置重试(3 次,指数退避:1s、2s、4s)
      • 可配置超时(连接: 10s,读取: 30s)
  • Range 请求支持 (HTTP 206 Partial Content)
    • 解析 Range header: bytes=0-1023, bytes=512-, bytes=-256
    • 在缓存文件中定位到请求偏移
    • 返回正确的 Content-Range header
    • APT 断点续传的关键功能
  • 条件请求支持 (HTTP 304 Not Modified)
    • If-Modified-Since header 支持
    • If-None-Match (ETag) header 支持
    • 缓存版本未改变时返回 HTTP 304
    • 节省重复请求的带宽
  • DHT 内存索引(单进程哈希表)
    • 9 维索引系统
    • O(1) 查找 via unordered_map
    • 基于 Node ID 的条目
    • 基于时间戳的过期机制
  • HTTP 路由器(三重依赖注入)
    • Validator 集成:请求类型分类(PlainClient vs Node vs Invalid)
    • 完整的 DHT HTTP API(5 个 JSON 端点:verify, store, query, clean/expiry, clean/liveness)
    • 文件代理支持 Range/条件请求(通过 FileCache)
    • 所有路由已测试并工作
  • Validator 与 SHA256
    • 基于节点识别头的请求类型验证
    • 跨平台 SHA256 计算(Windows: bcrypt, Linux: OpenSSL)
    • SHA256 验证用于文件完整性
  • Debian 包解析器
    • 二进制包解析:name_version_arch.extension
    • 源码包解析:.orig.tar.gz/xz, .dsc, .tar.gz/xz
    • 组件提取(main/contrib/non-free)
  • 构建系统(CMake Presets,跨平台)
    • Windows MSYS2 (GCC 15.2.0) 测试通过

🔧 待完善 (生产就绪所需):

  • 结构化日志(替换 std::cout)
  • 监控指标(缓存命中率、带宽节省、请求延迟)
  • 错误处理增强(上游失败、超时、部分下载恢复)
  • 单元测试和集成测试
  • 生产加固(安全加固、输入验证)

部署模式

# 单台服务器(实验室/机房)
./pacprism --role=coordinator --cache-dir=/var/cache/pacprism

# 客户端配置
echo 'Acquire::http::Proxy "http://192.168.1.100:9001";' > /etc/apt/apt.conf.d/pacprism.conf

局限性

  • 单点故障:服务器挂了全校无法使用
  • 存储上限:单机难以存下完整 Debian 仓库(~2TB)
  • 无法横向扩展

Phase 2: 去中心化校内网络

愿景

让 LUG 成员的个人机器组成分布式存储网络,横向扩展存储和带宽。

核心功能

  • 节点注册与发现:启动时向调度节点注册,心跳保活
  • 分片存储策略:按包名首字母分片(group-a, group-b...),高频包完整复制
  • 分布式元数据索引:DHT 维护 分片 → 节点 映射
  • 节点间数据传输:智能路由到有资源的节点,失败自动 fallback
  • 智能路由:优先选择同网段节点,负载均衡,健康度权重

技术架构

                    ┌─────────────────────┐
                    │  Coordinator Node   │
                    │  (调度节点 + DHT)    │
                    └──────────┬──────────┘
                               │
          ┌────────────────────┼────────────────────┐
          │                    │                    │
     ┌────▼────┐          ┌────▼────┐         ┌────▼────┐
     │ Node A  │          │ Node B  │         │ Node C  │
     │ 宿舍 PC  │          │ 实验室   │         │ 服务器  │
     │ Shard:  │          │ Shard:  │         │ Shard:  │
     │ group-a │          │ group-b │         │ Full    │
     └─────────┘          └─────────┘         └─────────┘

分片策略

分片 ID 包范围 复制因子
group-a a* 2 节点
group-b b* 2 节点
group-hot vim,gcc,python3 全节点
full-mirror 所有包 1 节点(服务器)

局限性

  • 依赖调度节点:中心化元数据,单点故障
  • 仅限校园网:NWPU 网段访问
  • 信任模型简单:仅 IP 白名单

Phase 3: 去中心化公网

愿景

扩展到公网,任何大学/组织都能部署,最终形成跨组织的分布式镜像网络。

核心功能

  • 真正的 P2P 协议:Kademlia DHT 替代中心化调度节点
  • 跨组织互联:NWPU、X大学、Y公司节点互联,组织间分片共享
  • 安全与信任:TLS 加密、GPG 包签名验证、节点信誉评分
  • 网关发现:DNS SRV、局域网多播、bootstrap 节点

技术架构

Internet
   │
   ├─ NWPU Network (10 nodes)
   │   └─ DHT Routing Table
   │
   ├─ X大学 Network (15 nodes)
   │   └─ DHT Routing Table
   │
   └─ Y公司 Network (20 nodes)
       └─ DHT Routing Table

查询流程:
Node A 查询 vim
  → Kademlia DHT: find_node(shard_id)
  → 返回 Node B, C, D
  → 测速选择最快节点(优先 NWPU 内网)
  → 下载并校验签名

安全模型

struct NodeID {
    std::string public_key;      // Ed25519 公钥
    std::string hash_id;         // 公钥哈希(Kademlia ID)
    std::string organization;    // 所属组织
};

// 验证
bool verify_gpg_signature(package_data);
bool verify_node_reputation(node);
bool verify_tls_certificate(node);

关键挑战

  • 技术复杂度:Kademlia DHT 实现、安全加密、信誉系统
  • 恶意攻击:数据投毒、女巫攻击、DDoS
  • 法律合规:软件包授权分发

三阶段对比

维度 Phase 1 Phase 2 Phase 3
架构 单机代理 中心调度+分布式存储 完全 P2P
分片策略 无(全量) 按包名首字母 语义分片
节点发现 调度节点注册 Kademlia DHT
安全机制 IP 白名单 IP 白名单+心跳 TLS+GPG+信誉
适用范围 单组织 校园网 公网多组织
扩展性 受限 受调度节点限制 无限扩展

为什么不直接做 Phase 3?

  1. 技术风险:Kademlia DHT + 安全加密极其复杂,bug 多
  2. 维护成本:公网环境需要 24/7 运维和攻击防护
  3. 用户信任:没人会信任无名项目的 P2P 网络
  4. 渐进验证:Phase 1/2 验证核心价值,Phase 3 扩大规模

务实策略:先在可信环境(校园网)验证分布式架构,稳定后再扩展到公网。


差异化定位

竞品 阶段 pacPrism 差异化
Apt-Cacher-NG Phase 1 更现代架构(C++23)、分布式扩展
Dragonfly Phase 3 更轻量(不依赖 K8s)、面向包管理器
DebTorrent Phase 3 仍维护、面向校园网场景

成功标准

  • Phase 1:NWPU LUG 使用,缓存命中率 > 60%,节省出口带宽 > 50%
  • Phase 2:10+ 节点稳定运行,总存储 > 2TB,其他大学复制部署
  • Phase 3:3+ 组织互联,100+ 节点在线,社区自发维护

最后更新: 2026-01-17