performance - Sockets de dominio UNIX PostgreSQL vs sockets TCP
(5)
Me pregunto si las conexiones de socket de dominio de UNIX con postgresql son más rápidas que las conexiones de tcp de localhost en una tasa de concurrencia alta y, en caso afirmativo, ¿por cuánto?
Creo que los zócalos de dominio UNIX en teoría ofrecen un mejor rendimiento que los zócalos TCP en la interfaz de bucle invertido, pero en la práctica la diferencia es probablemente insignificante.
Los datos transportados por los sockets de dominio UNIX no tienen que subir y bajar a través de las capas de la pila IP.
re: la respuesta de Alexander. AFAIK no debería obtener más de un cambio de contexto o copia de datos en cada dirección (es decir, para cada read()
o write()
), por lo tanto, creo que la diferencia será insignificante. La pila IP no necesita copiar el paquete a medida que se mueve entre las capas, pero sí tiene que manipular las estructuras internas de datos para agregar y eliminar encabezados de paquetes de capa superior.
El desarrollador principal de Postgres, Bruce Momjian, ha blogueado sobre este tema . Momjian afirma: "La comunicación de socket de dominio Unix es considerablemente más rápida". Midió el rendimiento de la red de consultas que muestra que el socket del dominio local era un 33% más rápido que el uso de la pila TCP / IP.
Los sockets TCP en localhost generalmente se implementan usando sockets de dominio UNIX, por lo que la respuesta en la mayoría de los sistemas es insignificante para ninguno. Sin embargo, esto no es estándar de ninguna manera, es solo la frecuencia con la que se realiza, por lo tanto, no debe depender de esto.
Los sockets de dominio UNIX deberían ofrecer mejor rendimiento que los sockets TCP sobre la interfaz loopback (menos copia de datos, menos conmutadores de contexto), pero no sé si el aumento del rendimiento se puede demostrar con PostgreSQL.
Encontré una pequeña comparación en la lista de correo de FreeBSD: http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html .
afaik, el socket de dominio unix (UDS) funciona como las tuberías del sistema y envía SOLAMENTE datos, no envía checksum y otra información adicional, no utiliza handshake de tres vías como sockets TCP ...
ps: tal vez UDS será más rápido