セルロイドを使用した JRuby アプリケーションがあります。Zeromq ソケットを介してリクエストを受信し、JSON 文字列で応答します。
したがって、私のアプリケーションには 2 つのアクターがあり、1 つはリクエストを処理するため、もう 1 つは応答を送信するためです (Zeromq のプッシュ ソケット)。アプリケーションは約 30 リクエスト/秒のレートでリクエストを受け取ります。将来的には 1000 リクエスト/秒になるでしょう。ただし、1 秒あたりのリクエスト数が増えると、処理に時間がかかります。より多くの CPU を使用し始めます。
受信したリクエストごとに、遅延ブロック内で処理しています。
defer {
response = ResponseHandler.new(socket,message).start
send_response(response)
}
1 秒あたり 20 リクエストの場合、遅延なく正常に動作します。サーバーは 15Gb RAM と 4 コアの構成です。Postgres DB と Redis DB にも接続します。しかし、それはここでは問題ではないようです。
これが私が持っている基本的な構造です。主な俳優サービスがあります。
supervisor = Service.supervise
これにより、10 個のプールを持つ PushSock アクターのインスタンスが内部的に作成されます。
@pushsocket_actor = PushSock.pool(size: 10)
上記の defer ブロックの send_response メソッドは、pushsocket アクターを呼び出します。defer ブロックでは、ResponseHandler は Actor ではありません。
そのため、Service Actor ではプールを使用していません。