Presa Unix vs host TCP / IP: porta


42

Qualcuno potrebbe descrivermi i vantaggi e gli svantaggi dell'utilizzo di un file socket Unix rispetto a un localhost tcp / ip: porta quando si impostano i servizi su un server (Ubuntu, FWIW)?

In questo caso particolare è per un server Python WSGI (uWSGI) ma sono solo interessato in generale (ad esempio, so che puoi configurare MySQL in entrambi i modi).

Mi rendo conto che l'uso di tcp / ip significa che i servizi possono essere esposti ad altre macchine, ma sono solo interessato a sapere se ci sono compromessi delle prestazioni quando si accede ai servizi localmente.

Saluti.


1
Sia risposte brillanti che davvero utili - grazie! :)
Ludo,

Risposte:


40

Le prese Unix sono un po 'più veloci in quanto non si ha il tcp-overhead. Se ti rendi conto che questa perdita di prestazioni è una questione di carico del server. Se non hai un carico di server molto elevato, non lo riconoscerai.

Se usi Jails (FreeBSD) o qualche altra tecnologia di virtualizzazione per separare, ad esempio, MySQL-Server dal Webserver, usi spesso l'installazione tcp / ip invece dei socket. Tuttavia, le regole del firewall devono limitare l'accesso.

Devi scoprire se il tuo sistema è sotto carico, quindi un socket è un must o puoi concentrarti su un bel design di sistema (servizi di separazione), quindi una soluzione tcp / ip sarebbe migliore.

Quindi fai una lunga risposta breve:

Sì, c'è una differenza di prestazioni, le prese sono più veloci. Se non si verifica un carico elevato del server, è sufficiente scegliere ciò che si adatta meglio al design del sistema.


3
Ri: le prese sono più veloci ... non sono entrambe le prese?
Bart Silverstrim,

4
@Bart Silverstrim: no, le prese sono prese; TCP ha un'API simile a un socket
Javier,

7
Credo che si chiamino "prese Unix" e "prese Internet". ( socket(AF_INET, SOCK_STREAM, ...))
Grawity,

1
ho appena testato alcune query mysql con php-mysql (unix vs tcp-socket, entrambi localhost). ad esempio "selezionare SQL_NO_CACHE 1" per eliminare i fattori non di trasporto. non c'era differenza misurabile. ENTRAMBI aveva una media di 0,25 ms, il miglior tempo per ENTRAMBI era di 0,19 ms.
jens,

11

È fondamentalmente un compromesso tra prestazioni e flessibilità. I socket di dominio Unix offrono prestazioni leggermente migliori, mentre un socket collegato a localhost offre una portabilità leggermente migliore. Puoi facilmente spostare l'app del server su un altro sistema operativo semplicemente cambiando l'indirizzo IP da localhost a un nome host diverso.

Un socket di dominio Unix utilizza il file system locale per creare un meccanismo IPC tra i processi server e client. Vedrai un file in / var da qualche parte quando il socket del dominio Unix è collegato.

Se stai cercando la soluzione di prestazione puramente definitiva potresti voler esplorare un IPC di memoria condivisa. Ma è un po 'più complesso.


3

Pro dei socket di dominio Unix.

  1. L'accesso può essere gestito attraverso il sistema di autorizzazioni utente Unix sia impostando le autorizzazioni sul socket stesso sia dal server che legge il nome utente del client di connessione.
  2. Meno possibilità di esporre inavvertitamente la presa al mondo esterno. Ad esempio, se il server esegue anche un proxy Web, ciò potrebbe inavvertitamente consentire connessioni a socket su localhost.

Contro di socket di dominio Unix

  1. Non portatile per sistemi non unix.
  2. Può essere imbarazzante con chroot, jail o simili
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.