Có bao nhiêu tài nguyên hệ thống sẽ được giữ để duy trì 1.000.000 websocket mở? [đóng cửa]


122

Websocket rất tốt, nhưng liệu nó có thể xử lý 1.000.000 kết nối đồng thời không?
Có bao nhiêu tài nguyên hệ thống sẽ được giữ để duy trì 1.000.000 websocket mở?

Câu trả lời:


65

Cập nhật câu trả lời

Câu trả lời ngắn gọn : có, nhưng nó đắt.

Câu trả lời dài :

Câu hỏi này không phải là duy nhất đối với WebSockets vì WebSockets về cơ bản là các socket TCP tồn tại lâu dài với kiểu bắt tay giống HTTP và tối thiểu hóa khung cho các thông báo.

Câu hỏi thực sự là: một máy chủ duy nhất có thể xử lý 1.000.000 kết nối socket đồng thời và điều này sẽ tiêu tốn tài nguyên máy chủ nào? Câu trả lời là phức tạp bởi một số yếu tố, nhưng 1.000.000 kết nối ổ cắm hoạt động đồng thời là có thể cho một hệ thống có kích thước phù hợp (nhiều CPU, RAM và mạng nhanh) và với một hệ thống máy chủ được điều chỉnh và phần mềm máy chủ được tối ưu hóa.

Số lượng kết nối không phải là vấn đề chính (chủ yếu chỉ là vấn đề điều chỉnh hạt nhân và đủ bộ nhớ), mà là việc xử lý và gửi / nhận dữ liệu đến / từ mỗi kết nối đó. Nếu các kết nối đến được trải dài trong một thời gian dài và chúng hầu như không hoạt động hoặc không thường xuyên gửi các phần nhỏ dữ liệu tĩnh thì bạn có thể nhận được cao hơn nhiều thậm chí 1.000.000 kết nối đồng thời. Tuy nhiên, ngay cả trong những điều kiện đó (kết nối chậm hầu như không hoạt động), bạn vẫn sẽ gặp sự cố với mạng, hệ thống máy chủ và thư viện máy chủ không được định cấu hình và thiết kế để xử lý số lượng lớn kết nối.

Xem câu trả lời của Alessandro Alinone về việc sử dụng tài nguyên gần đúng cho 500.000 kết nối.

Dưới đây là một số tài nguyên cũ hơn nhưng vẫn có thể áp dụng để đọc về cách bạn định cấu hình máy chủ và viết phần mềm máy chủ để hỗ trợ số lượng lớn kết nối:


1
Có thể thực hiện được 12 triệu kết nối socket trên một JVM. Xem cách họ đã làm điều đó mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@JacquesKoorts thx
BG BRUNO

159

Trên các hệ thống ngày nay, việc xử lý 1 triệu kết nối TCP đồng thời không phải là một vấn đề.

Tôi có thể khẳng định điều đó dựa trên các thử nghiệm của chính chúng tôi (tiết lộ đầy đủ: Tôi là CTO tại Lightstreamer).

Chúng tôi đã phải chứng minh nhiều lần với một số khách hàng rằng có thể đạt được 1 triệu kết nối trên một hộp duy nhất (và không nhất thiết phải là một cỗ máy siêu quái vật). Nhưng hãy để tôi tóm tắt lại cấu hình mà chúng tôi đã thử nghiệm 500K kết nối đồng thời, vì đây là một thử nghiệm gần đây hơn được thực hiện trên Amazon EC2.

Chúng tôi đã cài đặt Máy chủ Lightstreamer (là một máy chủ WebSocket, trong số những thứ khác) trên một phiên bản m2.4xlarge. Điều này có nghĩa là 8 lõi và bộ nhớ 68,4 GiB.

Chúng tôi đã khởi chạy 11 máy khách để tạo 500.000 kết nối đồng thời tới Máy chủ Lightstreamer. Thử nghiệm được định cấu hình để tổng thông lượng đầu ra từ máy chủ là 90.000 bản cập nhật / s, dẫn đến băng thông đầu ra đạt đỉnh là 450 Mbit / s.

Máy chủ không bao giờ sử dụng quá 13 GiB RAM và CPU ổn định khoảng 60%.

Với ít nhất 30 GiB RAM, bạn có thể xử lý 1 triệu ổ cắm đồng thời. CPU cần thiết phụ thuộc vào thông lượng dữ liệu bạn cần.


7
Tôi cho rằng đây là một số hương vị của linux. Bạn có thể vui lòng chia sẻ thêm thông tin về cách điều chỉnh hạt nhân không? bộ mô tả tệp tối đa / kích thước cửa sổ tcp, v.v.?
quixver

14
Đó là Amazon Linux vani. Bộ mô tả tệp tối đa đã được tăng lên. Bộ đệm gửi TCP được giảm xuống còn 1600 byte (được thực hiện theo mặc định bởi Lightstreamer, mặc dù nó có thể được điều chỉnh theo cách thủ công). MSS là mặc định.
Alessandro Alinone

Phần mềm này hoàn toàn miễn phí hay cần một số phí để sử dụng?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: Có cả phiên bản miễn phí và phiên bản trả phí.
Alessandro Alinone

Nó sẽ dễ dàng hơn trên máy chủ nếu thay vì websockets tôi sử dụng tính năng thăm dò thông thường?
mFeinstein
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.