Ổ cắm Unix vs máy chủ TCP / IP: cổng


42

Ai đó có thể vui lòng mô tả cho tôi những ưu và nhược điểm của việc sử dụng tệp socket Unix so với tcp / ip localhost: port khi thiết lập dịch vụ trên máy chủ (Ubuntu, FWIW) không?

Trong trường hợp cụ thể này, nó dành cho máy chủ Python WSGI (uWSGI) nhưng tôi chỉ quan tâm chung chung (ví dụ: tôi biết bạn có thể thiết lập MySQL theo cả hai cách).

Tôi nhận ra rằng sử dụng tcp / ip có nghĩa là các dịch vụ có thể được tiếp xúc với các máy khác, nhưng tôi chỉ quan tâm đến việc có bất kỳ sự đánh đổi hiệu suất nào khi truy cập dịch vụ cục bộ hay không.

Chúc mừng.


1
Cả hai câu trả lời tuyệt vời và thực sự hữu ích - cảm ơn bạn! :)
Ludo

Câu trả lời:


40

Ổ cắm Unix nhanh hơn một chút vì bạn không có tcp-phí. Nếu bạn nhận ra sự mất hiệu suất này là một câu hỏi về tải máy chủ. Nếu bạn không tải máy chủ rất cao, bạn sẽ không nhận ra nó.

Nếu bạn sử dụng Jails (FreeBSD) hoặc một số công nghệ ảo hóa khác để tách ví dụ: MySQL-Server khỏi Máy chủ web, bạn thường sử dụng thiết lập tcp / ip thay vì ổ cắm. Các quy tắc tường lửa cần phải hạn chế truy cập mặc dù.

Bạn cần tìm hiểu xem hệ thống của bạn có bị tải nặng hay không, vì vậy ổ cắm là bắt buộc hoặc bạn có thể tập trung vào một thiết kế hệ thống đẹp (tách dịch vụ), thì giải pháp tcp / ip sẽ tốt hơn.

Vì vậy, làm cho một câu trả lời dài ngắn:

Có, có một sự khác biệt hiệu suất, ổ cắm nhanh hơn. Nếu bạn không chịu tải máy chủ cao, chỉ cần chọn những gì phù hợp hơn với thiết kế hệ thống của bạn.


3
Re: ổ cắm nhanh hơn ... không phải cả hai ổ cắm?
Bart Silverstrim

4
@Bart Silverstrim: không, ổ cắm là ổ cắm; TCP có API giống như ổ cắm
Javier

7
Tôi tin rằng chúng được gọi là "ổ cắm Unix" và "ổ cắm Internet". ( socket(AF_INET, SOCK_STREAM, ...))
grawity

1
tôi vừa thử nghiệm một vài truy vấn mysql với php-mysql (unix vs tcp-socket, cả localhost). ví dụ: "chọn SQL_NO_CACHE 1" để loại bỏ các yếu tố không vận chuyển. không có sự khác biệt có thể đo lường được. Cả hai có trung bình 0,25 ms, thời gian tốt nhất cho BOTH là 0,19 ms.
Jens

11

Về cơ bản, đó là sự đánh đổi giữa hiệu suất và tính linh hoạt. Ổ cắm tên miền Unix sẽ cung cấp cho bạn hiệu suất tốt hơn một chút, trong khi ổ cắm được kết nối với localhost cung cấp cho bạn tính di động tốt hơn một chút. Bạn có thể dễ dàng di chuyển ứng dụng máy chủ sang HĐH khác chỉ bằng cách thay đổi địa chỉ IP từ localhost sang tên máy chủ khác.

Một ổ cắm tên miền Unix sử dụng hệ thống tệp cục bộ để tạo cơ chế IPC giữa các quy trình máy chủ và máy khách. Bạn sẽ thấy một tập tin trong / var ở đâu đó khi ổ cắm tên miền Unix được kết nối.

Nếu bạn đang tìm kiếm hoàn toàn là giải pháp hiệu suất tối ưu, bạn có thể muốn khám phá IPC bộ nhớ dùng chung. Nhưng, đó là một chút phức tạp hơn.


3

Ưu điểm của ổ cắm tên miền Unix.

  1. Quyền truy cập có thể được quản lý thông qua hệ thống cấp phép người dùng Unix bằng cách đặt quyền trên chính ổ cắm hoặc máy chủ đọc tên người dùng của máy khách đang kết nối.
  2. Ít có cơ hội vô tình để lộ ổ cắm ra thế giới bên ngoài. Ví dụ: nếu máy chủ cũng chạy proxy web thì điều đó có thể vô tình cho phép kết nối với ổ cắm trên localhost.

Nhược điểm của ổ cắm tên miền Unix

  1. Không di động đến các hệ thống không unix.
  2. Có thể khó xử với chroots, nhà tù hoặc tương tự
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.