Vad är Unix -uttag och hur fungerar de?

Shutterstock/asharkyu

Unix -uttag är en kommunikationsform mellan två processer som visas som en fil på hårddisken. Den här filen kan användas av andra program för att upprätta mycket snabba förbindelser mellan två eller flera processer utan nätverkskostnader.

Vad är Sockets?

Uttag är en direkt anslutning mellan två processer. Tänk om du ville ringa din vän på vägen; du kan ringa ett samtal genom att ringa upp det via ditt telefonbolag och tillbaka till deras hus, eller så kan du köra en tråd direkt till deras hus och stänga av mellanhanden. Det senare är uppenbarligen opraktiskt i verkliga livet, men i Unix -världen är det mycket vanligt att upprätta dessa direkta kopplingar mellan program.

Det rätta namnet för unix -sockets är Unix Domain Sockets, eftersom de alla finns inom en dator. På ett sätt är sockets ett nätverk som helt och hållet ingår i kärnan; I stället för att använda nätverksgränssnitt för att skicka data kan samma data skickas direkt mellan program.

Trots att du skapar filer på hårddisken skriver Unix -sockets faktiskt inte data de skickar till disken, eftersom det skulle gå alldeles för långsamt. I stället behålls all data i kärnminnet; den enda punkten i sockelfilen är att behålla en referens till sockeln och ge den filsystemtillstånd för att kontrollera åtkomst. Till exempel finns MySQL -uttaget vanligtvis på:

/var/lib/mysql/mysql.sock

Den här filen innehåller inget, och du bör inte ändra den direkt , med undantag för behörigheter där så är tillämpligt. Det är bara ett namn.

Hur fungerar uttag?

Sockets ger helt enkelt den faktiska hårdvaran för att flytta data. TCP-baserade uttag kallas strömuttag, där all data kommer i ordning. UDP-baserade uttag är datagramuttag, där beställning (eller till och med leverans) inte kan garanteras. Det finns också råa uttag, som inte har några begränsningar, och som används för att implementera olika protokoll och verktyg som behöver inspektera trafik på låg nivå, som Wireshark.

Annonsering

Uttag använder vanligtvis fortfarande TCP eller UDP, eftersom de inte är något speciellt annat än ett fint rör i kärnan. TCP och UDP är transportprotokoll som definierar hur data kommer från plats till plats men bryr sig inte riktigt om vad data är. TCP och UDP tillhandahåller plattformen för de flesta andra protokoll som FTP, SMTP och RDP, som fungerar på högre nivåer.

Det är möjligt för en applikation att använda en något annorlunda implementering av TCP; strömuttag använder SOCK_STREAM -protokollet, vilket är vad TCP också använder för transport nästan hela tiden, och medan de i princip är utbytbara är de tekniskt något annorlunda. Även om detta är saker på låg nivå och verkligen inte är något du behöver oroa dig för, vet du bara att den mesta trafiken som skickas via UNIX-domänuttag är TCP- eller UDP-baserad, eller åtminstone ganska lik den och TCP som skickas över UNIX-domänuttag är snabbare än TCP över nätverksgränssnitt som portar.

Socket Use In Practice

Unix-uttag används vanligtvis som ett alternativ till nätverksbaserade TCP-anslutningar när processer körs på samma maskin. Data skickas vanligtvis fortfarande över samma protokoll; den stannar bara inom samma maskin och vet att den körs i samma domän (därav namnet UNIX -domänuttag), så den behöver aldrig störa ett loopback -nätverksgränssnitt för att ansluta till sig själv.

Det största exemplet på detta är Redis, en extremt snabb nyckelvärdesbutik som fungerar helt i minnet. Redis används ofta på samma server som har åtkomst till den, så du brukar kunna använda uttag. På så låga nivåer och med hur snabb Redis är ger socklar en 25%-höjning i vissa syntetiska riktmärken.

Om du ansluter till en MySQL-databas kan du också använda ett uttag. Vanligtvis ansluter du till host: port från ett fjärranslutet system, men om du ansluter till en databas på samma server (till exempel ett REST API som får tillgång till en databas) kan du använda socklar för en snabbare hastighet . Detta påverkar inte normal användning, men är mycket märkbart vid belastning, över 20% på en avancerad 24 -kärna med 128 samtidiga användare och en miljon frågor per sekund. Oavsett om du kommer att se en fördel med uttag eller inte är en annan historia, men då vill du sannolikt undersöka replikering och lastbalansering.

Annonsering

Om du vill arbeta med uttag manuellt kan du använda socat-verktyget för att exponera dem över nätverksportar:

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

Detta gör tekniskt besegra syftet med Unix -domänuttag men kan användas för felsökning vid transportskiktet.


Posted

in

by

Tags: