9

私は、多くの同時アクセスを持つパブリック 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 に関する多くの議論を見てきました。私の問題と上記のモデルに基づいて、いくつか質問があります。

  1. 非同期リクエストもサポートする Servlet 3.0 を使用する計画がある場合、Netty.io を使用する必要がありますか?
  2. イベント駆動型 Web サーバー (例: Jetty) を使用することは、イベント駆動型 Web サーバーではない Tomcat 7 (Servlet 3.0 をサポートする) のようなプロセスベースの Web サーバーを使用するのとは異なりますか?
  3. 多くのサイトで、Netty.io が 1 つのスレッド ピア リクエストの従来の方法ではなく、スレッドが多くのリクエストを受け入れることができる方法で動作するのを見ました。実際には、どのように機能しますか?
  4. 非同期リクエスト処理 (サーブレット 3.0) とノンブロッキング IO (NIO) は異なる概念ですか? どのように?
  5. NIO を使用した REST API を見たことがないのですが、これは良いアプローチですか? どのような潜在的な問題が発生する可能性がありますか?
4

2 に答える 2

3

Is necessary to use Netty.io once that I have plans to use Servlet 3.0 that supports Asynchronous Requests too?

No. It should all be handled by the container.

Use an event-driven webserver (ex: Jetty) is different to use a process based webserver like Tomcat 7 (that supports to Servlet 3.0) that isn't an event-driven webserver?

I'm not aware of any such difference. They both implement Servlet 3.0 so to that extent they are both event-driven.

I saw in many sites that Netty.io works in a way where a thread can accept many requests, instead of the classic way of one thread peer request. In the practice, how it works?

It's irrelevant, see (1) above.

Asynchronous request handing (Servlet 3.0) and Non-Blocking IO (NIO) are different concepts? In which way?

Yes. In every way. Too large a question to address here.

I never see a REST API using NIO, is it a good approach? Which potential problems can I will have?

I've rarely seen any need to use NIO at the client end.

于 2013-01-29T08:00:48.273 に答える
2

Servlet API と NIO を比較するのは無意味だと思います。たとえばNettyを使用してサーブレットAPIを実装できます(これは自転車の発明に非常に近いです)。3.0 に含まれる非同期の性質を考慮すると、ブロッキング IO に基づいて効果的な実装を構築できるとは思えません。ソースを調査する必要さえありません。「org.mortbay.jetty.nio.SelectChannelConnector」のようなクラス名は、自己記述的です。

RESTについても同じです。それは別のレイヤーです。たとえば、NIO コネクタを使用するように tomcat をセットアップできます。基本的に、このような構成変更はアプリケーション レイヤーでは表示されません。(時々発生するバグは考慮していません)。

于 2013-01-29T21:59:28.183 に答える