> 并不是说 nginx 一遇到磁盘 I/O 就不行,只要你的磁盘 I/O 使用到 nginx 的 native AIO 接口。
> 像 leveldb 这样的外部组件对 nginx 的事件循环一无所知,所以无论如何它的 I/O 操作都会阻塞 nginx,无论是磁盘 I/O 还是网络 I/O.
> 不过,由于 Linux 系统的 AIO 实现限制很多,所以 nginx 的 native AIO 接口对于 FreeBSD 这样拥有健全
> AIO 实现的系统来说更有价值。而在 Linux 上很多时候还是得用多个 OS 线程 + 同步阻塞的磁盘 I/O 来拼并发(这也是
> Nginx 2.0 准备引入 OS 独立线程池的原因之一)。
Nginx 2.0 还很遥远 和 native AIO 的完善还很遥远啊,只能想其他法子了
> 目前在 Linux 上推荐的玩法是使用多 OS 线程模型为基于磁盘的存储系统实现一个和 nginx 无关的独立的网络接口层,然后让
> nginx 通过 TCP 或者 Unix domain socket 和它进行非阻塞通信。比如 MySQL、Kyoto
> Tycoon、Tokyo Tyrant 等东西都是这么干的。
> 所以很多时候不得不和各种操作系统的限制做各种折衷,呵呵。
也就是说 Kyoto Tycoon 挂载 leveldb,redis 充当 leveldb 服务端,这样就可以避免了?