Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
compio_dns: Supercharged DNS Resolution for the compio Ecosystem
For financial high-frequency trading, every millisecond matters. compio_dns was born from the pursuit of extreme performance.
It seamlessly integrates into the compio ecosystem, non-intrusive, allowing you to gain near-free performance acceleration without modifying any calling code.
The default compio DNS resolution relies on spawn_blocking to call the synchronous getaddrinfo system call (similar to tokio).
This occupies thread pool resources.
compio_dns replaces the default thread-pool-based implementation, providing true fully asynchronous resolution capabilities. Coupled with domain resolution caching, it achieves crushing performance improvements!
Usage
First, install the dependency:
Add the following to your lib.rs or main.rs:
extern crate compio_dns;
This ensures that compio_dns is compiled and registered during linking.
Finally, clean the compilation cache and rebuild with the cfg set to take effect (you must set RUSTFLAGS during compilation):
RUSTFLAGS="--cfg compio_dns "
For convenience, it is recommended to use mise to automatically set RUSTFLAGS.
For example, my mise.toml configuration is as follows:
[]
= "--cfg compio_dns {{ env.RUSTFLAGS }}"
Features
- Zero-Cost Abstraction: Leverages
compio-net'sresolve_set!macro to replace the resolver implementation directly at compile time, with no dynamic dispatch overhead. - Native Async: Built on the
compioruntime, utilizingJoinHandleand async tasks for non-blocking resolution. - Smart Cache: Built-in
scc::HashCache(32k capacity), supporting TTL clamping (min 60s, max 24h) and lazy eviction, significantly accelerating hot domain resolution. - System Integration: Fully supports
/etc/hostsand/etc/resolv.conf, includingsearch domainandndotspolicies, ensuring behavior consistent with the system. - High Availability: Concurrently queries all Nameservers (Happy Eyeballs) and handles UDP truncated responses via TCP Fallback mechanism.
- Custom Protocol Stack: Pure Rust implementation of DNS protocol parsing, supporting zero-copy operations.
Architecture
The diagram below shows how compio_dns interacts with compio-net:
graph TD
UserCode[User Code] -->|Connect| CompioNet[compio-net]
CompioNet -->|Resolve| ExternResolve(ExternResolve Trait)
ExternResolve -->|Static Registration| CompioResolve[compio_dns]
subgraph compio_dns
Cache[scc::HashCache (32k)]
Hosts["Local hosts"]
SystemConfig["System DNS Config"]
UDPSocket[Async UDP Socket]
TCPSocket[Async TCP Socket]
CompioResolve -->|Check| Hosts
CompioResolve -->|Check| Cache
Cache -->|Hit| Return[Return IP]
Cache -->|Miss| Query[Async Query]
Query -->|Read Config| SystemConfig
Query -->|Concurrent Send| UDPSocket
UDPSocket -->|Truncated/Retry| TCPSocket
UDPSocket -->|Parse Response| UpdateCache[Update Cache]
TCPSocket -->|Parse Response| UpdateCache
UpdateCache --> Return
end
Tech Stack
- Runtime:
compio-runtime - IO & Buffer:
compio-io,compio-buf - Network:
compio-net - Concurrency Lock & Cache:
scc(Scalable Concurrent Containers) - Static Initialization:
static_init - Hash Algorithm:
rapidhash - Binary Parsing:
zerocopy - Error Handling:
thiserror
About
This project is an open-source component of js0.site ⋅ Refactoring the Internet Plan.
We are redefining the development paradigm of the Internet in a componentized way. Welcome to follow us:
compio_dns : compio 生态域名解析的超级加速
对应金融高频交易而言,每一毫秒都很重要,compio_dns 诞生于对极致性能的追求。
它能无缝集成到 compio 生态中, 非侵入式,无需修改调用代码就可以获得近乎免费的性能加速
compio DNS 解析默认依赖 spawn_blocking ,调用同步的 getaddrinfo 系统调用(类似 tokio)。
这占用了线程池资源。
compio_dns 替换默认的基于线程池的实现,提供真正的全异步解析能力。配合域名解析缓存,实现了碾压级的性能提升!
使用
先安装依赖:
lib.rs 或 main.rs 加上:
extern crate compio_dns;
这是用来确保 compio_dns 会被编译并在链接时注册。
最后,清理编译缓存并设置 cfg 重新编译即可生效(编译时要设置 RUSTFLAGS)。
RUSTFLAGS="--cfg compio_dns "
为了方便,建议配合 mise 实现自动设置RUSTFLAGS。
比如,我的 mise.toml 配置如下:
[]
= "--cfg compio_dns {{ env.RUSTFLAGS }}"
特性
- 零开销抽象:借由
compio-net的resolve_set!宏,直接在编译期替换解析器实现,无动态分发开销。 - 原生异步:基于
compio运行时构建,利用JoinHandle和异步任务实现非阻塞解析。 - 智能缓存:内置
scc::HashCache(容量 32k),支持 TTL 钳制 (最小 60s,最大 24h) 和惰性淘汰,显著加速热点域名解析。 - 系统集成:完整支持
/etc/hosts、/etc/resolv.conf,包括search domain和ndots策略,行为与系统一致。 - 高可用设计:并发查询所有 Nameserver (Happy Eyeballs),并通过 TCP 回退 机制处理 UDP 截断响应。
- 自研协议栈:纯 Rust 实现的 DNS 协议解析,支持零拷贝操作。
架构设计
下图展示了 compio_dns 如何与 compio-net 交互:
graph TD
UserCode[用户代码] -->|连接| CompioNet[compio-net]
CompioNet -->|解析| ExternResolve(ExternResolve Trait)
ExternResolve -->|静态注册| CompioResolve[compio_dns]
subgraph compio_dns
Cache[scc::HashCache (32k)]
Hosts["本地 hosts"]
SystemConfig["系统 DNS 配置"]
UDPSocket[异步 UDP Socket]
TCPSocket[异步 TCP Socket]
CompioResolve -->|检查| Hosts
CompioResolve -->|检查| Cache
Cache -->|命中| Return[返回 IP]
Cache -->|未命中| Query[异步查询]
Query -->|读取配置| SystemConfig
Query -->|并发发送| UDPSocket
UDPSocket -->|截断/重试| TCPSocket
UDPSocket -->|解析响应| UpdateCache[更新缓存]
TCPSocket -->|解析响应| UpdateCache
UpdateCache --> Return
end
技术栈
- 运行时:
compio-runtime - IO & Buffer:
compio-io,compio-buf - 网络:
compio-net - 并发锁与缓存:
scc(Scalable Concurrent Containers) - 静态初始化:
static_init - 哈希算法:
rapidhash - 二进制解析:
zerocopy - 错误处理:
thiserror
关于
本项目为 js0.site ⋅ 重构互联网计划 的开源组件。
我们正在以组件化的方式重新定义互联网的开发范式,欢迎关注: