游戏服务器架构概要

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

一、服务器架构概念解析

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

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

目录服务

账号服务与账号登撸

角色登录

游戏过程

运营支持

  • 脏字过滤
  • 验证码

五、参考资料

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

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

六、感受

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

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

努力,加油!

原文地址:https://www.cnblogs.com/OctoptusLian/p/9408602.html

时间: 2024-10-08 08:52:53

游戏服务器架构概要的相关文章

游戏服务器架构的思考

时间总是在不经意的时候就流走了,突然回想我已经做了四年游戏开发,经历了几个游戏项目,以前项目中的游戏服务器框架都不是我心中理想的框架,虽然不知道是不是我见识还不够.下面记录下我对游戏服务器架构的简单思考.好的游戏框架可以提高开发效率,节省人力成本.首先最简单的服务器框架,那就是只要一个网关和一个游戏服务器.如图: 图中agentserver负责客户端连接,客户端收发数据,将客户端数据转发给服务器,将服务器数据转发给客户端,几乎没有逻辑,这样可以应对大并发io.所以agent可以采用一个epoll

我是如何设计游戏服务器架构的

前言 现在游戏市场分为,pc端,移动端,浏览器端,而已移动端和浏览器端最为接近.都是短平快的特殊模式,不断的开服,合服,换皮.如此滚雪球! 那么在游戏服务器架构的设计方面肯定是以简单,快捷,节约成本来设计的. 来我们看一张图: 这个呢是我了解到,并且在使用的方式,而PC端的游戏服务器而言,往往是大量的数据处理和大量的人在线,一般地图也是无缝地图的完整世界观,所以不同的程序都是独立的进程并且在不同的server中运行! 而浏览器端和移动终端,在上面就说过了,它主要是不断的开服,合服,开服,合服,那

微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计

题目:微信房卡麻将棋牌架设之游戏服务器架构的详细设计(一) 内核设计 今天向大家介绍一下游戏服务器的设计,着重讲解一下微信房卡麻将棋牌架设(aqiulian.com)的服务器搭建,如果有什么不懂得可以咨询我Q_212303635,欢迎大家的咨询.那么我们开始进去主题吧. 内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: 图1  IService接口 Start方法用来启动服务. Stop 方法用来关闭服务. IsService 方法用于查询当前服务是否正在工作. 内核中

棋牌游戏服务器架构设计

转载自:简书一位同行的文章 一,棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间中的人可以接收到其他人的消息. 3,每个房间的操作必须是顺序性 这个特性类似与一般游戏的回合制,每个玩家的操作都是有顺序性的. 二,需要解决的技术点 1,数据共享 因为棋牌类游戏不分区不分服,我们在设计服务器的时候,是按世界服的思想去设计,即服务器是一个n多台物理机的集群

网络棋牌游戏服务器架构

一.物理架构说明 游戏系统组件包括: 服务器系统(中心服务器的控制系统,服务器登陆控制的系统,游戏登陆服务器,游戏房间控制的系统,游戏组件系统),游戏客户端(游戏大厅,游戏组件). 数据库系统:用于保存用户的信息数据.游戏积分数据.游戏系统运行状态的数据以及系统日志数据等数据. 中心服务器的控制系统:用于向客户端提供全局配置及初始化数据使用. 服务器登陆的控制系统:用于房间服务控制系统的登陆效验使用. 游戏房间的控制系统:用于控制游戏房间的启动,停止,添加,删除,管理等等. 游戏组件系统:用于具

简论游戏服务器架构设计

一.QIPAI类服务器的特点 1,QIPAI类不分区不分服 一般来说,QIPAI游戏都是不分区不分服的.所以QIPAI类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间中的人可以接收到其他人的消息. 3,每个房间的操作必须是顺序性 这个特性类似与一般游戏的回合制,每个玩家的操作都是有顺序性的. 二,需要解决的技术点 1,数据共享 因为QIPAI类游戏不分区不分服,我们在设计服务器的时候,是按世界服的思想去设计,即服务器是一个n多台物理机的集

游戏服务器架构分析

记录下我们游戏服务器的架构 游戏服务器逻辑架构图 我自己设计的游戏逻辑架构图 游戏服务器程序框架图 程序入口代码 // 读取此服务器相关配置  Log.Notice("Config", "Checking config file: %", config_file);  if(Config.MainConfig.SetSource(config_file, true))  {   Log.Success("Config", "Passed

棋牌游戏服务器架构: 总体设计

首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构.在研究其服务器框架后发现,它的网络部分确实是比较优化的.它主要采用了Windows提供的IO完成端口来实现其网络组件.本服务器虽然参考了其设计,但是还是有很大的不同,因为这个服务器框架主要是用在linux系统之上,而网狐棋牌是基于Windows平台的,严重依赖于windows sdk.这个架构延续了网狐棋牌在网络组件所作的努力,这个棋牌的服务器也使用异步IO作为网络的工作方式,更为彻底的是其数据库也是采用异步架构.boost::as

棋牌游戏服务器架构: 部署

先看一下,下面这张可能的部署图吧. 在这个图中,可以看到,客户端的形式多种多样,可能是pc上的一个可执行文件,也可能是通过浏览器打开的一个网页,甚至于手机客户端.它们都通过internet连接到游戏服务器. 在这个部署中有1个CenterServer,1个LogServer,3个LogonServer和很多个RoomServer(只显示了德州扑克的两个房间).这些Server有可能分布在同一台机器上,也可以分布在不同的机器之上.这对扩容来说是极为方便地.在玩家数量增大,系统不足以承载其网络负载时