ID nguyên nhân in-gateway · Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng server (Đội hạ tầng), Phát triển client (Đội phát triển game)
Khi đặt một server trung gian giữa client và server game, mỗi lần đi qua nó lại cộng thêm thời gian xử lý, và server đó trở thành điểm lỗi duy nhất (single point of failure).
Vì sao Cấu trúc client ↔ gateway ↔ server game → Dẫn đến Server trung gian cộng thêm thời gian xử lý và chờ, khi quá tải thì ảnh hưởng đến tất cả mọi người → Trên màn hình Ping của mọi người đều tăng, khi gateway gặp sự cố thì toàn bộ người chơi đi qua gateway đó bị mất kết nối
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng server (Đội hạ tầng), Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Server: thiết kế để có thể tăng lên nhiều gateway; khi một gateway chết, kết nối lại qua gateway khác thì nhân vật vẫn tiếp tục như cũ (kết nối lại phiên). Client: tự động kết nối lại khi mất kết nối với gateway.
Việc cần làm (Đội hạ tầng)
Mở rộng gateway theo chiều ngang (thêm máy), giám sát CPU, số kết nối và độ trễ xử lý của từng gateway.
Con số tham khảo
Vì nằm trong cùng một trung tâm dữ liệu nên bình thường mỗi lần đi qua mất chưa tới 1 ms. Khi gateway quá tải, con số này tăng lên vài chục đến vài trăm ms.
Trên đồ thị
Tăng theo số người và tải · Độ trễ xử lý của gateway, CPU và số kết nối của gateway
Chỗ cần xem
CPU, số kết nối của gateway và Recv-Q của socket trên gateway (ss, netstat), chênh lệch độ trễ trước và sau khi qua gateway. Với lời gọi HTTP, gRPC đi qua service mesh: so sánh chỉ số chuẩn của Istio istio_request_duration_milliseconds, tách theo bên gửi (reporter=source) và bên nhận (reporter=destination)
Đúng nếu
thời gian xử lý của server game không đổi nhưng riêng độ trễ ở đoạn gateway tăng, và cùng lúc đó CPU của gateway bão hòa hoặc Recv-Q dồn lên
Loại trừ nếu
đường không qua gateway (kết nối trực tiếp, gateway khác) cũng chậm y như vậy → nguyên nhân nằm ở đường truyền hoặc phía server game
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Khi dùng service mesh (Istio, v.v.), sidecar proxy (Envoy) gắn bên cạnh mỗi server cũng thêm một chặng nữa. Yêu cầu giữa các service lần lượt đi qua sidecar bên gửi rồi sidecar bên nhận, và proxy càng được gắn thêm tính năng như thu thập log, chỉ số thì thời gian xử lý và thời gian chờ càng tăng.
Performance and ScalabilityIstio Ở chế độ sidecar, yêu cầu lần lượt đi qua sidecar proxy bên gửi rồi bên nhận; càng thêm tính năng thì đường xử lý bên trong proxy càng dài, và việc thu thập telemetry làm tăng thời gian chờ của yêu cầu tiếp theo
What is EnvoyEnvoy Envoy là một tiến trình chạy riêng bên cạnh mỗi server ứng dụng, ứng dụng gửi và nhận dữ liệu thông qua Envoy trên localhost
Istio Standard MetricsIstio istio_request_duration_milliseconds (phân bố thời gian xử lý yêu cầu HTTP, gRPC), dùng nhãn reporter để phân biệt proxy bên gửi (source) và bên nhận (destination)