游戏服务器架构概要

声明:本文内容源自腾讯游戏学院程序公开课_服务器第二节

一、服务器架构概念解析

1,什么是“服务器架构”

对服务器软件&硬件&运行的一体化规划

  • 框架结构:分层分块。
  • 构建技术选择:编程语言;通信方式;存储技术。
  • 运行质量:运行环境;部署工具方法;更新方案。

二、案例讲解:分布式服务架构设计演讲——MMORPG(大型多人在线角色扮演)《轩辕传奇》

服务器架构_分区多世界

1,运营视角

  • 世界与世界是隔离的
  • 世界之间的互通方式:跨服、转服、合服

2,运维视角

  • SET部署:每开一组服就增加一组机器,部署一套进程。

3,客户端视角

  • TCLS组件:显示所有服务器列表。

4,服务器视角

  • 一组服:一套进程。

轩辕服务器为什么要这么多进程和机器_多维度切分

1,分区多世界原型v1

  • 一个大区包含多台物理机
  • 一台物理机仅运营一个游戏世界
  • 一个游戏世界对应一个游戏进程

问题:跨世界共享的功能?

  • 游戏账号登陆
  • 客户端版本升级
  • 游戏大区列表
  • 游戏账号信息

2,公共服分离:将各游戏世界公共的功能分离部署到公共服上。

问题:公共服的单点故障

  • “主-备-从”模式:主节点出问题切到从节点(热切换),从节点出问题切到备份节点。

3,按“接入-逻辑-存储”分离

  • 分离业务逻辑(不稳定的)与基础功能(稳定的)

问题:逻辑处理和持久化数据在一个物理机上

  • DB的文件IO会拖慢整体系统(百万级玩家,几百个G数据)
  • 进程运行中每日输出大量的日志(几个G数据)
  • 物理机故障时DB可能会丢失

4,按重要性分离逻辑计算与持久化存储的部署

方案:数据库独立部署&热备,log服分离

5,分区多世界原型v2

  • cluster级服务:整个游戏一组
  • world级服务:每个游戏世界一组
  • 各组服均包含接入、逻辑、存储(DB/DR/LOG分离)

6,继续分离公共服

  • 公共服 分离“服务器列表”、“版本升级”、“账号信息”等功能

7,切分轩辕逻辑进程

现状:所有的鸡蛋都在一个篮子里

  • 所有玩家都在一个进程上;
  • 好处:一个特性可以方便地操作到所有玩家;
  • 风险:一个特性的BUG可能会影响所有玩家。
  • 所有特性都在一个进程上;
  • 风险:特性的不断引入会使该进程稳定性和服务质量降低。

方案:切分xysvr,让多个scene分别服务于一些用户,world负责拉取数据。并协调控制多scene。

8,分区多世界原型v3

  • cluster级、world级服务按功能不能切分。

9,如何做切分_参考原则

  • 为可扩展性:一组服一套进程;(SET部署)
  • 为可运维性:一组服一套机器;
  • 为可靠性:弱相关的功能可分离;
  • 提高更新便利性:将频繁更新的部分分离;
  • 按服务重要性切分:如支付系统独立;
  • 按服务特点切分:接入、存储、逻辑分离;
  • 切分稳定的(基础功能)与不稳定(业务逻辑)的。

三、案例讲解:面向运营的架构设计

1,接入与负载

多tconnd:分离下行广播包的压力。

多scene:可扩展性(单服承载人数)。

2,可用性

resume机制

minidump

  • 避免因为coredump导致resume时间过长;
  • 支持输出出错时基本上下文:调用栈、寄存器。

3,在线控制

reload机制:资源、配置文件热加载;

GM系统:管理游戏运行内容。

4,过载保护

  • 请求频率控制:按功能模块控制:移动、技能...
  • DB频率控制:按业务模块配额;区分优先级-存盘优先;
  • 边界情况检测:某类内存分配占用量超出阀值;某请求/time执行时间过长。

5,DB设计

  • 表格设计:按QQ号分表;简单列+统一blob格式(meta)
  • 数据升级:旁路进程,自动分批升级。

四、案例讲解:旁路服务

版本升级

tcus

  • 支持升级策略:强制、推荐、后台、预下载、自定义;
  • 支持灰度更新。

tdir

  • 显示服务器列表,繁忙程度(参照在线人数)

目录服务

账号服务与账号登撸

角色登录

游戏过程

运营支持

  • 脏字过滤
  • 验证码

五、参考资料

让我们谈谈游戏服务器开发(上)

游戏服务器架构演进(完整版)

六、感受

本次课程中有句话使我印象很深刻:最重要的不是看结果,而是看这个结果是怎么来的

与我刚入职时一位服务器大佬给我讲的话极为相似:模仿一个写出来你也不会懂原理是什么,自己搞清楚原理,即使写的不那么好也比抄的能学到更多

努力,加油!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Aox Lei

微信公众号信息抓取方法(一)——抓取公众号历史消息列表数据

研究微信抓取之前, 看过知乎有大神写的比较完善的例子, 受到启发, 才完成了整个微信公众号的抓取。 微信公众号内容的批量采集与应用 微信抓取的难点: 1. 无法...

6.6K3
来自专栏腾讯云技术沙龙

朱展:腾讯云小程序解决方案

大家下午好,我今天给大家带来的分享主题是腾讯云小程序解决方案。首先做一个自我介绍,我叫朱展,来自腾讯云,目前负责腾讯云小程序解决方案,从事设计开发的工作。

1.6K14
来自专栏DevOps时代的专栏

开发高质量软件的5大原则

多少次的惨痛教训告诉我们,在软件应用发布维护版本或者补丁之前,应该避免使用其最新版本。虽然每个人都知道初始发布版本V和稳定发布版本V.n之间存在软件质量鸿沟,这...

4286
来自专栏顾宇的研习笔记

Serverless 微服务架构案例无服务器架构 (Serverless Architectures) 简介 AWS Lambda 的编程模型Amazon API Gateway + AWS Lamb

Serverless 架构最早可以追溯到 Ken Fromm 发表的文章《Why The Future Of Software And Apps Is Serv...

2481
来自专栏京东技术

测试工程师做好缺陷预防,居然可以避免50%的错误!

2107
来自专栏程序员互动联盟

【入门指导】php高手推荐的几本书

PHP和MySQL Web开发(原书第4版) ? 本书将php开发与mysql应用相结合,分别对php和mysql做了深入浅出的分析,不仅介绍php和mysql...

3565
来自专栏用户画像

1.4.1 大内核和微内核

操作系统的体 系结构是一个开放的问题。操作系统在核心态威应用程序提供公共的服务,那么操作系统在核心态应该提供什么服务,怎样提供服务?有关这个 问题的回答,形成了...

2534
来自专栏PHP在线

说说大型高并发高负载网站的系统架构

转自:Just Do IT (http://www.toplee.com) 我在Cernet做过拨号接入平台的搭建,而后在 Yahoo3721负载搜索引擎前端平...

3725
来自专栏沃趣科技

降低保险行业TCO成本最好的方式是……

保险行业升级测试工作较多,此为行业背景。从客户甲了解到,他所在的DBA团队一方面要承担数据库日常维护工作,另一方面也要为业务部门提供测试数据库。除去生产环境的日...

50514
来自专栏互联网杂技

产品容错性设计原则

随着互联网的飞速发展,越来越多产品尤其是2C类产品更加注重用户体验,其中错误对用户体验的影响是灾难性的,在此我总结出一些容错性设计原则供大家参考和探讨。 ? 一...

4949

扫码关注云+社区

领取腾讯云代金券