美文网首页
简版游戏服务器架构文档

简版游戏服务器架构文档

作者: landon30 | 来源:发表于2018-09-17 10:45 被阅读0次

    整体框架示意图

    • image
    • 版本说明
      • 1.0.0 初始版本 2017.3.13

    平台服务器

    • 和业务相关的http功能服务器抽象
    • 主要包括账号相关、支付相关、devops相关,线上需要独立部署,均可水平扩展
    • 账号相关
      • SDK登陆验证
      • Dev注册登陆(REST/OAuth 2.0)
      • 玩家账号基础信息
      • 游戏服务器列表(按照渠道划分大区)
      • 客户端版本校验、更新等(线上需要考虑安卓和iOS渠道更新时间的不同)
      • 登陆公告、用户协议、新功能通知等
    • 支付相关
      • 支付回调(支付失败,会发起重试)
      • 订单校验
      • 对账
    • DevOps相关
      • 运营相关接口,如配置运营活动、礼包码等
      • 客服相关接口,如查询玩家信息、查询玩家日志等
      • 运维相关接口,如新建服务器等
      • 研发相关接口,如热更新等
      • 管理线上其他服务器
    • CDN相关
      • 用于客户端更新资源等

    游戏服务器

    • 网关服务
      • 消息转发
      • 协议加解密、解压缩
      • 防洪水等
    • 场景服务
      • 负责游戏主要业务逻辑
      • 战斗、副本等逻辑可根据业务逻辑考虑可扩展

    日志服务器

    • 统计日志
      • 写入mongodb
    • 程序运行日志、业务逻辑日志(查bug)
      • 通过log4j2写入rsyslog或者kafka,统一用elk进行可视化日志管理
      • 即统一进行日志管理

    跨服服务器

    • 提供跨服逻辑

    其他服务器

    • 可提供公共的聊天服务器,支持跨服聊天

    服务器相关技术调研

    • 对于账号服务器、支付服务器采用Vert.x框架,轻量级且性能高
    • 对于devops服务器,因为有前端逻辑(可使用Thymeleaf模板引擎),所以采用Spring-Boot,集成大量工具,快速开发
    • 游戏服务器,采用Netty作为网络层,Disruptor作为消息队列,Redis作为缓存服务器,逻辑层多线程处理,io密集型操作全部异步
    • 游戏进程内缓存可采用lru算法
    • 跨服服务器和游戏服务器之间可使用RPC进行调用
    • Gradle进行项目整体构建

    用例流程举例

    • 登陆
      • 客户端连接平台服务器,进行版本校验,如果有更新则去CDN下载资源更新
      • 更新完毕,自动登陆(SDK),去SDK服务器进行登陆验证
      • 验证完毕拿到access-token,去平台服务器再次验证,通过返回游戏服务器列表+uid
      • 客户端选择某个服务器,建立连接,登陆游戏
    • 支付
      • 客户端发起支付请求,调用SDK支付
      • SDK服务器创建订单号并调用渠道支付
      • SDK服务器异步通知支付服务器支付信息
      • 支付服务器直接回调游戏服务器进行游戏内支付并依次返回
      • 注:订单号可以自己生成,方便对账
    • 客服查询
      • 客服通过客服工具访问devops,获取大区列表和游戏服务器列表
      • 选择某一个游戏服务器,输入查询项如玩家id发送至devops
      • devpos将请求转发至对应的游戏服务器
      • 游戏服务器根据玩家id查询玩家信息并依次返回
    • 运营操作
      • 运营通过运营工具访问devops,获取大区列表和游戏服务器列表
      • 选择部分游戏服务器进行运营活动配置并发送至devops
      • devpos将请求转发至对应的游戏服务器
      • 游戏服务器根据逻辑处理活动配置
    • 研发操作
      • 直接访问devops服务器,选择某个游戏服务器
      • 在web页面内选择向对应的游戏服务器发送关服指令
      • 游戏服务器收到消息后,执行关服操作,依次关闭服务
    • 运维操作
      • 搭建新服,初始化新服环境并启动
      • 访问devops服务器,在对应大区添加新服,指定相关信息
      • 将新服信息依次同步到账号服(服务器列表)、支付服(用于支付回调)

    其他说明

    • 目前游戏服务器只有两个进程,一个网关进程,一个场景进程,场景进程管理所有逻辑操作,因考虑到非mmo游戏类型,所以未采用传统的多场景进程+中心进程(跨场景通讯)的方案
    • 网关进程可以考虑开放多个端口用于acceptor(需要测试性能,单端口和多端口)
    • 必须要进行压力测试来反馈单组服务器承载压力(吞吐量、延迟等)从而进行设计调整

    相关文章

      网友评论

          本文标题:简版游戏服务器架构文档

          本文链接:https://www.haomeiwen.com/subject/qusknftx.html