Thông tin về kiến ​​trúc máy chủ MMO liền mạch


9

Tôi đang tìm bất kỳ tài liệu nào trên các máy chủ MMO liền mạch! Tôi có một vài bài viết trong sách "Phát triển trò chơi nhiều người chơi" và "Đá quý lập trình trò chơi 5." Có ai có kinh nghiệm về chủ đề đó hoặc biết các bài viết về điều đó?

Tôi quan tâm đến "quan điểm cấp cao" cũng như việc triển khai. Điều này có thể trở thành chủ đề của luận án thạc sĩ của tôi và tôi muốn tìm hiểu xem việc viết một hệ thống như vậy khó như thế nào, trước khi tôi thực sự bắt đầu luận án. Ngay bây giờ tôi chưa quyết định sử dụng ngôn ngữ nào, tôi đang nghĩ về Java hoặc Scala. Erlang có thể là một lựa chọn, nhưng tôi chưa bao giờ làm việc với điều đó.

Lưu ý: Yêu cầu cơ bản sẽ là chuyển động. Bất kỳ hệ thống trò chơi nào khác là tùy chọn và cung cấp "tín dụng tiền thưởng."

Bây giờ với ý nghĩa của tôi với "máy chủ liền mạch": Tôi muốn thiết lập một cụm máy chủ nơi mọi nút điều khiển một phần của thế giới trò chơi, với các ranh giới tĩnh. Bây giờ người chơi có thể di chuyển từ đầu này sang thế giới khác mà không cần chuyển đổi một thể hiện hoặc nhấn một số "dịch chuyển tức thời". Tôi nghĩ WoW làm điều đó. Tuy nhiên, trong back-end của tôi, người chơi chuyển từ một máy chủ sang máy chủ tiếp theo.


Một lúc trước, tôi đọc được rằng mỗi máy chủ WoW chứa 5+ lưỡi - 1 cho mỗi lục địa và cơ sở dữ liệu. Trước đây cũng từng là ngục tối và chiến trường mặc dù tôi cho rằng bây giờ những người đó cư ngụ trên các cụm của chính họ để cho phép kết nối giữa các vương quốc. Tuy nhiên, trong ngắn hạn, các lục địa được giữ trên một máy chủ - không có điểm nào bạn chuyển sang máy chủ khác trừ khi bạn thay đổi lục địa.
khoan hồng

Thật thú vị, bạn có nhớ nơi bạn đọc nó? Như tôi đã nói, tôi không bao giờ chơi WoW và không biết các lục địa lớn như thế nào, nhưng tôi không thể tưởng tượng rằng mỗi lục địa được lưu trữ trên một máy chủ riêng biệt.
Lurca

3
Số liệu thống kê máy chủ WoW: 13.250 tổng số lưỡi máy chủ, 75.000 lõi CPU, 112,5 terabyte RAM (tính đến GDC Austin 09). Xem tại đây ; không nhất thiết là tất cả dành cho WoW, nhưng đủ gần hợp lý.

@Josh Petrie: Cảm ơn bạn, đã tìm thấy bài viết này vào đầu ngày này. Nhưng tôi vẫn đang tìm kiếm những thứ về kiến ​​trúc máy chủ liền mạch hoặc liên tục.
Lurca

Câu trả lời:


5

Sự phức tạp chính trong việc quản lý một hệ thống như vậy đến từ việc bạn cần nó liền mạch như thế nào. Như Josh đã nói, giải quyết vấn đề bàn giao một thực thể từ máy chủ này sang máy chủ khác là một phần quan trọng của gói.

Tuy nhiên, đây không phải là vấn đề duy nhất - nếu các thực thể trên nhiều máy chủ cần tương tác như một phần của một thao tác thì giờ đây bạn gặp sự cố đồng bộ hóa khi mỗi hệ thống cần dữ liệu từ phía bên kia để tiến hành, nhưng đến khi dữ liệu đến thì có thể đã không hợp lệ Bạn có thể cố gắng giải quyết vấn đề này bằng cách chia nhỏ hoạt động thành nhiều tin nhắn có khả năng khôi phục nếu một bên rút lui, nhưng như bạn đã thấy trong Chương 3.1 trong "Phát triển trò chơi nhiều người chơi", điều này làm phức tạp đáng kể mọi logic trò chơi mà bạn phải làm điều này với. Scala và Erlang giúp bạn sử dụng đúng hệ thống nhắn tin - họ không giúp bạn phân tách chức năng 10 dòng thành nhiều thông điệp khác nhau và trạng thái bạn cần theo dõi.

Rõ ràng, vấn đề này không hoàn toàn mới và cơ sở dữ liệu quan hệ hỗ trợ loại vấn đề này bằng cách lưu trữ tất cả dữ liệu tập trung và để nhiều khách hàng truy vấn và thay đổi nó khi họ cần, đẩy lùi các giao dịch khi cần thiết. Điều này cung cấp cho bạn hầu hết các yêu cầu chính xác của bạn, nhưng không may đặt ra các vấn đề hiệu năng không thực tế cũng như làm cho việc triển khai logic trò chơi trở nên khó xử (vì phần lớn logic của bạn hiện được viết trong các thủ tục lưu trữ cơ sở dữ liệu). Một loại cơ sở dữ liệu khác nhau có thể cung cấp một giải pháp tốt ở đây, đặc biệt nếu bạn sẵn sàng đánh đổi các yêu cầu về độ tin cậy mà hầu hết các RDBMS cung cấp.

Hầu hết các trò chơi chuyên nghiệp đều khắc phục vấn đề này bằng cách thậm chí không thử, bằng cách giữ kích thước mảnh nhỏ đủ để đặt tất cả người chơi trên một máy chủ, bằng cách chia thế giới thành các phần không thực sự tương tác (xem ví dụ WoW trong các nhận xét ở trên) hoặc bằng cách phân phối trò chơi trên các máy chủ dựa trên chức năng thay vì địa lý (ví dụ: tất cả chiến đấu xảy ra trên một máy chủ, tất cả trò chuyện trên máy chủ khác) để không có "đường nối" nào xảy ra.


3

Tôi quan tâm đến "quan điểm cấp cao" cũng như việc triển khai.

Việc triển khai thường liên quan một cách hợp lý và có lẽ bạn sẽ không thấy nhiều cuộc thảo luận về chúng ở đây. Phần mềm StackExchange không phù hợp với loại thảo luận có liên quan đó, chưa kể nó sẽ liên quan đến một khoản đầu tư đáng kể về thời gian của ai đó.

Tôi muốn tìm hiểu thật khó để viết một hệ thống như vậy

Không nhiều hơn hoặc ít hơn bất kỳ hệ thống nào khác: nó sẽ phụ thuộc vào yêu cầu của bạn và các tính năng bạn định lái. Bạn có thể viết các triển khai tầm thường, nhưng những thứ không tầm thường tất nhiên sẽ khó hơn nhiều. Một trong những vấn đề lớn hơn là bạn có thể sẽ không có đủ khách hàng thực sự để biết liệu hệ thống của bạn có thực sự mở rộng đến mức "khổng lồ" mà WoW và các trò chơi khác hoạt động hay không.

MMO không phải là phép thuật. Hầu hết công nghệ của họ không có gì đặc biệt khi được cách ly, đơn giản là một số bit công nghệ nhỏ hơn, đơn giản hơn được kết hợp rất thông minh để cho phép quy mô lớn hơn, mô phỏng song song của một số trạng thái thế giới chia sẻ.

Tôi muốn thiết lập một cụm máy chủ trong đó mọi nút điều khiển một phần của thế giới trò chơi, với các ranh giới tĩnh. Bây giờ người chơi có thể di chuyển từ đầu này sang thế giới khác mà không cần chuyển đổi một thể hiện hoặc nhấn một số "dịch chuyển tức thời".

Về cơ bản những gì bạn đang nói là mô phỏng. Điều này có thể được thực hiện khá đơn giản và không nhất thiết phải là một công nghệ dành riêng cho MMO (các trò chơi ngang hàng có xu hướng hỗ trợ tất cả các cơ chế cơ bản tương tự để thực hiện di chuyển máy chủ). Tiền đề cơ bản là để mỗi máy chủ hiểu cấu trúc liên kết của các máy chủ "xung quanh" nó (cụ thể là máy chủ cho nút thế giới A phải biết về các máy chủ cho các nút thế giới liền kề mô phỏng) cũng như xác định bộ đệm xung quanh mà bạn xem xét một thực thể mô phỏng cụ thể "đóng" với một máy chủ liền kề.

Khi một thực thể vào bộ đệm "đóng", bạn cũng bắt đầu báo cáo nó với máy chủ liền kề. Khi thực thể vượt qua ngưỡng thực tế, bạn gửi tin nhắn đến máy chủ liền kề với trạng thái đầy đủ của thực thể và một thông báo cho biết rằng máy chủ liền kề sẽ chiếm lấy thực thể. Rõ ràng bạn muốn điều này là đáng tin cậy nhất có thể.

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.