Cosa sono i socket Unix e come funzionano?

Contenuti

Collegamenti del cavo in fibra ottica.

I socket Unix sono una forma di comunicazione tra due processi che appare come un file su disco. Questo file può essere utilizzato da altri programmi per determinare connessioni molto veloci tra due o più processi senza alcun sovraccarico di rete..

Cosa sono le spine??

I socket sono una connessione diretta tra due processi. Immagina se volessi chiamare il tuo amico in futuro; posso fare una chiamata?, fallo instradare attraverso la tua compagnia telefonica e torna a casa, Oppure potresti far passare un cavo direttamente a casa tua e tagliare l'intermediario. Quest'ultimo è apparentemente poco pratico nella vita reale., ma nel mondo Unix è molto comune determinare queste connessioni dirette tra i programmi.

Il nome corretto per i socket Unix è Socket de dominio Unix, perché risiedono tutti all'interno di un computer. In qualche modo, i socket sono una rete completamente contenuta all'interno del kernel; invece di utilizzare le interfacce di rete per inviare dati, quegli stessi dati possono essere inviati direttamente tra i programmi.

Nonostante la creazione di file su disco, I socket Unix in realtà non scrivono i dati che inviano su disco, visto che sarebbe troppo lento. Anziché, tutti i dati sono tenuti nella memoria del kernel; l'unico punto del file socket è mantenere un riferimento al socket e dargli i permessi del file system per controllare l'accesso. Come esempio, Il socket MySQL di solito è in:

/var/lib/mysql/mysql.sock

Questo file non contiene nulla e non dovresti modificarlo direttamente, ad eccezione delle autorizzazioni ove applicabile. È solo un nome.

Come funzionano le spine??

I socket forniscono semplicemente l'hardware effettivo per spostare i dati. I socket basati su TCP sono chiamati stream socket, dove arriveranno tutti i dati in ordine. I socket basati su UDP sono socket datagram, dove l'ordine (o anche la consegna) Non è garantito. Inoltre ci sono prese grezze, che non hanno alcuna restrizione, e vengono utilizzati per implementare diversi protocolli e utilità che devono ispezionare il traffico di rete di basso livello, come Wireshark.

I socket generalmente usano ancora TCP o UDP, dato che non sono niente di speciale se non una pipa fantasiosa all'interno del kernel. TCP e UDP sono protocolli di trasporto che definiscono come i dati si spostano da un luogo all'altro, ma a loro non interessa davvero cosa siano i dati. TCP e UDP forniscono la piattaforma per la maggior parte degli altri protocolli come FTP, SMTP e RDP, operando a livelli superiori.

È possibile che un'applicazione utilizzi un'implementazione TCP leggermente diversa; le prese usano il SOCK_STREAM protocollo, che è ciò che TCP usa anche per il trasporto quasi sempre, e anche se sono semplicemente intercambiabili, tecnicamente sono leggermente diversi. Anche se questa è una cosa di basso livello e non è davvero qualcosa di cui ti devi preoccupare, sappi solo che la maggioranza il traffico inviato tramite socket di dominio UNIX è basato su TCP o UDP, o almeno abbastanza simile, e TCP inviato tramite socket di dominio UNIX è più veloce di TCP tramite interfacce di rete come porte.

Utilizzo della presa in pratica

I socket Unix sono generalmente usati come alternativa alle connessioni TCP supportate dalla rete quando i processi sono in esecuzione sulla stessa macchina.. Generalmente, i dati vengono ancora inviati attraverso gli stessi protocolli; rimane semplicemente all'interno della stessa macchina e sa che è in esecuzione sullo stesso dominio (da qui il nome socket di dominio UNIX), quindi non devi mai disturbare un'interfaccia di rete loopback per connetterti a se stessa.

Il più grande esempio di questo è Redis, un archivio di valori chiave estremamente veloce che opera interamente in memoria. Redis viene utilizzato più volte sullo stesso server che vi accede, così puoi usare regolarmente le prese. A livelli così bassi e quanto è veloce Redis, le prese forniscono un Aumento delle prestazioni di 25% in alcuni benchmark sintetici.

Se ti stai connettendo a un database MySQL, puoi anche usare una presa. Ti connetteresti regolarmente a host:port da un sistema remoto, ma se ti stai connettendo a un database sullo stesso server (come esempio, un'API REST che accede a un database), puoi usare le prese per accelerare. Ciò non influirà sul normale utilizzo, ma è molto evidente sotto carico, più di 20% Su 24 core di fascia alta con 128 utenti simultanei e un milione di query al secondo. Se vedrai o meno un vantaggio dalle prese è una storia diversa., ma a quel punto probabilmente vorrai comunque esaminare la replica e il bilanciamento del carico.

Se vuoi lavorare con le prese manualmente, puoi usare il socat utility per esporli attraverso le porte di rete:

socat TCP-ASCOLTA:12345 UNIX-CONNECT:/var / lib / socket.sock

tecnicamente, questo vanifica lo scopo dei socket di dominio Unix, ma può essere utilizzato per il debug a livello di trasporto.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.