¿Podría alguien describirme los pros y los contras del uso de un archivo de socket Unix frente a un tcp / ip localhost: port al configurar servicios en un servidor (Ubuntu, FWIW)?
En este caso particular, es para un servidor Python WSGI (uWSGI) pero solo estoy interesado en general (por ejemplo, sé que puede configurar MySQL de ambas maneras).
Me doy cuenta de que usar tcp / ip significa que los servicios pueden estar expuestos a otras máquinas, pero solo estoy interesado en saber si hay compensaciones de rendimiento al acceder a los servicios localmente.
Aclamaciones.
Respuestas:
Los sockets Unix son un poco más rápidos, ya que no tiene el tcp-gastos generales. Si se da cuenta de que esta pérdida de rendimiento es una cuestión de carga del servidor. Si no tiene una carga de servidor muy alta, no la reconocerá.
Si usa Jails (FreeBSD) o alguna otra tecnología de virtualización para separar, por ejemplo, el servidor MySQL del servidor web, a menudo usa la configuración tcp / ip en lugar de sockets. Sin embargo, las reglas del firewall deben restringir el acceso.
Debe averiguar si su sistema está bajo una gran carga para que un socket sea imprescindible o si puede centrarse en un buen diseño del sistema (servicios de separación), entonces una solución tcp / ip sería mejor.
Entonces haga una respuesta larga corta:
Sí, hay una diferencia de rendimiento, los enchufes son más rápidos. Si no sufre una gran carga del servidor, simplemente elija lo que mejor se adapte al diseño de su sistema.
fuente
socket(AF_INET, SOCK_STREAM, ...)
)Básicamente es una compensación entre rendimiento y flexibilidad. Los sockets de dominio Unix le brindarán un rendimiento un poco mejor, mientras que un socket conectado a localhost le brinda una portabilidad un poco mejor. Puede mover fácilmente la aplicación del servidor a otro sistema operativo simplemente cambiando la dirección IP de localhost a un nombre de host diferente.
Un socket de dominio Unix usa el sistema de archivos local para crear un mecanismo IPC entre los procesos del servidor y el cliente. Verá un archivo en / var en algún lugar cuando el socket del dominio Unix esté conectado.
Si está buscando la solución de rendimiento definitiva, puede explorar una memoria IPC compartida. Pero eso es un poco más complejo.
fuente
Ventajas de los sockets de dominio Unix.
Contras de los sockets de dominio Unix
fuente