Nuestro servicio scala/thrift utiliza twitter finagle 2.12-18.10.0 con java8. El servicio funciona bien para una sola solicitud o para un puñado de solicitudes, pero cuando intentamos acceder al servicio con muchas solicitudes, recibimos
'com.twitter.finagle.ChannelClosedException: ChannelException at remote address: hostname:9091 from service: calcservice-thrift. Remote Info: Upstream Address: Not Available, Upstream id: Not Available,
at org.apache.thrift.TApplicationException.readFrom(TApplicationException.java:131)
ejemplo de cliente que llega al servidor (falla intermitentemente)
log.info("started");
IntStream.range(0,500)
.parallel()
.forEach(i->{
try {
//remote call to finagle service
}
catch(Exception e){
log.error("error ",e);
}
});
log.info("end");
¿Por qué el servidor cierra aleatoriamente el canal? ¿Cuál podría ser la solución probable para ello?
Solución del problema
Supongo que la configuración de su servidor Finagle no está diseñada para manejar tantas solicitudes en paralelo, y muchas de ellas simplemente quedan sin respuesta o regresan con un mensaje de error. No tengo experiencia con una cantidad tan alta de camareros, pero podría intentar establecer esto en 501 para una configuración de prueba, si activa 500 solicitudes de clientes en paralelo a ese servidor.
ThriftMux.Server()
.withAdmissionControl
.concurrencyLimit(
maxConcurrentRequests = 5
maxWaiters = 501
)
...
No hay comentarios.:
Publicar un comentario