Gần đây mình nhận được khá nhiều câu hỏi về Metaverse trong đó có nhiều câu anh em hỏi là: từ trước giờ game online, căng lắm thì thấy 1 server có gần nghìn người, vậy thì bây giờ làm metaverse thì có thể đáp ứng được 10 nghìn CCU hay không? Câu trả lời của mình đó là rất khó.
Đầu tiên hãy nói về client trước. Để mà nhận và hiển thị đồng thời dữ liệu của hàng nghìn nhân vật trên 1 thiết bị client là điều không hề đơn giản, mặc dù đã có nhiều cải thiện về phần cứng, tuy nhiên nó vẫn có những hạn chế nhất định anh em có thể thử test khả năng hiển thị của thiết bị mình đang có với cái này: https://testdrive-archive.azurewebsites.net/per.../fishbowl/ xem được bao nhiêu nhé.
Giải pháp kỹ thuật đó là khoanh vùng hiện thị sao cho số lượng đối tượng cần nhận dữ liệu và hiển thị là ít nhất. Cách này khả thi, tuy nhiên nó sẽ làm trải nghiệm của người dùng bị kém đi khi chỉ nhìn thấy 1 số ít người ở quanh mình, mặc dù là đang có rất nhiều người đang online và đứng cách mình không xa.
Về phía server. Với khoảng 10 nghìn CCU đồng bộ trạng thái (vị trí, hướng di chuyển) liên tục thì một giây sẽ phải nhận khoảng 6MB dữ liệu, con số này có vẻ không lớn so với băng thông, tuy nhiên việc phải tính toán, kiểm tra vị trí, tính khoảng cách, xử lý va chạm, đây mới là những thứ làm ảnh hưởng nghiêm trọng đến hiệu năng của server. Mặc dù có thể áp dụng các cấu trúc dữ liệu như Grid hay Quadtree để quản lý vị trí của user, tuy nhiên, những phép tính, đặc biệt là vòng lặp và tính căn sẽ tương đối chậm, nên trong 1 giây nó sẽ chỉ có thể phục vụ được 1 số lượng user nhất định, nếu nhiều hơn con số này nó sẽ bị chậm dần đều.
Giải pháp cho phần này đó là thôi không cần xử lý va chạm hay kiểm tra vị trí nữa, như vậy sẽ giảm thiểu số lượng tính toán và server sẽ đáp ứng được nhiều user hơn. Tuy nhiên sẽ có những phần mà cần phải kiểm tra va chạm để phát sinh giao dịch với user chẳng hạn, thì cách này không khả thi.
Về phần server thì anh em có thể sử dụng ezyfox-server hay smartfox hay photon, bởi vì các vấn đề anh em gặp phải sẽ đều như nhau và các server này đã hỗ trợ tốt phần I/O rồi, việc anh em cần làm đó quản lý user, xử lý logic, va chạm mà thôi. Nếu anh em mạnh về thuật toán thì có thể áp dụng để việc tính toán diễn ra nhanh hơn và đáp ứng được nhiều request / giây hơn, từ đó sẽ được nhiều CCU hơn. Và cụ thể hệ thống sẽ đáp ứng được bao nhiêu CCU thì còn phụ thuộc cả vào hạ tầng của anh em nữa và cần phải stress test thì mới chắc chắn được.
Trên đây là một số chia sẻ của mình Và youngmonkeys luôn sẵn lòng trả lời bất cứ câu hỏi nào của anh em liên quan đến blockchain và metaverse nhé. Cám ơn anh em!