Pero si el consumo de memoria aumenta, tienes que hacer más recolección de basura, que se ejecuta en la CPU. Y así, cuando la CPU se ejecuta, la recolección de basura crece, la memoria crece, la recolección de basura crece, crece en uso y luego la CPU se llena con la actividad de recolección de basura que hay que hacer. Ahora, ese es el problema, ya ves, porque la latencia y el rendimiento están profundamente conectados. Entonces, si tengo una operación lenta en mi code, entonces aumentará la concurrency, lo que aumentará la presión de la memoria, lo que ralentizará la CPU. Y es posible que debido a esa desaceleración en la CPU, la acumulación de eventos para procesar aumentará de nuevo y entrará en algún tipo de ciclo catastrófico donde hasta que la presión se alivie en algún lugar, todo estará bloqueado.
Entonces, ya sabes, el truco aquí es asegurarse de que la mayor parte del proceso se haga lo más rápido posible. Eso es todo, esa es la respuesta a esto. Y no programa más trabajo. Ahora, esto significa en el contexto del registro, por ejemplo, que si estás teniendo, si quieres enviar la misma línea de registro a múltiples destinos, será problemático porque tenemos, o especialmente incluso a través de una red, porque si intentamos hacer eso, esos data permanecerán vivos por más tiempo y en realidad estamos creando más trabajo para nuestro bucle de eventos. En Pino, hacemos todo el procesamiento de data de forma sincrónica. Así que cuando llamas a .info lo que sea, puedes estar seguro de que al usar el predeterminado, todo el procesamiento se hace dentro del macro tick. Así que no hay nada programado para ser ejecutado más tarde. Esto es fenomenal y realmente importante para obtener un buen rendimiento, porque nos aseguramos de que no queda memoria ubicada a la izquierda y se recicla esencialmente muy fácilmente. Ahora podrías activar el modo asíncrono en Pino para que el registro se borre después de un tiempo, y no se escriba inmediatamente, pero es un poco más difícil en el lado de la debugging. Hablaremos de eso en un segundo.
En la presentación original sobre Pino de 2016, teníamos esta luz sobre el hecho de que Pino es más que un módulo, es una forma de vida. Bueno, Pino, es más que un módulo. Y al principio, lo señalamos porque estaba claro que estábamos proponiendo algo radicalmente diferente. ¿Y qué estábamos proponiendo en 2016? Bueno, le decíamos a la gente, mira, necesitas implementar tu transporte como procesos separados o confiar en tu infraestructura. Así que registras en la salida estándar y tu infraestructura recoge la salida estándar y la envía a otro lugar. Sí, todavía recomendamos eso, eso no ha cambiado. Sin embargo, varios equipos se han acercado a nosotros y a nosotros también, pero realmente necesitamos ejecutar la distribución en nuestro proceso. El objetivo típico es enviar tu registro a data dog o a la búsqueda elástica o algo así. Bueno, Pino te permite hacer eso. Bueno, Pino pronto te permitirá hacer eso desde el mismo proceso sin bloquear el hilo principal. Lo veremos en un momento. Ya sabes, lo que pasó fue que todas las personas empezaron a pedirnos las mismas características. Querían formatear sus registros, querían enviarlos a un destino remoto. Querían implementar la rotación de registros, esto era una gran cosa. Y realmente querían enviar múltiples registros a múltiples lugares al mismo tiempo.
Comments