한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L13 服务器架构与运维

经由网关/代理 Gateway / proxy hop

原因 ID in-gateway · 主责 研发团队·服务器开发 · 配合 运维团队·系统运维, 研发团队·客户端开发

在含图示和实验的完整版中打开此卡片 →

在客户端和游戏服务器之间加一层中间服务器,每经过一次就多一段处理时间,这台服务器也会成为单点故障。

起因 客户端 ↔ 网关 ↔ 游戏服务器的结构 → 结果 中间服务器增加处理和排队时间,过载时所有人都受影响 → 画面表现 所有人 ping 上升,网关故障时经过它的玩家全部掉线

症状
操作延迟, 掉线
因素
延迟, 停顿
谁会遇到
全服
何时出现
人多的时候, 一直
负责方
主责 研发团队·服务器开发 · 配合 运维团队·系统运维, 研发团队·客户端开发
研发团队要做的事
服务器:网关可以扩到多台的结构;某台网关挂掉后重新连到其他网关,角色状态能直接接上的结构(会话重连)。客户端:网关断开时自动重连。
运维团队要做的事
网关水平扩容(增加台数),按网关监控 CPU、连接数、处理延迟。
数值参考
因为在同一数据中心内,平时每经过一次不到 1 ms。网关过载时会增加到几十到几百 ms。
监控图上
随人数/负载上升 · 网关处理延迟,网关 CPU、连接数
查看位置
网关的 CPU、连接数,网关 socket 的 Recv-Q(ss、netstat),以及经过网关前后的延迟差。经过服务网格的 HTTP、gRPC 调用,把 Istio 标准指标 istio_request_duration_milliseconds 按发送方(reporter=source)和接收方(reporter=destination)分开对比
确认依据
游戏服务器的处理时间不变,只有网关这一段的延迟增加,且此时网关 CPU 打满或 Recv-Q 堆积
排除依据
不经过网关的路径(直连、其他网关)同样慢,则是线路或游戏服务器侧
确认手段
运维工具即可确认(无需游戏代码)
深入了解
使用服务网格(如 Istio)时,每台服务器旁边挂着的 sidecar 代理(Envoy)也会多出一跳。服务之间的请求要依次经过发送方的 sidecar 和接收方的 sidecar,代理上加的日志、指标采集等功能越多,处理时间和等待时间就越长。
真实案例
Riot Games 2020: League of Legends 欧洲、巴西服务器的边缘主机过载

出处

  1. The Unique Architecture behind Amazon Games’ Seamless MMO New World AWS
    New World 的客户端连接到 4 台拥有公网地址的入口服务器(REP)之一,再与其后的模拟服务器(Hub)通信
  2. Designs, Lessons and Advice from Building Large Distributed Systems Google
    LADIS 2009 主题演讲(Jeff Dean)。同一数据中心内往返约 0.5 ms
  3. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    过载导致队列变长时,等待时间会增至处理时间的数倍(处理 100 ms、队列长度为线程数的 10 倍时为 1.1 秒)
  4. Performance and Scalability Istio
    sidecar 模式下,请求依次经过发送方和接收方的 sidecar 代理;功能加得越多,代理内部的处理路径越长,遥测采集还会增加下一个请求的等待时间
  5. What is Envoy Envoy
    Envoy 是在每台应用服务器旁边单独运行的进程,应用通过 localhost 上的 Envoy 收发数据
  6. Istio Standard Metrics Istio
    istio_request_duration_milliseconds(HTTP、gRPC 请求处理时间的分布),用 reporter 标签区分发送方(source)和接收方(destination)的代理
  7. netstat(8) — Linux manual page net-tools
    Recv-Q:已连接 socket 中用户程序尚未取走的字节数

相关原因

同一层:L13 服务器架构与运维

其他层中同样导致“操作延迟”的原因

查看含图示和实验的原卡片