Alguém poderia me descrever os prós e os contras do uso de um arquivo de soquete Unix vs um localhost: port tcp / ip ao configurar serviços em um servidor (Ubuntu, FWIW)?
Neste exemplo em particular, é para um servidor Python WSGI (uWSGI), mas estou interessado apenas em geral (por exemplo, eu sei que você pode configurar o MySQL nos dois sentidos).
Sei que o uso do tcp / ip significa que os serviços podem ser expostos a outras máquinas, mas estou interessado apenas em saber se há alguma troca de desempenho ao acessar serviços localmente.
Felicidades.
Respostas:
Os soquetes Unix são um pouco mais rápidos, pois você não possui o tcp-overhead. Se você perceber que essa perda de desempenho é uma questão de carga do servidor. Se você não tiver uma carga de servidor muito alta, não a reconhecerá.
Se você usa o Jails (FreeBSD) ou alguma outra tecnologia de virtualização para separar, por exemplo, o MySQL-Server do servidor da Web, costuma usar a configuração tcp / ip em vez de soquetes. As regras de firewall precisam restringir o acesso.
Você precisa descobrir se o seu sistema está sob carga pesada, de modo que um soquete é obrigatório ou se você pode se concentrar em um bom design de sistema (serviços de separação), então uma solução tcp / ip seria melhor.
Portanto, faça uma resposta longa curta:
Sim, há uma diferença de desempenho, os soquetes são mais rápidos. Se você não está sofrendo muita carga no servidor, basta escolher o que melhor se adapta ao design do seu sistema.
fonte
socket(AF_INET, SOCK_STREAM, ...)
)É basicamente uma troca entre desempenho e flexibilidade. Os soquetes de domínio Unix oferecem um desempenho um pouco melhor, enquanto um soquete conectado ao host local oferece uma portabilidade um pouco melhor. Você pode mover o aplicativo do servidor com facilidade para outro sistema operacional alterando apenas o endereço IP de localhost para um nome de host diferente.
Um soquete de domínio Unix usa o sistema de arquivos local para criar um mecanismo IPC entre os processos do servidor e do cliente. Você verá um arquivo em / var em algum lugar quando o soquete do domínio Unix estiver conectado.
Se você procura puramente a melhor solução de desempenho, pode explorar um IPC de memória compartilhada. Mas isso é um pouco mais complexo.
fonte
Prós de soquetes de domínio Unix.
Contras de soquetes de domínio Unix
fonte