我一直致力于构建一个公共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?
- 使用事件驱动的webserver(例如:Jetty)与使用基于进程的Web服务器不同,例如Tomcat 7(支持Servlet 3.0),它不是一个事件驱动的Web服务器?
- 我在许多网站上看到Netty.io的工作方式是线程可以接受多个请求,而不是一个线程对等请求的经典方式.在实践中,它是如何工作的?
- 异步请求处理(Servlet 3.0)和非阻塞IO(NIO)是不同的概念?用哪种方法?
- 我从来没有看到使用NIO的REST API,这是一个好方法吗?我可以遇到哪些潜在问题?