百万级mmorpg游戏服务器架构

合集下载

百万用户级游戏服务器架构设计说明

百万用户级游戏服务器架构设计说明

百万用户级游戏服务器架构设计本文从最简单的游戏服务器架构开始讲起,结合主流的WOW等大型游戏服务器设计思路和mangos的一些理念,一步一步揭开网络游戏服务器的架构设计方法,对初学者尤其有帮助。

本文不但针对大型网游的设计,对中小型以及休闲棋牌类游戏服务器的设计,也有很大的启发作用。

服务器结构探讨 -- 最简单的结构所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。

所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。

好的结构不是一蹴而就的,而且每个设计者心中的那把尺都不相同,所以这个优秀结构的定义也就没有定论。

在这里,我们不打算对现有游戏结构做评价,而是试着从头开始搭建一个我们需要的MMOG结构。

对于一个最简单的游戏服务器来说,它只需要能够接受来自客户端的连接请求,然后处理客户端在游戏世界中的移动及交互,也即游戏逻辑处理即可。

如果我们把这两项功能集成到一个服务进程中,则最终的结构很简单:client ----- server嗯,太简单了点,这样也敢叫服务器结构?好吧,现在我们来往里面稍稍加点东西,让它看起来更像是服务器结构一些。

一般来说,我们在接入游戏服务器的时候都会要提供一个帐号和密码,验证通过后才能进入。

关于为什么要提供用户名和密码才能进入的问题我们这里不打算做过多讨论,云风曾对此也提出过类似的疑问,并给出了只用一个标识串就能进入的设想,有兴趣的可以去看看他们的讨论。

但不管是采用何种方式进入,照目前看来我们的服务器起码得提供一个帐号验证的功能。

我们把观察点先集中在一个大区内。

在大多数情况下,一个大区内都会有多组游戏服,也就是多个游戏世界可供选择。

简单点来实现,我们完全可以抛弃这个大区的概念,认为一个大区也就是放在同一个机房的多台服务器组,各服务器组间没有什么关系。

这样,我们可为每组服务器单独配备一台登录服。

最后的结构图应该像这样:loginServer gameServer| /| /client该结构下的玩家操作流程为,先选择大区,再选择大区下的某台服务器,即某个游戏世界,点击进入后开始帐号验证过程,验证成功则进入了该游戏世界。

腾讯QQ的游戏服务器架构

腾讯QQ的游戏服务器架构

腾讯QQ的游戏服务器架构QQ游戏的服务器架构百万级别在技术上,QQ游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?简单地说,实现百万人同时在线的服务器模型应该是:登陆服务器+大厅服务器+房间服务器。

当然,也可以是其它的模型,但其基本的思想是一样的。

下面,我将逐一介绍这三类服务器的各自作用。

登陆服务器:一般情况下,我们会向玩家开放若干个公开的登陆服务器,就如QQ登陆时让你选择的从哪个QQ游戏服务器登陆一样,QQ登陆时让玩家选择的六个服务器入口实际上就是登陆服务器。

登陆服务器主要完成负载平衡的作用。

详细点说就是,在登陆服务器的背后,有N个大厅服务器,登陆服务器只是用于为当前的客户端连接选择其下一步应该连接到哪个大厅服务器,当登陆服务器为当前的客户端连接选择了一个合适的大厅服务器后,客户端开始根据登陆服务器提供的信息连接到相应的大厅上去,同时客户端断开与登陆服务器的连接,为其他玩家客户端连接登陆服务器腾出套接字资源。

在设计登陆服务器时,至少应该有以下功能:N个大厅服务器的每一个大厅服务器都要与所有的登陆服务器保持连接,并实时地把本大厅服务器当前的同时在线人数通知给各个登陆服务器,这其中包括:用户进入时的同时在线人数增加信息以及用户退出时的同时在线人数减少信息。

这里的各个大厅服务器同时在线人数信息就是登陆服务器为客户端选择某个大厅让其登陆的依据。

比如,玩家A通过登陆服务器1连接到登陆服务器,登陆服务器开始为当前玩家在众多的大厅服务器中根据哪一个大厅服务器人数比较少来选择一个大厅,同时把这个大厅的连接IP和端口发给客户端,客户端收到这个IP和端口信息后,根据这个信息连接到此大厅,同时,客户端断开与登陆服务器之间的连接,这便是用户登陆过程中,在登陆服务器这一块的处理流程。

大厅服务器:大厅服务器,是普通玩家看不到的服务器,它的连接IP和端口信息是登陆服务器通知给客户端的。

也就是说,在QQ游戏的本地文件中,具体的大厅服务器连接IP和端口信息是没有保存的。

MMORPG服务器软件体系结构研究——构造模型的演化

MMORPG服务器软件体系结构研究——构造模型的演化

V 1 3 N . o 3 o6 . Dc 0 8 e .2 0
MMoI G 服 务 器 软 件 体 系 结 构 研 究



构 造 模 型 的 演化
吴拥 民 ,陈宏 展
( .闽江学院 计算机科学 系, 1 福建 福州 3 00 ; .福建天晴数码娱乐有限公司 , 5 18 2 福建 福州 30 0 ) 50 3
摘要 : 根据 K u he 4+1 模 型 以 U rc t n“ ” ML构造 了 MMO P R G服 务 器软件 体 系结构 的 演化模 型.在
进 程视 图中 , 加 一类全 局进程 , 增 实现 了集 中仲 裁式 的分布 式 同步模 型 ; 开发视 图 中, 在 增加 了一 个层 次从 而 改进构 造模 型 , 形成 了 5个层 次 : 心层 、 务层 、 核 服 实体层 、 交互层 与逻 辑层 , 清晰 了 并
ers.
Ke r s:s fwa e ac ie tr y wo d ot r r h tcu e;MMORPG;n n—f r l d ln o o ma mo ei g;UML
O 引 言
目前 , MMO P Mas eyMu i ae nieR l PaigG m ) R G( svl hp yr l o i l O n e— l n a e 已经 成为 互联 网时代 人类 娱 乐所 依 y 赖 的一种 基础设 施 , 但研究 MMO P R G软 件体 系结构基 本处 于空 白. 虽然 软件体 系结 构 已经在软 件工 程领域 中有 着广 泛 的应用 , 迄 今 为止 还 没有 一 个被 大 家 所公 认 的 但 定 义. 文献 [ ] 在 1 中我 们较早 地研 究 了 MMO P R G服 务器 的软 件 体 系结 构 , 提 出 了一 种 基 于 K uhe “ 并 ret 4 n +1 模型 理论 ,以 U ” ML为 描述语 言 的“ 非形 式化构 造 ” 方法 , 整 体描 述 了 MMO P … 从 R G服务 器 软件体

游戏工作室的游戏服务器架构解析

游戏工作室的游戏服务器架构解析

游戏工作室的游戏服务器架构解析在当今数字游戏市场的竞争中,良好的游戏服务器架构对于游戏工作室的成功至关重要。

一种稳定、高效、可扩展的游戏服务器架构不仅可以提升游戏的用户体验,还能够支持更多的玩家和更复杂的游戏玩法。

本文将对游戏工作室的游戏服务器架构进行解析,探讨其设计原则和实现方式。

一、概述游戏服务器架构是指用于支持游戏运行的硬件和软件系统。

一个好的游戏服务器架构应该具备高性能、可靠性、可伸缩性和安全性。

它需要能够处理大量的并发请求,并且能够适应用户数量的增长。

二、游戏服务器架构的设计原则1. 分布式架构分布式架构是指将游戏服务器的功能和负载分散到多台服务器上,以提高整体性能和可靠性。

在游戏工作室的服务器架构中,常常采用主从架构或者集群架构来实现分布式。

主服务器负责处理核心游戏逻辑,而从服务器则用于存储玩家数据和处理辅助功能。

2. 弹性伸缩弹性伸缩是指游戏服务器能够根据负载情况动态调整服务器数量和资源配置。

当游戏服务器的负载过高时,系统可以自动添加更多的服务器来分担负载,而当负载减轻时,系统可以释放多余的资源。

这样可以有效地提高服务器的可用性和性能。

3. 实时通信由于游戏的特殊性,实时通信对于游戏服务器架构来说至关重要。

游戏服务器需要实时地与玩家进行交互,传输玩家的操作和接收游戏状态的更新。

因此,游戏服务器通常采用高性能的消息中间件来支持实时通信,并采用UDP协议来传输数据,以降低延迟和提高响应速度。

4. 安全保障在游戏服务器架构中,安全性是一个重要的考虑因素。

游戏工作室需要保护玩家的个人信息和游戏数据,防止黑客攻击和非法访问。

因此,游戏服务器通常采用加密技术来保护数据传输,采用防火墙和入侵检测系统来防御网络攻击。

三、游戏服务器架构的实现方式1. 应用服务器应用服务器是游戏的核心服务器,负责处理游戏的逻辑和计算。

它通常采用高性能的多线程或者多进程技术来支持并发处理,并且利用缓存机制来提高数据的读写效率。

游戏服务器架构

游戏服务器架构

游戏服务器架构⼀、游戏服务器特征游戏服务器,是⼀个会长期运⾏程序,并且它还要服务于多个不定时,不定点的⽹络请求。

所以这类服务的特点是要特别关注稳定性和性能。

这类程序如果需要多个协作来提⾼承载能⼒,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。

由于多进程协同⼯作,也带来了开发的复杂度,这也是需要关注的问题。

功能约束,是架构设计决定性因素。

基于游戏业务的功能特征,对服务器端系统来说,有以下⼏个特殊的需求:游戏和玩家的数据存储落地对玩家交互数据进⾏⼴播和同步重要逻辑要在服务器上运算,做好验证,防⽌外挂。

针对以上的需求特征,在服务器端,我们往往会关注对电脑内存和CPU的使⽤,以求在特定业务代码下,能尽量满⾜⾼承载低响应延迟的需求。

最基本的做法就是“空间换时间”,⽤各种缓存的⽅式来以求得CPU和内存空间上的平衡。

另外还有⼀个约束:带宽。

⽹络带宽直接限制了服务器的处理能⼒,所以游戏服务器架构也必定要考虑这个因素。

⼆、游戏服务器架构要素对于游戏服务端架构,最重要的三个部分就是,如何使⽤CPU、内存、⽹卡的设计:内存架构:主要决定服务器如何使⽤内存,以最⼤化利⽤服务器端内存来提⾼承载量,降低服务延迟。

逻辑架构:设计如何使⽤进程、线程、协程这些对于CPU调度的⽅案。

选择同步、异步等不同的编程模型,以提⾼服务器的稳定性和承载量。

可以分区分服,也可以采⽤世界服的⽅式,将相同功能模块划分到不同的服务器来处理。

通信模式:决定使⽤何种⽅式通讯。

基于游戏类型不同采⽤不同的通信模式,⽐如http,tcp,udp等。

三、服务器演化进程1、卡牌等休闲游戏弱交互游戏服务器基于游戏类型不同,所采⽤的架构也有所不同,我们先讲⼀下简单的模型,采⽤http通信模式架构的服务器:这种服务器架构和我们常⽤的web服务器架构差不多,也是采⽤nginx负载集群⽀持服务器的⽔平扩展,memcache做缓存。

唯⼀不同的地点不同的在于通信层需要对协议再加⼯和加密,⼀般每个公司都有⾃⼰的⼀套基于http的协议层框架,很少采⽤开源框架。

高性能MMORPG通用服务端引擎设计之一

高性能MMORPG通用服务端引擎设计之一
高性能MMORPG通用服务端引擎设计之->基本概念篇
鉴于公司保密协议,本系列文章将不涉及具体的游戏细节以及实现。由于本人也是第一次参与此类引擎的设计,所以难免有所失误,如有异见欢迎业内人士讨论,发表本系列文章的目的不在于说教,重在分享以及讨论。
MMORPG的服务端引擎是驱动整个游戏的总要部件,而且对于现在外挂满天飞的年代,服务端的地位变得愈发重要,很多游戏都将很多原来由客户端处理的逻辑交给了服务端来处理,以避免各类外挂对游戏公平性造成的影响。要设计一款通用的且高性能的MMORPG服务引擎是一个非常艰巨的工作,总的来说,一款网游能够承载多少人,能够实现什么功能,能够开展什么运营活动,都是跟有一款够不够强悍的服务端引擎有密切的关系,可以说服务端引擎就是游戏的心脏,如果设计不好,就会“心率不齐”,“心肌梗塞”,然后不能支撑足够的在线人数,操作“卡”,最后死掉翘辫子。设计精良的引擎,比如WOW,EVE Online等,则给运营和策划留下来大量的空间,这样游戏的成功也就不存在“技术问题”了。
|
Client
我们可以继续将游戏逻辑进行分类,由于MMORPG的每一个玩家从经入游戏开始就是处于一个个的场景当中的,所以逻辑服务器也可以叫场景服务器(地图服务器),有的游戏即使没有场景切换,其实也是分了很多场景的,只是采用了无缝拼接的技术让你觉得是没有分开的。玩家的逻辑就可以分为连续事件逻辑和瞬时逻辑。连续事件逻辑是在场景中需要和其他用户发生反映的事件,也可以称之为场景事件,比如我攻击了一个怪,这一个事件需要通知场景里所有的玩家知道,并且会影响怪接下来的行动。所谓的瞬时事件,就是只会影响玩家自身的状态且不需要通知其他玩家或者说是对场景产生影响的(当然如果对场景产生了影响势必需要通知场景内其他玩家)。有的事件甚至会跨场景通知系统内所有用户(比如某玩家击杀了某著名BOSS,或者通知师父自己的徒弟在某处遭到了攻击[假如要实现师徒系统的话])。玩家大部分的逻辑都是在场景内完成的,所以场景逻辑的实现非常的重要。在这个部分的运算涉及到多个对象间的互动,如果想用多线程来提高并行度来提高性能其实反而会适得其反,因为要保证计算的数据安全避免脏读,在多线程的环境下就需要处理大量的锁,相信在游戏的业务逻辑里还需要处理锁,防止死锁这里的处理会宁所有的程序员抓狂,对于这种高CPU运算的场景来说,大量的线程也会将宝贵的CPU时间浪费不少在线程切换上,所以一般来说游戏的逻辑服务器都是单进程单线程的结构,通过一个大循环来驱动整个事件逻辑。那么你可能会问,如果有单进程单线程岂不是只能利用一颗CPU内核了么?当然一个游戏也不可能只有一个场景嘛,我们可以在一台服务器上跑N个场景服务,处理N个场景的逻辑(根据经验来说,N=CPU内核数量性能最好)。所以你可以看到为啥上图我不写Logic Server而是写的Logic Service了。

大世界网络游戏服务器的构架19页

大世界网络游戏服务器的构架19页

谢谢
云风
.codingnow
PPT 下载codingnow/2019/deepcold.ppt
Thank you
• 玩家的交互受游戏设计的限制
– 限制是为了更丰富的可能性 – 虚拟世界的战争、贸易以及资源分配
服 务 器 组 的 内 部 结 构
外部连接处理
• 多个外部接入点
– 国情问题:电信网通问题 – 特别通道:用于管理人员进入
• 组播
– 分组管理的问题
• 心跳控制
– 流水线作业 – 时间控制 – 录象回放调试(监督数据合法性)
– 物理上玩家分属不同服务器组管理 – 用户数据库各自独立,无须实时交互 – 虚拟世界中的距离即物理世界上的距离
登陆过程
服务器组间的消息传递
服务器组间消息传递
• 避免交互性协议
– 游戏设计上考虑远程通讯的时间差 – 允许数据复制,并考虑多个副本相遇时的处理
• 每组服务器有唯一的数据输入输出点
– 海关服务
• 唯一的数据储存点
– 使用本地文件系统 – 使用简单文本结构 – 使用简单的交互协议
• 物品发放服务
– 虚拟物品的控制
• 数据监控和备份
系统登陆与灾难处理
• 门卫
– 用户登陆排队 – 登出登记
• ห้องสมุดไป่ตู้洞
– 从灾难中恢复 – 保持跟玩家的有限交互
游戏逻辑的实现
• 多进程单线程结构
– 避免进程间通讯 – 严格控制数据进出 – 做好灾难处理
引擎三大部分
• 基于 freebsd 的服务器 • 跨平台的客户端
– 二进制跨平台 – 支持 Win32 MacOs Linux Freebsd – 3d 部分基于 openGL – C 语言编写底层、逻辑部分动态脚本语言

百万用户同时在线游戏服务器架构实现

百万用户同时在线游戏服务器架构实现

百万用户在线网络游戏服务器架构实现一、前言事实上100万游戏服务器,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高效率的编程语言、高性能的数据库、还有高性能的架构模型。

但是除了这几个方面,还没法根本解决面临的高负载和高并发问题。

当然用户不断地追求更高的机器性能,而升级单一的服务器系统,往往造成过高的投入和维护成本,性价比大大低于预期。

同时全天候的可用性的要求也不能满足要求,如果服务器出现故障则该项服务肯定会终止。

所以单独追求高性能的服务器不能满足要求,目前基本的解决方案是使用集群技术做负载均衡,可以把整体性能不高的服务器做成高可扩展性,高可用性,高性能的,满足目前的要求。

目前解决客户端和服务器进行底层通讯的交互的双向I/O模型的服务器的成熟方案。

1.windows下,比较成熟的技术是采用IOCP,完成端口的服务器模型。

2.Linux下,比较成熟的技术是采用Epoll服务器模型,Linux2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。

目前如上服务器模型是完全可以达到5K到20K的同时在线量的。

但5K这样的数值离百万这样的数值实在相差太大了,所以,百万人的同时在线是单台服务器肯定无法实现的。

而且目前几个比较成熟的开发框架,比如ICE,ACE等。

这样,当采用一种新的通信技术来实现通信底层时,框架本身就不用做任何修改了(或修改很少),而功能很容易实现,性能达到最优。

目前采用的ace框架个不错的选择方案,可以不受操作系统的影响,移植比较方便。

对于数据库选择可有许多成熟的方案,目前大多数选择的mysql Master/slave模式,以及oracle RAC方案。

基本可以满足目前的要求,但具体的瓶颈不是在数据库本身,应该还是硬件磁盘I/O的影响更大些。

建议使用盘阵。

这有其他成熟的方案,比如采用NAS解决分布数据存储。

其实最为关键的是服务器的架构和实现,数据流量的负载均衡,体系的安全性,关键影响度,共享数据的处理等等多个方面对100万用户的数据处理有影响,所以都要全面的考虑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器架构现在应该很高效了吗?还能想到影响那些地 方会影响服务器性能的吗? 游戏中移动、聊天、技能、物品、任务、怪物、AI等 应该放在一个scene服务器上吗? 单个scene服务器能处理这么多的事情吗? 好吧,让我们再来看下开始的图吧,你会看到很多熟悉 的东东
Internet Client
问题和思考
如果我们需要添加new scene怎么办?要通 知所有与new scene相联系的scene我要加 入了吗? 当scene变多的时候我们应该怎么去协调各个 scene间的工作?我们难道不应该引入一个管 理者吗?
添加中心控制器的服务器架构
每个scene只需要与center连接; Center来协调控制各个scene,方便new scene的添加。
问题和思考
确实解决了服务器场景管理的问题,但是客户端每 次切换一次场景都要重新跟scene发起一次连接, 这样是不是太低效了? 客户端与服务器重新建立连接比较耗时(要再次3 次握手,身份验证等),容易导致卡号(连接不上 新scene),还可能导致复制装备等问题。
不用重复连接scene的服务器架构
所谓服务器的架构,通俗的讲就是如何将服 务器各部分合理的安排,以实现用户所有的功 能需求。所以架构本来无所谓正确与错误;当 然优秀的结构更有助于系统的搭建,对系统的 可扩展性及可维护性也有更大的帮助。
从零开始—最简单的架构
对于一个最简单的游戏服务器来说,它只需要 能够接受来自客户端的连接请求,然后处理客 户端在游戏世界中的移动及交互(即游戏逻辑 的处理)即可。
添加了多个用户的服务器架构
login不在占用logic的资源,使logic运行更 高效;
添加了多个用户的服务器架构 +DB
问题和思考
玩家游戏中的数据应该怎么办呢?应该与 Auth共用DB吗? 让我们来看下游戏的logic服务器吧
独立场景的服务器架构
游戏不应该只有1个场景,所有的场景不应该都放在logic 中; 玩家在场景中的切换,实际上是玩家的数据在场景中的切换。
问题和思考
上面这个也能叫服务器架构? 为什么和之前的那副架构图相差这么大?
Login模块分离
一般我们在接入游戏服务器时,需要一个账户 和密码,证通过后才能进入。
简单的游戏分区架构
为了接入更多的用户来玩游戏,我们要开放更 多游戏区(游戏服务器)。
问题和思考
上面服务器架构合理吗?不合理为什么? 我们有更好的办法吗?
socket tbus shm
带有网关的服务器架构
经过分析发现center包含,逻辑处理和转发client与scene之间消息的 功能,既然这两块没有联系我们可以将client与scene模块独立出来。 Gateway仅仅用来处理client与后台logic server的连接,可以大幅提 高client的连接数量。
问题和思考
QQ Vas key Agent
Tcenterd
Torm(tacc)
World
Tagent
Torm(mail)
Tmail
GamePlay_1
Torm(char) GamePlay_2 MySQL(master) Tlogd MySQL(slave) Terrain
socket tbus shm
什么是游戏服务器架构
百万级
MMORPG游戏服务 器架构
L/O/G/O
什么是MMORPG
MMORPG的典型特征有哪些?
有哪些经典的MMO?
Internet Client
Tconnd Server Environment
Tconnd
Tconnd
Tconnd
Tconnd
Tversion Tdir Tacc Chat
center和client直接连接,center转发client和scene的 消息,这样client就不需要和scene重复连接; center还负责转发scene之间的数据,如:client从 scene1切换到scene2.
问题和思考
Center真是中流砥柱啊,但是它能承载多少 玩家?这样Center不就是这个架构的瓶颈了 吗? 我们既想不要频繁的改变连接,又想有一个唯 一的入口,同时还希望这个入口的负载不要太 大,以至于接受不了多少连接。
Tconnd Server Environment
Tconnd
Tconnd
Tconnd
Tconnd
Tversion Tdir Tacc Chat
QQ Vas key Agent
Tcenterd
Torm(tacc)
World
Tagent
Torm(mail)
Tmail
GamePlay_1
Torm(char) GamePlay_2 MySQL(master) Tlogd MySQL(slave) Terrain
相关文档
最新文档