# 11. RTR (The Resource Public Key Infrastructure (RPKI) to Router Protocol) ## 11.1 Cache Server ### 11.1.1 功能需求 - 支持Full Sync(Reset Query) - 支持Incremental Sync(Serial Query) - 支持多客户端并发 - 支持Serial递增 - 保留一定数量的delta - 支持原子更新 ### 11.1.2 架构设计 采用一级缓存+二级缓存并存的方式。 ![img.png](img/img.png) 其中,一级缓存为运行时缓存,主要职责: - 存储当前完整的snapshot - 历史Delta队列管理 - Serial管理 - RTR查询响应 二级缓存为持久化缓存,主要职责: - snapshot持久化 - 缓存重启后的快速恢复(snapshot和serial) - 不参与实时查询 - 异步写入 ### 11.1.3 核心数据结构设计 #### 11.1.3.1 总cache ```rust struct RtrCache { serial: AtomicU32, snapshot: ArcSwap, deltas: RwLock>>, max_delta: usize, } ``` #### 11.1.3.2 Snapshot ```rust struct Snapshot { origins: Vec, router_keys: Vec, aspas: Vec, created_at: Instant, } ``` #### 11.1.3.3 Delta ```rust struct Delta { serial: u32, announced: Vec, withdrawn: Vec, } ``` ## 11.2 Transport 初版实现RTR over TLS(可外网)和RTR over TCP(内网)两种方式。