유닉스 소켓 vs TCP / IP 호스트 : 포트


42

서버에서 서비스를 설정할 때 유닉스 소켓 파일과 tcp / ip localhost : port를 사용하는 장단점을 나에게 설명해 줄 수 있습니까 (우분투, FWIW)?

이 특별한 경우에는 파이썬 WSGI 서버 (uWSGI) 용이지만 일반적인 것에 관심이 있습니다 (예 : 두 가지 방법으로 MySQL을 설정할 수 있음을 알고 있습니다).

tcp / ip를 사용하면 서비스가 다른 시스템에 노출 될 수 있다는 것을 알고 있지만 로컬로 서비스에 액세스 할 때 성능 상충 관계가 있는지 여부에 관심이 있습니다.

건배.


1
훌륭한 답변과 정말 유용한-감사합니다! :)
Ludo

답변:


40

유닉스 소켓은 tcp-overhead가 없기 때문에 조금 빠릅니다. 이 성능 손실이 서버로드의 문제라는 것을 알고 있다면. 서버로드가 많지 않으면이를 인식하지 못합니다.

Jails (FreeBSD) 또는 다른 가상화 기술을 사용하여 예를 들어 MySQL 서버와 웹 서버를 분리하는 경우 소켓 대신 tcp / ip 설정을 사용하는 경우가 많습니다. 방화벽 규칙은 액세스를 제한해야합니다.

소켓이 필수이거나 시스템 설계 (서비스 분리)에 중점을 둘 수 있도록 시스템에 과부하가 걸리는지 확인해야합니다. 그러면 tcp / ip 솔루션이 더 좋습니다.

그래서 긴 대답을 짧게 만드십시오.

예, 성능 차이가 있으며 소켓이 더 빠릅니다. 서버로드가 높지 않은 경우 시스템 설계에 더 적합한 것을 선택하십시오.


3
Re : 소켓이 빠릅니다 ... 두 소켓 모두 아닌가요?
Bart Silverstrim

4
@Bart Silverstrim : 아니오, 소켓은 소켓입니다. TCP 소켓과 같은 API를 가지고
하비에르

7
나는 그들이 "유닉스 소켓"과 "인터넷 소켓"이라고 믿습니다. ( socket(AF_INET, SOCK_STREAM, ...))
grawity

1
방금 php-mysql (unix vs tcp-socket, localhost)로 mysql-query를 테스트했습니다. 예를 들어 "비 선택 운송 요소를 제거하려면"select SQL_NO_CACHE 1 ". 측정 가능한 차이는 없었습니다. BOTH의 평균 시간은 0.25ms이고 BOTH의 최적 시간은 0.19ms입니다.
jens

11

기본적으로 성능과 유연성 사이의 균형입니다. 유닉스 도메인 소켓은 조금 더 나은 성능을 제공하는 반면, localhost에 연결된 소켓은 조금 더 나은 이식성을 제공합니다. localhost에서 다른 호스트 이름으로 IP 주소를 변경하면 서버 응용 프로그램을 다른 OS로 쉽게 이동할 수 있습니다.

Unix 도메인 소켓은 로컬 파일 시스템을 사용하여 서버와 클라이언트 프로세스 사이에 IPC 메커니즘을 만듭니다. Unix 도메인 소켓이 연결되면 어딘가에 / var 파일이 표시됩니다.

순전히 최고의 성능 솔루션을 찾고 있다면 공유 메모리 IPC를 탐색 할 수 있습니다. 그러나 그것은 조금 더 복잡합니다.


3

유닉스 도메인 소켓의 장점.

  1. 소켓 자체에 대한 권한을 설정하거나 서버가 연결 클라이언트의 사용 이름을 읽음으로써 Unix 사용자 권한 시스템을 통해 액세스를 관리 할 수 ​​있습니다.
  2. 소켓을 외부 세계에 실수로 노출시킬 가능성이 적습니다. 예를 들어 서버가 웹 프록시를 실행하는 경우 실수로 localhost의 소켓에 대한 연결을 허용 할 수 있습니다.

유닉스 도메인 소켓의 단점

  1. 비 유닉스 시스템에는 이식성이 없습니다.
  2. chroots, jails 또는 이와 유사한 어색함
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.