Hasty Briefsbeta

双语

Show HN: Building WebSocket in Apache Iggy with Io_uring and Completion Based IO

6 months ago
  • #Rust
  • #io_uring
  • #WebSocket
  • Apache Iggy正在进行核心架构重写,采用io_uring和thread-per-core无共享设计,以提升性能并降低延迟。
  • 从Tokio迁移到基于完成式异步运行时compio时,由于I/O模型不兼容,集成WebSocket支持遇到了挑战。
  • 流行的Rust WebSocket库Tungstenite采用轮询模式且依赖共享缓冲区,这与compio要求独占缓冲区的完成式模型存在根本性冲突。
  • 团队开发了compio-ws作为适配层,弥合轮询式与完成式I/O模型之间的鸿沟。
  • 初期使用固定缓冲区大小的SyncStream方案在处理大消息时出现性能问题,由此催生了可动态扩容的GrowableSyncStream。
  • GrowableSyncStream采用动态缓冲区调节机制,初始小容量按需增长,并通过可配置上限防止内存耗尽。
  • TCP与WebSocket的基准测试显示,WebSocket带来的合理开销使生产者延迟增加约0.8-1.0ms,消费者延迟约翻倍。
  • 未来计划包括优化缓冲区增长策略、实现缓冲池技术,以及开发原生支持独占缓冲区的高性能WebSocket协议。
  • compio-ws实现已贡献至compio项目,欢迎社区参与进一步优化工作。