Unix socket vs host TCP / IP: port

40

Alguém poderia me descrever os prós e contras de usar um arquivo de soquete Unix vs um tcp / ip localhost: port ao configurar serviços em um servidor (Ubuntu, FWIW)?

Nesta instância específica, é para um servidor Python WSGI (uWSGI), mas estou interessado em geral (por exemplo, sei que você pode configurar o MySQL de ambas as maneiras).

Eu percebo que usar 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.

    
por Ludo 27.10.2010 / 13:30

3 respostas

37

Os soquetes Unix são um pouco mais rápidos, já que você não tem o tcp-overhead. Se você perceber que essa perda de desempenho é uma questão de carga do servidor. Se você não tem uma carga de servidor muito alta, você não a reconhecerá.

Se você usa Jails (FreeBSD) ou alguma outra tecnologia de virtualização para separar o MySQL-Server do servidor Web, você geralmente usa a configuração tcp / ip em vez de sockets. As regras de firewall precisam restringir o acesso.

Você precisa descobrir se o seu sistema está sob carga pesada, para que um soquete seja essencial ou você possa se concentrar em um bom design do sistema (serviços de separação), então uma solução tcp / ip seria melhor.

Portanto, faça uma longa resposta:

Sim, há uma diferença de desempenho, os soquetes são mais rápidos. Se você não está sofrendo alta carga de servidor, basta escolher o que se encaixa melhor ao design do seu sistema.

    
por 27.10.2010 / 13:38
9

É basicamente uma troca entre desempenho e flexibilidade. Os soquetes de domínio Unix lhe darão um desempenho um pouco melhor, enquanto um soquete conectado ao localhost lhe dará portabilidade um pouco melhor. Você pode facilmente mover o aplicativo do servidor para outro sistema operacional apenas alterando o endereço IP do 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 o servidor e os processos do cliente. Você verá um arquivo em / var em algum lugar quando o soquete do domínio Unix estiver conectado.

Se você está procurando puramente a melhor solução de desempenho, você pode querer explorar um IPC de memória compartilhada. Mas isso é um pouco mais complexo.

    
por 28.10.2010 / 00:31
2

Profissionais de sockets de domínio Unix.

  1. O acesso pode ser gerenciado através do sistema de permissão do usuário Unix, seja configurando as permissões no próprio soquete ou pelo servidor lendo o nome de usuário do cliente de conexão.
  2. Menos chance de expor inadvertidamente o soquete ao mundo externo. Por exemplo, se o servidor também executar um proxy da Web, isso poderá inadvertidamente permitir conexões a soquetes no host local.

Contras de soquetes de domínio Unix

  1. Não é portável para sistemas não-unix.
  2. Pode ser complicado com chroots, cadeias ou similares
por 19.10.2017 / 15:23