游戏服务器概述

引言

今天给大家介绍的课程主要是游戏服务器的基本概念,包括什么是游戏服务器、游戏服务器的发展与分类以及其核心技术实现难点。

什么是游戏服务器

游戏服务器的起源

需求解决
换电脑不需要重头开始游戏,游戏要有成长性有一个地方存储玩家数据以及剧情状态
可以和其他人一起游戏,与人斗其乐无穷有中转的电脑转发玩家的操作、状态
防止他人作弊,保证游戏内公平性有裁判、校验玩家的操作,维持公平性和游戏性

简单总结一下游戏服务器就是:承载游戏服务的硬件 + 提供游戏服务的软件

游戏服务器的功能

  • 网络服务:终端网络连接的建立和会话维护
  • 用户数据存取
  • 游戏逻辑计算
  • 用户行为或者状态变化的同步

游戏服务器相比互联网服务的特点

  • 延迟敏感
  • 实时高强度交互
  • 业务逻辑复杂,内部耦合度高
  • 变更频度高、幅度大

游戏服务器和分类发展

网络游戏发展史

第一代服务器

第一代游戏服务器使用早期原始的单进程,单线程服务器原型。

第一代联机游戏 MUD1(1978)主要采用文字叙述方式,进场景后服务器告诉你在什么场景,你有什么数据等等交互,玩家输入一些指令。

第二代游戏服务器

承载能力的限制促进了第二代游戏服务器的发展,在服务端使用了多线程多进程模型,在逻辑结构上增加分区分服的结构。

比较典型的是 Ultima Online(1997),它是世界上第一款图形界面的大型多人在线游戏。

联众的休闲棋牌(2000)与地方合作搭建服务器,属于典型的分区分服的服务器架构。

第三代游戏服务器

第三代游戏服务器更加百花齐放。

三层架构

第一种是第二代演变的三层架构服务器:

  • Gate sever 负责连接部分
  • Game sever 通过内部网络与游戏逻辑服务器交互
  • DB server 接收用户和游戏数据

主要特点是三层架构把网络与磁盘 IO 分离,可以对每一层进行扩展。

QQ Game(2003)是这种架构比较典型的代表,峰值在线人数可以达到 800+ 万。

服务器集群

大部分 MMORPG 都采用这种结构,将不同逻辑分组。

传奇(2001)是一款非常有代表性的 MMO 作品。

无缝地图

无缝地图特点:

  • 单 scenesvr 只负责部分场景,切场景可能需要变换服务器
  • 玩家进入游戏后没有加载地图过程
  • 玩家在场景边缘数据可能存在于几个 scenesvr,管理复杂

魔兽世界(2004)是典型代表。

房间型服务器

平时的游戏匹配采用的是这种房间型服务器。

代表游戏有 英雄联盟(2009)、王者荣耀(2015)和 刺激战场(2018)。

核心技术和实现难点

游戏服务要解决的核心问题

满足海量游戏用户的稳定和高质量的服务要求

  • 海量:十万~千万 PCU(同时在线用户),亿级注册用户
  • 稳定:相对于宕机、网络和计算卡顿
  • 高质量:快速–网络延迟;逻辑严谨–更新频率和及时性

核心技术和实现难点

  • 单服处理能力
  • 逻辑耦合度高,异步协同 + 状态维护
  • 延迟敏感
  • 版本更新

系统结构示例

上图是一个偏向于房间型结构的游戏服务器示例。

网络协议

  • TCP

    面向流的模型。协议没有边界,如果丢包会影响传输速度

  • UDP

    点对点,丢包影响传输成功率

  • R-UDP

  • HTTP

接入逻辑 目录服务

地图 & 视野同步

服务器中最常见的地图 & 视野同步是这种九宫格技术,比较平滑的加载同步数据,保证用户行走平滑并且减少交互数量。

商品购买

商品购买服务一般视为异步状态机,如果中间过程中断可以以任意状态回滚。

DB层

游戏服务进程框架

一般游戏服务器的进程框架和大部分服务进程相似,中间一直在循环处理。

反外挂

  • 在中国,由于人口基数和社会问题,反外挂问题也成了网络游戏生命的核心问题。死在外挂上的游戏已经包括了《传奇》,《疯狂坦克2》
  • 外挂包括键鼠模拟,注入,协议破解,程序破解等方式,有些甚至可以是完全脱机
  • 反外挂的核心是服务器逻辑为主
  • 防外挂手段包括动态协议栈,验证码检查,加壳,动态特征码检查进程等方式

设计原理与方法论

KISS原则

  • KISS == Keep It Simple,Stupid
  • 系统设计尽量简单,减少模块耦合

灰度

  • 柔性可用
  • 在不同的场景下提供不同的服务
  • 服务降级 灰度分布

一些已验证可行的具体技术

  • 无锁通信队列
  • 异步模型
  • 通用框架
  • key-value 数据库产品或者内存数据库

性能分析工具

网络抓包工具

现状和前景

  • 多核时代
  • 编程时代
  • 更真实的游戏世界
  • 更实时的交互
  • 更快的响应速度