¿Por qué no son los manipuladores de Netty HTTP compartible?

Vanderwyst:

Netty instancia un conjunto de clases de controlador de solicitudes cada vez que se abre una nueva conexión . Esto parece muy bien para algo así como un WebSocket donde la conexión permanecerá abierta durante toda la vida de la WebSocket.

Al utilizar Netty como un servidor HTTP que podría recibir miles de solicitudes por segundo esto parece que sería bastante exigente en la recolección de basura. Cada solicitud única instancia de varias clases (en mi caso 10 clases de controlador) y luego los recoge la basura algunos milisegundos más tarde.

En un servidor HTTP con una moderada carga ~ 1000 req / seg, que habría diez mil clases para crear instancias y recoger la basura cada segundo .

Parece que podríamos simplemente ver respuesta a continuación crear controladores compartibles que eliminarían esta gran sobrecarga GC usando ChannelHandler.Sharable. Sólo tienen que ser seguros hilo.

Sin embargo, veo que todo el muy básico HTTP Los manipuladores que están empaquetados en la biblioteca son no compartible, como HttpServerCodecy HttpObjectAggregator. Además, ninguno de los ejemplos controlador HTTP son compartibles. No parece que el 99% de ejemplo de código y tutoriales que molestarse con ella. Sólo había una nota publicitaria en Norman Maurer libro (Netty autor) que da una razón para usar un controlador común:

Por qué compartir una CHANNELHANDLER?

Una razón común para la instalación de una sola ChannelHandler en múltiples ChannelPipelines es reunir estadísticas a través de múltiples canales.

No se hace mención de la carga GC se refiere a cualquier lugar.


Netty ha estado en uso regular de la producción durante casi una década. Es discutible la biblioteca de Java que utiliza la mayoría de existencia altamente concurrente de no bloqueo IO.

En otras palabras, que está diseñado para hacer mucho más que mis moderadas 1000 peticiones por segundo.

¿Hay algo que había perdido que hace que la carga no GC es un problema?

O, debería tratar de poner en práctica mis propios Sharablemanipuladores con una funcionalidad similar para decodificar, codificar y escribir peticiones y respuestas HTTP?

Norman Maurer:

Mientras que siempre objetivo de producir como mínimo posible GC en Netty hay situaciones sólo cuando esto no sea realmente posible. Por ejemplo, el estado de los codecs, etc torreón HTTP que es por conexión por lo que estos no se pueden compartir (aunque sería seguro para subprocesos).

La única forma de evitar esto sería poner en común ellos, pero creo que hay otros objetos que son mucho más propensos a problemas de GC de causa y para éstos que tratar de piscina cuando puede hacerse con facilidad.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=335705&siteId=1
Recomendado
Clasificación