在一些高QPS的场景下,服务器可能面临的挑战和问题总结。

  1. 服务器一定要有流控功能和降级预案,一些接口可以提供有损服务,最差情况只要保证核心业务不出问题。
  2. 梳理出各个关键接口在不可用时的表现,和处理方案,已经可能面临的问题,落实到文档,一步步攻坚。
  3. 核心业务和接口预估最高QPS,根据QPS指标做好全链路压测。
  4. 做好性能监控和报警,实时查看大盘数据。
  5. 最常出现性能瓶颈的地方:
    • 登录,特别是注册新用户。流控限制服务的承载上限,一定不能超过当前服务的承载。流控触发后,前端进行友好的过渡,根据不同的游戏类型进行特定场景的处理,比如进行一局单机游戏。
    • 针对一些更极端的场景,可预见的某个时间段,会有大量的用户登录和创建,前端不验证流控前,直接预先将登录进行打散。针对大量创建用户引起的数据库性能瓶颈问题,可以预先生成一大批新用户数据,放入缓存。
    • 注意玩家退出或掉线的逻辑,是否有一些数据回写,判断是否会成为瓶颈。
  6. 数据库可能出现问题的地方:
    • Mongo 提前关闭autosplit,movechunk,retryWrites。
    • 数据库连接要预热。
  7. 前端要注意的一些点:
    • 提供1到2个备用的资源CDN。
    • 服务器提供两个一级域名和几个二级域名让客户端随机选取使用。
    • 考虑前端SDK一些接口遇到性能瓶颈的情况,特别是登录验证,做好预案和降级处理。
  8. 日志在这种级别下也可能出现性能瓶颈,看下日志库还有没有可优化的地方,在最高峰可以允许短暂的将info级别日志关闭,流量下来之后尽快动态打开。
  9. 提前做好上线前的各种预案和上线流程,以及异常情况下的降级处理流程,责任到人,文档化,有迹可循,不慌乱。
  10. 检查最后是否还有遗漏的地方,特别是准备老用户或者压测未覆盖的场景,以及全服广播之类的。