私は、多くの同時アクセスを持つパブリック API の構築に取り組んできました。その 1 つは、非同期 I/O を使用してスケーラビリティの側面を考慮することであると考えました。
Tomcatとは異なり、非同期で動作するため、最初はNginxをHTTPサーバー(イベント駆動型)として使用することを考えていました。API は Java で構築され、そのために次のコンポーネントを使用すると考えました。
- Tomcat 7 - HTTP/Web サーバー + Java コンテナー
- Netty.io または HttpCore?
- Resteasy (REST レイヤー、HttpServlet30Dispatcher サーブレットを使用)
- MongoDB (非同期 Java ドライバー付き)
新しいバージョンは (NIO を使用して) 非同期要求をサポートしているため、Servlet 3.0 に関する多くの議論を見てきました。私の問題と上記のモデルに基づいて、いくつか質問があります。
- 非同期リクエストもサポートする Servlet 3.0 を使用する計画がある場合、Netty.io を使用する必要がありますか?
- イベント駆動型 Web サーバー (例: Jetty) を使用することは、イベント駆動型 Web サーバーではない Tomcat 7 (Servlet 3.0 をサポートする) のようなプロセスベースの Web サーバーを使用するのとは異なりますか?
- 多くのサイトで、Netty.io が 1 つのスレッド ピア リクエストの従来の方法ではなく、スレッドが多くのリクエストを受け入れることができる方法で動作するのを見ました。実際には、どのように機能しますか?
- 非同期リクエスト処理 (サーブレット 3.0) とノンブロッキング IO (NIO) は異なる概念ですか? どのように?
- NIO を使用した REST API を見たことがないのですが、これは良いアプローチですか? どのような潜在的な問題が発生する可能性がありますか?