Apache Iggy: thread-per-core with io_uring in Rust
2 months ago
- #thread-per-core
- #io_uring
- #performance
- Apache Iggy 迁移到基于io_uring的线程每核架构,以获得更好的性能和可扩展性
- 先前使用tokio的架构面临块设备I/O和线程池限制的问题
- 线程每核架构通过减少锁竞争和提高缓存局部性来改善可扩展性
- 选择io_uring是因为其基于完成的I/O模型比tokio使用的轮询模型更高效
- 评估了三种异步运行时:monoio、glommio和compio,最终选择compio因其积极维护和广泛的io_uring功能覆盖
- 挑战包括内部可变性问题以及对更好API来处理共享状态的需求
- 解决方案涉及将资源划分为共享的强一致性资源和分片的最终一致性资源,采用单写入原则
- 性能基准测试显示吞吐量和延迟显著改善,尤其是在高负载和强一致性模式下
- 讨论了Rust异步运行时生态现状,指出缺乏类似Seastar的Rust框架以及POSIX兼容API的限制
- 未来工作包括使用Viewstamped Replication实现集群化和进一步优化