Gniazdo Unix vs host TCP / IP: port

42

Czy ktoś mógłby mi opisać zalety i wady korzystania z pliku gniazda Unix vs. localhost tcp / ip: port podczas konfigurowania usług na serwerze (Ubuntu, FWIW)?

W tym konkretnym przypadku jest to serwer Python WSGI (uWSGI), ale interesuje mnie ogólnie (np. Wiem, że możesz skonfigurować MySQL na dwa sposoby).

Zdaję sobie sprawę, że korzystanie z tcp / ip oznacza, że ​​usługi mogą być udostępniane innym komputerom, ale interesuje mnie tylko to, czy występują jakieś kompromisy w wydajności podczas lokalnego dostępu do usług.

Twoje zdrowie.

Gra w kości
źródło
1
Obie wspaniałe odpowiedzi i bardzo przydatne - dziękuję! :)
Ludo

Odpowiedzi:

40

Gniazda unixowe są trochę szybsze, ponieważ nie masz narzutu TCP. Jeśli zauważysz, że utrata wydajności jest kwestią obciążenia serwera. Jeśli nie masz bardzo dużego obciążenia serwera, nie rozpoznasz go.

Jeśli używasz Jails (FreeBSD) lub innej technologii wirtualizacji, aby oddzielić np. MySQL-Server od Webserver, często używasz konfiguracji tcp / ip zamiast gniazd. Jednak reguły zapory muszą ograniczać dostęp.

Musisz dowiedzieć się, czy twój system jest obciążony, więc gniazdo jest koniecznością, lub możesz skupić się na ładnym projekcie systemu (oddzielanie usług), wtedy rozwiązanie tcp / ip byłoby lepsze.

Tak więc krótko odpowiedz:

Tak, istnieje różnica w wydajności, gniazda są szybsze. Jeśli nie odczuwasz dużego obciążenia serwera, po prostu wybierz to, co lepiej pasuje do projektu twojego systemu.

Benedikt Niessen
źródło
3
Re: gniazda są szybsze ... czyż nie oba gniazda?
Bart Silverstrim
4
@Bart Silverstrim: nie, gniazda są gniazdami; TCP ma API typu gniazdowego
Javier
7
Sądzę, że nazywają się one „gniazdami unixowymi” i „gniazdami internetowymi”. ( socket(AF_INET, SOCK_STREAM, ...))
grawity
1
właśnie przetestowałem kilka zapytań mysql z php-mysql (unix vs. tcp-socket, oba localhost). na przykład „wybierz SQL_NO_CACHE 1”, aby wyeliminować czynniki niebędące transportem. nie było mierzalnej różnicy. ZARÓWNO miał średnio 0,25 ms, najlepszy czas ZARÓWNO wynosił 0,19 ms.
jens
11

Jest to w zasadzie kompromis między wydajnością a elastycznością. Gniazda domeny uniksowej zapewniają nieco lepszą wydajność, a gniazdo podłączone do localhost zapewnia nieco lepszą przenośność. Możesz łatwo przenieść aplikację serwera do innego systemu operacyjnego, po prostu zmieniając adres IP z localhost na inną nazwę hosta.

Gniazdo domeny Unix korzysta z lokalnego systemu plików, aby utworzyć mechanizm IPC między procesami serwera i klienta. Zobaczysz plik w / var gdzieś po podłączeniu gniazda domeny Unix.

Jeśli szukasz wyłącznie rozwiązania zapewniającego najwyższą wydajność, możesz poznać IPC z pamięcią współużytkowaną. Ale to trochę bardziej skomplikowane.

IAPaddler
źródło
3

Plusy gniazd domeny Unix.

  1. Dostępem można zarządzać za pośrednictwem systemu uprawnień użytkownika Unix, ustawiając uprawnienia do samego gniazda lub przez serwer odczytujący nazwę użytkownika łączącego się klienta.
  2. Mniejsza szansa na nieumyślne wystawienie gniazda na świat zewnętrzny. Na przykład, jeśli na serwerze działa także serwer proxy sieci Web, może to przypadkowo zezwolić na połączenia z gniazdami na hoście lokalnym.

Wady gniazd domeny Unix

  1. Nie można przenosić na systemy inne niż Unix.
  2. Może być niezręczny w przypadku chrootów, więzień lub podobnych
Peter Green
źródło