Avatar
1
LarreyK Beginner
LarreyK Beginner
Làm sao để chia room và giới hạn số lượng thành viên từng room cho nhiều user ?
Dear mọi người,

Mình đang có 1 câu hỏi như tiêu đề.

Ví dụ mình có 1000 concurrent users, nhưng thư viện hỗ trợ real-time multi-user ở phía client tính phí cao cho số CCU cao tương ứng, nên client muốn chia room để giới hạn số lượng user truy cập.

1000 users mình sẽ chia thành 10 rooms với 100 users mỗi room.

(Data của mỗi user trong từng room đều giống nhau).

Initial idea của mình là làm 1 record lưu lại số lượng user đang ở trong từng room, rồi lúc user join thì kiểm tra và nếu chưa đạt mức giới hạn user thì cho user mới truy cập vào đó.

Tuy nhiên nếu như vậy thì nó có bị ảnh hưởng tới vấn đề horizontal scaling không nhỉ ?

  • Answer
game chat messaging
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
Đối với game dạng room, hoặc các ứng dụng realtime dạng room, cách tổ chức thường là cho tất cả các user vào chung 1 server để đảm bảo hiệu năng cao nhất. Thế nên việc mà em chia nhỏ ra nhiều server thì hiệu năng sẽ bị giảm thê thảm do dữ liệu phải đi lòng vòng qua hệ thống message broker ví dụ như kafka.

Còn nếu em vẫn muốn chia ra nhiều server thì giải pháp là em tạo ra 1 service quản lý trạng thái của các server socket, khi client muốn connect thì sẽ gọi đến service này trước để được cấp ip của server socket còn chỗ trống em ạ. Và cách như em nói là phù hợp.

  • 0
  • Reply
Em không muốn chia nhỏ server backend ạ, room đó là instance của client (unity) thôi ạ, phía backend quản lý bình thường ấy anh,  –  LarreyK 1644907692000
Đối với game, cần performance cao thì không lưu đươc trực tiếp vào DB em ạ, mình sẽ lưu ở trên RAM của máy chủ luôn (nếu cần đồng bộ vào DB thì đồng bộ nhưng thường thì không). Mình sẽ có các đối tượng Room, Player, RoomManger, PlayerManager để quản lý người chơi và phòng chơi, em có thể tham khảo lớp RoomService này nhé.  –  monkey 1644948658000
Em cảm ơn nhiều ạ, tuy nhiên trường hợp mình scale thành 2 server đều chạy 1 service thì làm sao bảo đảm dữ liệu trong RAM 2 máy giống nhau ạ ?  –  LarreyK 1645164902000
Mình cần đồng bộ thông qua kafka hoặc message queue (rabbitmq, activemq) em ạ, tuy nhiên đối với những game có phòng chơi, thì vẫn phải để các user trong 1 room chung vào 1 server em ạ, vì qua kafka hay MQ sẽ làm cho performance giảm thê thảm và ảnh hưởng rất nhiều đến trải nghiệm game. Thêm nữa là việc xử lý transaction hết sức phức tạp và khó khăn em ạ.  –  monkey 1645384523000