我一直致力于构建一个公共 API,该 API 将具有大量并发访问,并且我认为其中一个方面是使用异步 I/O 来考虑可伸缩性方面。
最初我认为将 Nginx 用作 HTTP 服务器(事件驱动),因为他以异步方式工作,与 Tomcat 不同。API 将用 Java 构建,为此我认为使用以下组件:
- Tomcat 7 - HTTP/Web 服务器 + Java 容器
- Netty.io 还是 HttpCore?
- Resteasy(REST 层,带 HttpServlet30Dispatcher servlet)
- MongoDB(带异步 Java 驱动程序)
我看过很多关于 Servlet 3.0 的讨论,因为新版本支持异步请求(使用 NIO)。基于我的问题和上面的模型,我有一些问题:
- 一旦我计划使用支持异步请求的 Servlet 3.0,是否有必要使用 Netty.io?
- 使用事件驱动的网络服务器(例如:Jetty)与使用不是事件驱动的网络服务器的基于进程的网络服务器(如 Tomcat 7(支持 Servlet 3.0))不同?
- 我在许多站点中看到 Netty.io 以一种线程可以接受许多请求的方式工作,而不是单线程对等请求的经典方式。在实践中,它是如何工作的?
- 异步请求处理(Servlet 3.0)和非阻塞 IO(NIO)是不同的概念吗?以何种方式?
- 我从未见过使用 NIO 的 REST API,这是一个好方法吗?我会遇到哪些潜在问题?