Tuyên bố miễn trừ trách nhiệm: trải nghiệm lập trình trò chơi của tôi dựa trên các trò chơi một người chơi phía khách, nhưng tôi có nền tảng về các ứng dụng web (cụ thể là trên Microsoft stack), vì vậy đó là nơi tôi đến từ câu trả lời này, tôi cảm thấy rằng sẽ rất nhiều áp dụng, nhưng không thử nghiệm thực tế một máy chủ trò chơi thực sự rất khó để nói nó sẽ áp dụng như thế nào, nhưng ở đây sẽ đi. Biết điều này: Tôi chưa triển khai một máy chủ trò chơi, chỉ có ứng dụng web.
Tôi sẽ đề nghị một cách tiếp cận hai (máy chủ). Một tầng cơ sở dữ liệu và một tầng "ứng dụng"; với tầng thứ ba (thuyết trình) là khách hàng trò chơi của bạn.
Cơ sở dữ liệu quan hệ, rất tốt trong việc truy vấn dữ liệu và khá giỏi trong việc ghi dữ liệu. Điều quan trọng là tuần tự hóa cơ sở dữ liệu của bạn ghi vào các khối kích thước có thể quản lý mà cụm của bạn có thể xử lý. Các phiên bản nâng cao hơn (Trung tâm dữ liệu / Doanh nghiệp) của SQL Server hỗ trợ phân cụm và sao chép. Tôi sẽ bắt đầu bằng cách xây dựng một cụm nhỏ và chạy một số truy vấn để xem nó hoạt động như thế nào.
Trong tầng ứng dụng, nếu bạn đang thực hiện "khoanh vùng" hoặc một cái gì đó tương tự, bạn có thể thoát khỏi mà không cần thiết lập bất kỳ cụm nào, và chỉ cần thiết lập một máy chủ cho mỗi vùng. Nếu các vùng của bạn trở nên lớn, bạn có thể thiết lập một cụm cho từng vùng.
Bạn sẽ muốn xây dựng một quy trình tuần tự hóa để gửi dữ liệu từ tầng ứng dụng -> tầng cơ sở dữ liệu. Điều quan trọng là có nhiều cấp độ tuần tự hóa đang diễn ra. Một cái gì đó như thế này:
- Cấp 1: Lưu vào DB mỗi X giây, bao gồm dữ liệu quan trọng:
- Sức khỏe cầu thủ
- Vật phẩm / Pickup của người chơi
- Cấp độ 2: Lưu vào DB cứ sau 2 lần, bao gồm dữ liệu trung bình:
- Địa điểm người chơi
- Địa điểm NPC
- Cấp độ 3: Mọi thứ khác, không thường xuyên nhất có thể
Điều này sẽ giữ cho bài viết của bạn nhất quán và có thể dự đoán được, tùy thuộc vào bản chất của trò chơi của bạn, bạn có thể có cơ sở dữ liệu ghi không thường xuyên. Điều quan trọng là nhận ra rằng nếu máy chủ ứng dụng của bạn bị sập, bạn phải quay lại trực tuyến từ trạng thái trong cơ sở dữ liệu của mình, do đó việc tuần tự hóa kho của người chơi cứ sau 90 phút có thể khiến người chơi khó chịu.
Để đọc dữ liệu, bạn sẽ muốn tải càng nhiều càng tốt vào bộ nhớ trong tầng ứng dụng càng tốt, sau đó đảm bảo rằng tất cả mã của bạn sử dụng nhóm bộ nhớ này, trong nền bạn có thể đồng bộ hóa nhóm bộ nhớ với cơ sở dữ liệu. Như Joe chỉ ra, sẽ có lúc bạn cần giao dịch "thời gian thực". Bằng cách tuần tự hóa hầu hết các ghi của bạn, bạn vẫn nên có đủ IO trên cơ sở dữ liệu của mình để thực hiện các giao dịch thời gian thực khi cần thiết, giả sử đủ phần cứng trên máy chủ / cụm cơ sở dữ liệu.