Help: Giải thích giúp cluster



  • Em làm 1 game đang bị dính chuyên sâu CPU: Có cả trăm nghìn thức ăn và người chơi, bh tính va chạm giữ chúng nếu mà cứ forEach thì không xong mất nhiều thời gian quá. E đang tính dùng cluster nhưng đọc tiếng anh chẳng hiểu gì? Bác nào giúp e mô phỏng nó đc không?

    E có 3 luồng sau:

    1. Gửi data đến máy khách
    2. Tình và chạm giữa các người chơi
    3. Tính va chạm giữa người chơi và thức ăn.

    Em chưa biết gì về cluster cả, xem mấy ví dụ vẫn chưa hiểu lắm. Các bác có thể mô phòng ý tưởng của em bằng cluster đc k?
    Xin cám ơn.



  • @bacvv game của bạn lag quá , tôi vào một lần rồi ko muốn vào chơi nữa. nãy vào test lại thấy bạn để quảng cáo to oạch =.= vote down !
    Mặc định - nodejs là single thread, chạy trên 1 lõi cpu. Nếu máy chủ có 4 lõi, thì bỏ phí 3 lõi. Cluster module cho phép nodejs tạo số thread <= số lõi cpu, phân chia công việc để tận dụng sức mạnh của máy chủ. Bạn có thể fork luồng bằng cluster, nhưng hãy nhớ là với socket.io khi sử dụng cluster thì bạn phải dùng thêm Redis để store dữ liệu.



  • Mình làm đủ cách rồi phân vùng Mỹ, Âu, Á, rồi giảm số lượng req và res xuống còn 1 nửa rồi mà vẫn không cải thiện gì. Mình thấy thằng slither.io mỗi server của nó gánh đc 500 người chơi. Mình chỉ mong game của m chịu đc 200 người chơi mượt mà khó thế. Không biết vấn đề nằm ở đâu? Cluster có thật sự làm đc điều đấy không hay vẫn còn một vấn đề nào khác nữa? :(((



  • Quảng cáo chỉ là demo thôi :D. Quan trọng nhất vẫn là game phải chạy đc ít nhất 200-300 người trên 1 máy chủ. Chứ chạy đc 20-30 người mà còn lag thì không có quảng cáo cũng chẳng ai vào chơi.



  • Game thì có thể chia tách thành các room để giảm tải logic. Với socket.io thì cấu hình cluster thì cần mải sticky-session không thì overload cpu đấy :}



  • @bacvv là do code của bạn thôi.
    Bạn cố mà sửa thuật toán đi, chứ đổi hướng gì mà trễ tận 3s ấy, đi qua bom phải đến mấy giây mới chết. Cứ như chơi cf mà ping 5000 vậy :v
    Máy chủ bạn thế nào mà chả bằng được agar-io clone chạy trên 512 MB,2 Core vậy ?



  • Em thấy cluster chưa chắc đã tốt vì phải store dữ liệu trên redis hoặc csdl khác. Nếu store dữ liệu trên Object hoặc là Map thì không được (thấy có bác trên facebook bảo là vẫn sử dụng được nhưng phải bắn message nhưng em chưa làm được).
    Với lại thằng C++, libuv... vẫn chạy đa luồng mà nhỉ :D

    Và thêm 1 ý kiến nữa là nếu mà update/insert/select dữ liệu trong database nhiều thì cluster không biết có dùng được không vì nếu truy vấn đến database bất đồng bộ (async) thì còn được nhưng mà truy vấn đến database đồng bộ (sync) thì cluster cũng không có ý nghĩa.

    Đấy là ý kiến riêng của em, không biết đúng hay sai. Mong mọi người góp ý!



  • Agar clone chạy 1-2 người chơi thì khó phát hiện lắm. Nó dùng map rộng 5000 và max thức ăn là 1000. Của mình dùng map rộng 20.000 và 5000 thức ăn. Riêng việc tính va chạm giữa người chơi và thức ăn đã khác nhau rồi, có 1, 2 người thì không nói làm gì chứ 100 người thì chậm lắm.

    Thấy thằng agar dùng map và reduce không biết nó có nhanh ơn for và forEach không nhỉ?



  • @Quốc-Cường Zoom cải thiện không đáng kể. Nếu game của em có thể chịu đựng đc 2000 - 3000 người online thì em mới phân zoom. Còn 20 - 30 người thì phân zoom sao đc.



  • @loind C++, Php gì đó là đa luồng mà. Còn nodejs em đang chạy thì không biết là đơn hay đa :D



  • @bacvv vậy sao bạn không giảm map và tạo thêm room ?


Log in to reply