Hệ Thống Máy Chủ Phát Tán Và Giám Sát
Vài ngày trước, tôi đã đề cập đến việc phân tách cụm máy chủ thành hai nhóm: máy chủ kết nối và máy chủ logic. Phần code cho kiến trúc này hiện đã hoàn thiện, đồng thời còn được bổ sung nhiều tính năng vượt xa ý tưởng ban đầu. Chẳng hạn, chúng tôi đã triển khai cơ chế cho phép máy chủ logic phát tán gói dữ liệu thông qua việc các máy chủ kết nối đảm nhận vai trò phân phối trung gian.
Trong quá trình triển khai thực tế, hai ngày qua tôi đã suy nghĩ thêm nhiều khía cạnh mới. Mục tiêu cốt lõi của chúng tôi là tối giản hóa từng thành phần hệ thống, đảm bảo mỗi module chỉ thực hiện một chức năng duy nhất với quy trình xử lý rõ ràng. Trong đó, máy chủ logic là thành phần có quy trình xử lý phức tạp nhất, do đó chúng tôi đặc biệt chú trọng giảm tải các tác vụ không cần thiết như xử lý chức năng chat.
Liệu còn tác vụ nào nữa có thể tách rời khỏi máy chủ logic? Rõ ràng các chức năng như phát hiện gian lận hay giám sát luồng dữ liệu đều thuộc nhóm này. Ví dụ, nếu cần lấy bản đồ vị trí của tất cả người chơi, việc yêu cầu trực tiếp từ máy chủ logic sẽ tạo gánh nặng không đáng có.
Giải pháp hiện tại là các máy chủ kết nối sẽ tạo bản sao dữ liệu cần thiết, đồng thời gửi bản gốc đến máy chủ logic và bản sao đến một máy chủ phát tán chuyên dụng (tạm gọi là broadcast server). Máy chủ phát tán này chỉ có chức năng nhận dữ liệu mà không phản hồi bất kỳ thông tin nào ngược lại, đảm bảo không làm tăng tải cho máy chủ kết nối.
Máy chủ phát tán có khả năng lọc dữ liệu theo tiêu chí cụ thể trước khi phát tán đến các máy chủ xử lý chuyên sâu hơn. Chẳng hạn, thông tin vị trí người chơi có thể được trích xuất từ các gói dữ liệu liên quan đến di chuyển. Hệ thống còn có thể phát hiện gian lận tốc độ dựa trên các tham số di chuyển này. Đội ngũ GM cũng có thể kết nối trực tiếp để xem bản đồ phân bố người chơi toàn bộ thế giới game mà không ảnh hưởng đến hiệu năng máy chủ logic.
Một tính năng quan trọng là máy chủ phát tán cần hỗ trợ kết nối và ngắt kết nối linh hoạt bất kỳ lúc nào. Để thực hiện điều này, nó cần thiết lập kênh giao tiếp với máy chủ logic. Biết rằng giữa máy chủ logic và máy chủ kết nối đang duy trì nhịp đập (heartbeat) đồng bộ, khi máy chủ phát tán kết nối đến máy chủ kết nối, nó chỉ cần nhận biết số hiệu nhịp đập hiện tại. Sau đó, máy chủ phát tán sẽ yêu cầu máy chủ logic cung cấp trạng thái khởi tạo để đồng bộ.
Ví dụ cụ thể: Máy chủ phát tán kết nối vào nhịp đập thứ 100. Từ thời điểm này, nó bắt đầu nhận các gói dữ liệu từ client sau nhịp 100. Khi thiết lập kết nối với máy chủ logic (giả sử tại nhịp 110), máy chủ logic sẽ fork một tiến trình phụ để gửi trạng thái khởi tạo. Đến nhịp 120, khi nhận xong toàn bộ dữ liệu khởi tạo, máy chủ phát tán sẽ loại bỏ dữ liệu từ nhịp 100-110, đồng thời áp dụng các thay đổi từ nhịp 110-120 lên trạng thái khởi tạo tại nhịp 110 để hoàn thành đồng bộ.
Việc triển khai máy chủ phát tán mở ra nhiều khả năng ứng dụng mới. Trong phạm vi bài viết này, tôi xin phép không đi sâu vào từng trường hợp cụ thể, nhưng chắc chắn đây sẽ là nền tảng cho nhiều cải tiến hệ thống trong tương lai.