中文
Netpoll es un marco de red de E/S sin bloqueo de alto rendimiento, centrado en escenarios RPC, desarrollado por ByteDance.
RPC suele tener mucha lógica de procesamiento y, por lo tanto, no puede manejar E/S en serie. Pero la red de biblioteca estándar de Go está diseñada para bloquear las API de E/S, de modo que el marco RPC solo puede seguir el diseño One Conn One Goroutine. Se desperdiciará una gran cantidad de costos por el cambio de contexto, debido a una gran cantidad de rutinas con alta concurrencia. Además, net.Conn no tiene API para verificar Alive, por lo que es difícil crear un grupo de conexiones eficiente para el marco RPC, porque puede haber una gran cantidad de conexiones fallidas en el grupo.
Por otro lado, la comunidad de código abierto actualmente carece de bibliotecas de red Go que se centren en escenarios RPC. Repositorios similares como: evio, gnet, etc., se centran en escenarios como Redis, HAProxy.
Pero ahora nació Netpoll y resolvió los problemas anteriores. Se inspira en el diseño de evio y netty, tiene un rendimiento excelente y es más adecuado para la arquitectura de microservicios. Además, Netpoll proporciona una serie de funciones y se recomienda reemplazar net en algunos escenarios de RPC.
Desarrollamos el marco RPC Kitex y el marco HTTP Hertz basado en Netpoll, ambos con un rendimiento líder en la industria.
Los ejemplos muestran cómo construir un cliente y servidor RPC usando Netpoll.
Para obtener más información, consulte el documento.
Ya
IsActive
admite verificar si la conexión está activaDialer
admite la creación de clientesEventLoop
admite la construcción de un servidorFuturo
No compatible
El punto de referencia debe cumplir con los requisitos de uso industrial. En el escenario RPC, la concurrencia y el tiempo de espera son elementos de soporte necesarios.
Proporcionamos el proyecto netpoll-benchmark para rastrear y comparar el rendimiento de Netpoll y otros marcos en diferentes condiciones como referencia.
Más puntos de referencia hacen referencia a kitex-benchmark y hertz-benchmark.