-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Repose Threads are getting choked when the downstream is latent #1712
Comments
@rajagopalvreghunath , I'm not sure I completely understand what you're having trouble with. Repose does NOT process connections to the Origin Service in an Asynchronous manner. Can you give us a little more information as to what you are experiencing when you observe this behavior?
Kindest regards, UPDATE: Edited to correct this response. |
Hi Bill ,
Also we are using 7.3.3.2 version of repose is this version also handles the connections in Asynchronous manner? or should we upgrade to get the same ? Regards, |
Raj, That pool per route and max settings seem ok. What are the simultaneous connections being made to any single Repose instance? Since you are using the containerized flavor, would I be correct in assuming that you are not doing any rate limiting with Repose? If you could send us the full sanitized configs (e.g. no passwords or other sensitive data), any logs that were captured, and a basic diagram of what/how you are testing to ReposeCore AT Rackspace.com we would be happy to take a closer look. Kindest Regards, |
Hi Bill,
This is the Http Pool config And about the questions
Please let me know if repose is using async io for downstreams since as per the codes it look though its making a pooled http they are not async . In short the code look to me like the threads are in IO waiting till the origin service responds to repose is this true? (PS : We are using 7.3.3.2) Regards, |
Raj, I misspoke on my original response. We do NOT process requests to the Origin Service in an Asynchronous manner. We do use Akka calls from filters when making requests to other services, but that is used mainly for caching. The servicing thread still waits for the internal request to return before continuing to process the original request. I have updated/edited my original response to reflect this. Repose uses the model of one thread per incoming request. If more simultaneous connections are requested than there are threads in the pools, then Repose will not service new requests. This is the way JEE containers work and we have bound Repose to that model in order to make it easier for custom filters to be written. That said, there is no plan at this time to support asynchronous connections to the Origin Service. Repose was not originally designed to be used in 12 Factor environments, but we are beginning to migrate the internals to at least support it. Some of the features that are forthcoming are a health check endpoint and the ability to use a single Repose instance as the Remote Datastore for other Repose instances. This capability will allow Rate Limiting to be used even in dynamically maintained containerized environments like Mesos and OpenShift. So to answer the original question, when the currently configured Repose instances begin to choke on to many simultaneous connections due to latency in the Origin Service, then either the size of the default connection pool or the number of Repose instances need to be increased to support the load. The route chosen here would depend on the resources available in your containerized environment. Since you are currently not relying on any of the Distributed Datastore capabilities, as they wouldn't work in a 12 Factor environment anyway, horizontally scaling the Repose layer should be fairly trivial if support for increasing the pools is not available. Kindest Regards, |
Hi All,
we have observed that the repose http connection threads are getting choked while the downstreams are getting latent and eventually repose reaching a non responsive state, Any one have faced the similar situation? is there any plan to move the repose downstream connections to Async IO so that repose wont run out of threads, due to the thread waiting in Network IO
PS: we have reduced the time out in the HttpPool config but since there are expected latent service this is not solving the issue for us. Please suggest
Regards,
Raj
The text was updated successfully, but these errors were encountered: