Ổ cắm miền Unix thường nhanh hơn cổng TCP trên giao diện loopback. Nói chung, các ổ cắm miền Unix có độ trễ trung bình là 2 micro giây trong khi các socket TCP 6 micro giây.
Nếu tôi chạy điểm chuẩn với giá trị mặc định (không có đường dẫn), tôi thấy 160k yêu cầu mỗi giây, về cơ bản vì máy chủ redis đơn luồng bị giới hạn bởi ổ cắm TCP, yêu cầu 160k chạy ở thời gian phản hồi trung bình là 6 micro giây.
Làm lại đạt được 320 nghìn yêu cầu SET/GET mỗi giây khi sử dụng Ổ cắm miền Unix.
Nhưng có giới hạn, thực tế là ở Torusware đã đạt được sản phẩm Speedus, hiệu suất TCP socket hiệu suất cao với độ trễ trung bình 200 nano giây (ping chúng tôi tại [email protected] để yêu cầu phiên bản Hiệu suất cực đoan). Với độ trễ gần như bằng không, chúng tôi thấy điểm chuẩn redis đạt được khoảng 500 nghìn yêu cầu mỗi giây. Vì vậy, chúng ta có thể nói rằng độ trễ của máy chủ redis là khoảng 2 micro giây cho mỗi yêu cầu trung bình.
Nếu bạn muốn trả lời càng sớm càng tốt và tải của bạn thấp hơn hiệu suất máy chủ redis-peak thì tránh pipelining có lẽ là lựa chọn tốt nhất. Tuy nhiên, nếu bạn muốn có thể xử lý thông lượng cao hơn, thì bạn có thể xử lý các đường ống yêu cầu. Phản hồi có thể mất nhiều thời gian hơn nhưng bạn sẽ có thể xử lý nhiều yêu cầu hơn trên một số phần cứng. Như vậy, trên kịch bản trước đó, với một đường ống gồm 32 yêu cầu (đệm 32 yêu cầu trước khi gửi yêu cầu thực tế thông qua socket), bạn có thể xử lý lên đến 1 triệu yêu cầu mỗi giây trên giao diện loopback. Và trong kịch bản này là nơi mà lợi ích của UDS không cao, đặc biệt bởi vì việc xử lý đường ống như vậy là nút cổ chai hiệu suất. Trong thực tế, yêu cầu 1M với một đường ống 32 là khoảng 31k "thực tế" yêu cầu mỗi giây, và chúng tôi đã thấy rằng redis-server có thể xử lý 160k yêu cầu mỗi giây.
Ổ cắm miền Unix xử lý khoảng 1.1M và 1.7M yêu cầu SET/GET mỗi giây, tương ứng. TCP loopback xử lý yêu cầu 1M và 1.5 SET/GET mỗi giây.
Với pipelining nút cổ chai chuyển từ giao thức truyền tải sang xử lý đường ống.
Điều này phù hợp với thông tin được đề cập trong trang web redis-benchmark.
Tuy nhiên, pipelining tăng đáng kể thời gian phản hồi.Do đó, không có pipelining 100% hoạt động thường chạy trong vòng chưa đến 1 mili giây. Khi pipelining 32 yêu cầu thời gian đáp ứng tối đa là 4 mili giây trong một máy chủ hiệu năng cao và hàng chục mili giây nếu máy chủ redis chạy trong một máy khác hoặc trong một máy ảo.
Vì vậy, bạn phải cân bằng thời gian phản hồi và thông lượng tối đa.
Bạn có thể sao chép tốc độ chậm này bên ngoài của ứng dụng của bạn sử dụng 'redis-benchmark'? –
Theo [liên kết này] (http://redis.io/topics/benchmarks) Lợi ích hiệu suất của ổ cắm miền unix so với vòng lặp TCP/IP có xu hướng giảm khi pipelining được sử dụng nhiều (tức là đường ống dài). – helloV
bạn có đặt SO_NODELAY không? Tôi đã thấy điều này giúp rất nhiều trong các tình huống nhất định. – geert3