Tôi sẽ trải qua một chút suy nghĩ lại về các trò chơi nhiều người chơi ở quy mô lớn trong thời đại các ứng dụng Facebook và điện toán đám mây.Độ trễ thấp, tin nhắn có quy mô lớn xếp hàng
Giả sử tôi đã xây dựng thứ gì đó trên các giao thức mở hiện có và tôi muốn phân phối 1.000.000 người chơi đồng thời, chỉ để giải quyết vấn đề.
Giả sử mỗi người chơi có hàng đợi tin nhắn đến (để trò chuyện và không có điều gì) và trung bình một hàng đợi tin nhắn gửi đến khác (guild, khu, trường hợp, đấu giá, ...) để chúng tôi có 2.000.000 hàng đợi. Một người chơi sẽ nghe 1-10 hàng đợi tại một thời điểm. Mỗi hàng đợi sẽ có trung bình có thể 1 tin nhắn mỗi giây, nhưng hàng đợi nhất định sẽ có tỷ lệ cao hơn nhiều và số lượng người nghe cao hơn (ví dụ: hàng đợi "vị trí thực thể" cho một phiên bản cấp). Giả sử không quá 100 mili giây độ trễ xếp hàng của hệ thống, điều này là phù hợp với các trò chơi hành động nhẹ nhàng (nhưng không phải là các trò chơi như Quake hoặc Unreal Tournament). Từ các hệ thống khác, tôi biết rằng việc phục vụ 10.000 người dùng trên một hộp 1U hoặc hộp lưỡi dao là một kỳ vọng hợp lý (giả sử không có gì khác đắt tiền hơn, như mô phỏng vật lý hoặc không biết gì). Vì vậy, với hệ thống thanh ngang, nơi khách hàng kết nối với cổng kết nối, kết nối với máy chủ xếp hàng thông điệp, chúng tôi sẽ nhận được 10.000 người dùng trên mỗi cổng với 100 cổng máy chủ và 20.000 hàng đợi tin nhắn trên mỗi máy chủ xếp hàng với 100. máy xếp hàng. Một lần nữa, chỉ cho phạm vi chung. Số lượng kết nối trên mỗi máy MQ sẽ nhỏ: khoảng 100, để nói chuyện với mỗi cổng. Số lượng kết nối trên cổng sẽ cao hơn rất nhiều: 10,100 cho khách hàng + kết nối tới tất cả các máy chủ xếp hàng. (Trên đầu trang này, thêm một số kết nối cho các máy chủ mô phỏng trò chơi thế giới hoặc whatnot, nhưng tôi đang cố gắng giữ riêng biệt bây giờ)
Nếu tôi không muốn xây dựng từ đầu, tôi phải sử dụng một số thông điệp và/hoặc cơ sở hạ tầng xếp hàng tồn tại. Hai giao thức mở tôi có thể tìm thấy là AMQP và XMPP. Mục đích sử dụng XMPP giống một chút so với hệ thống trò chơi này, nhưng chi phí khá đáng chú ý (XML, cộng với dữ liệu hiện diện dài dòng, cộng với các kênh khác phải được xây dựng trên đầu). Mô hình dữ liệu thực tế của AMQP gần với những gì tôi mô tả ở trên, nhưng tất cả người dùng dường như là các tập đoàn lớn, doanh nghiệp và khối lượng công việc dường như có liên quan đến công việc chứ không phải liên quan đến cập nhật trò chơi trong thời gian thực.
Có ai có kinh nghiệm ban ngày với các công nghệ này hoặc triển khai công nghệ của chúng, mà bạn có thể chia sẻ không?
Tôi muốn tóm tắt những gì chúng tôi đã làm. Thỏ, Qpid, ZeroMQ và những người khác đều có nhiều lựa chọn thiết kế mắt kinh doanh hơn và độ trễ thấp hơn, và giảm nhu cầu tin tưởng khách hàng, hoặc không hỗ trợ tỷ lệ tham gia/tạo/xếp hàng cao tạo/xóa hoặc giống. XMPP không liên kết tốt trên hộp vật lý đầu tiên. JMS thậm chí còn tệ hơn cả Thỏ và bạn bè. Redis Pub/Sub là thú vị, nhưng một lần nữa không liên kết/cluster. Chúng tôi đã kết thúc bằng văn bản của riêng mình trên đầu trang của Erlang/OTP (cùng một ngôn ngữ được sử dụng cho Thỏ và ejabberd), sử dụng bộ đệm giao thức của Google là IDL cấp thấp. –
cảm ơn bạn đã chia sẻ, ý của bạn là gì bởi "XMPP không liên kết tốt trên hộp vật lý đầu tiên"? – alex
Tôi có nghĩa là "không liên kết tốt/quá khứ/hộp vật lý đầu tiên." Thêm phần cứng không làm được gì nhiều cho việc mở rộng quy mô, bởi vì XMPP là sự lựa chọn sai của giao thức ở đó. –