`
vanadiumlin
  • 浏览: 492520 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

游戏服务器集群设计思路

 
阅读更多
    对于我们的游戏服务器端来说,除了要满足一般的MMO服务器端功能要求外,还要达到两个附加需求:
        1、高可用性
                避免任何服务的单点故障,各种关键服务都提供一定的冗余和故障自动切换机制。
        2、动态负载均衡
                游戏世界和游戏场景服务能够根据服务器网络中机器的负载情况,选择合适的宿主机器创建和动态迁移。
                提供场景动态分区的技术,支持单个场景中支持巨量玩家在线。
        因此,我们需要设计一个支持不同层面高可用性和负载均衡的游戏服务器集群系统。

        下面谈谈我的设计思路。
        不妨先从服务器运营、部署和管理的角度出发来来考虑。对于规模较大的MMO来说,服务器通常会部署在多个数据中心里。每个数据中心会集中部署大量服务器,这些服务器通常被作为一个整体来集中管理,诸如玩家看到的“网通1区”、“电信2区”这样的称呼。我把这样的一组服务器称为一个游戏域。本文主要叙述一个游戏域内的服务层次设计。

        一个游戏域内主要的组件以如下方式组织:
        游戏域
                登录服务:提供登录验证服务,在后期可能会加入登录排队服务。
                前端服务:相当于客户端和服务器端间的防火墙,提供包的验证、过滤、汇聚和分发功能。
                数据服务:提供游戏全局数据存取,如帐号信息等,通常底层由成熟的数据库支持。
                消息服务:主要指聊天、系统广播等即时消息服务,也可以提供类似信箱等非即时消息。
                游戏世界
                        游戏场景:包括集市、PvP副本、PvE副本等场景。
                                场景分区:主要用于支持同一场景中容纳巨量玩家,可以根据区域进行几何划分(参见场景集群的划分 ),也可以根据玩家关联程度等其他特性划分。

        为简化设计,考虑到应用特点,我们的系统设计为集中-分布式,而非完全分布式。
  
        对于一个游戏域来说,最顶层由域管理器(Domain Manager,DM)作为管理中心。这里的域管理器有些类似于简化的Windows域控制器(Domain Controller),主要有两方面作用:1)负责其之间下层组件的创建与负载均衡策略,如游戏世界的创建;2)作为一个服务注册中心,起到类似于全局 DNS的作用。
        在高可用性方面,我们系统中的各种组件基本都采用主节点-复制节点(Master-Repo)结构。对于游戏域而言,正常情况下,任何时刻一个游戏域中有一个唯一的负责决策的域管理器,即主域管理器(Master Domain Manager,MDM)。为满足高可用性要求,一个主域管理器会有多份拷贝,我们称之为复制域管理器(Repo Domain Manager, RDM)。注意,为简化起见,我们不提供域管理器本身的负载均衡支持,但支持域管理器的故障切换。当MDM出现故障时,系统会选择一个RDM升级为 MDM,并根据需要再启动一个RDM,以满足DM副本数量的要求。一个DM启动的时候,会发通过组播查询域中的DM,如果此时发现MDM,在MDM同意的情况下,就作为RDM与之通过数据复制进行同步;反之,如果没发现MDM,就和其他RDM协商,确定自身能否成为MDM。进一步设计和实现高可用性时,需要考虑集群脑裂的问题(split-brain,不熟悉的同学请google 之)。
        MDM还会根据管理数据服务、消息服务、前端服务和游戏世界等组件高可用性与负责均衡。

        客户端登录时,根据本地存储的服务器地址列表与登录服务器进行连接。因此,登录服务的负载均衡,可以结合DNS负载均衡或类似F5的负载均衡设备来实现。客户端一旦通过登录验证,就会由MDM选择合适的游戏前端服务器与之进行连接。
  
        为提供高可用性,前端服务(Front-end Service, FS)也采用主节点-复制节点的设计,客户端会缓存主前端服务地址(Master Front-end Service, MFS)和复制前端服务(Repo Front-end Service, RFS)地址。前端服务还用来存取独立于特定游戏世界的信息,如玩家的角色信息。

        和其他需要高可用性的服务类似,游戏世界、游戏场景和场景分区都采用Master-Repo体系结构。
        每个游戏世界有一个相应的主游戏世界服务器(Master World Server, MWS),其作用有两方面:1)管理游戏世界的全局信息;2)管理游戏场景的负载均衡和故障切换。
        每个游戏场景有一个相应的主场景服务器(Master Scene Server, MSS),其主要作用也有两方面:1)管理特定场景的全局信息;2)管理场景分区的负载均衡和故障切换。一个游戏场景可以由一个或多个场景分区组成。
        每个场景分区有一个相应的主场景分区服务(Master Scene Partion Server, MSPS),负责其中游戏实体对象的管理。通常,前端服务器将会把大多数客户端请求直接转发到玩家角色所属的场景分区中。

        对于任何一个分布式系统来说,主要有两方面功能:其一,向上提供分布式服务接口;其二,向下提供对底层分布资源的管理。以上主要介绍了游戏集群的服务接口层次。此外,如前所述,在资源管理方面,我们采用Master-Repo结构,将高可用性和负载均衡调度的功能融入到了游戏逻辑服务器中。这种设计把两种看似正交的功能耦合在了一起,增加了系统复杂性。其实,正是通过结合游戏逻辑和集群要求的特点,我们减少了额外层次,简化了系统设计和多余消息传递的开销。而且,通过采用相似的Master-Repo结构,似的集群资源调度本身也是可以在不同组件间复用的。

        在集群资源管理方面,还有一个重要的方面没有提到,那就是对物理机器资源的管理。为做到这一点,我们在每个物理节点(服务器的操作系统)中运行着一个后台服务,我们称之为节点代理(Node Agent,NA),起主要作用有两方面:1)负责监测系统CPU、内存和网络资源的情况,并提供查询接口;2)负责启动和停止其他的游戏服务进程,如前端服务器、游戏世界服务和场景服务等。在项目的后期,还可以通过NA加入一些方便系统管理的功能,如服务器端软件统一升级等。

        通过以上叙述,我们简要的介绍了支持负载均衡和高可用性的MMO服务器集群的构件和设计思路。因时间关系,还有一些构件和机制没有再这里讨论,如系统管理服务器设计,不同游戏域之间的通信等。随着项目的进展,设计思路的进一步成熟,这些话题会在后续的文章中讨论。
分享到:
评论

相关推荐

    tictac:演示构建用Elixir编写的集群,分布式,多玩家,回合制游戏服务器

    这是构建以Elixir编写的集群,分布式,多玩家,基于回合的游戏服务器的演示。 按照设计,它可以玩井字游戏,但可以扩展为可以玩几乎所有多人回合制游戏。 它使用Phoenix libcluster用于UI,使用TailwindCSS进行样式...

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip Introduction ==== 1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时...

    C++项目设计和高性能服务开发-视频教程网盘链接提取码下载 .txt

    非常推荐的一个C++入门的集群聊天开源项目,课程主要讲解集群聊天服务器设计,软件分层设计思路,用muduo网络库实现高性能的聊天服务器,cmake构建项目集成编译环境,负载均衡器的介绍和项目的整套开发流程,bug调试定位等...

    服务器虚拟化部署方案.doc

    1 服务器虚拟化部署方案 2 数据库服务器设计说明 在数据库服务器的配置中,对数据库服务器性能影响较大的有: CPU:数据库查询和修改操作都需要消耗大量的CPU资源,另外数据库都是多线程 应用程序,使用SMP〔对称多...

    架构设计方案

    2.1.3数据存储的设计思路 1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。 2)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。 2.1.4不同网络用户访问考虑 1)...

    bs架构设计

    1 设计思路 3 2 系统结构 3 3 网络规划及性能计算 3 3.1 网络架构 3 3.2 网络架构说明 4 3.2.1 采用双防火墙双交换机做网络冗余,保障平台服务 4 3.2.2 采用硬件设备负载均衡器,实现网络流量的负载均衡 4 3.3 系统...

    最全面的门户网站架构设计方案.doc

    3) 采用Oscache实现页面缓存,采用Memcached实现数据缓存 4) 采用独立的图片服务器集群来实现图片资源的存储及WEB请求 2.1.3 数据存储的设计思路 1) 数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC...

    服务器虚拟化部署方案教程文件.doc

    1 服务器虚拟化部署方案 2 数据库服务器设计说明 在数据库服务器的配置中,对数据库服务器性能影响较大的有: CPU:数据库查询和修改操作都需要消耗大量的CPU资源,另外数据库都是多线程 应用程序,使用SMP(对称多...

    服务器虚拟化部署方案(1).doc

    虚拟化的建设方案相比以往传统建设思路需满足以下要求: 1) 减少计划内停机时间 通过使用虚拟机自动迁移功能 ,在进行计划内服务器维护以至跨服务器的虚拟机实时迁移时,将不再需要为这些活动 安排应用程序停机,...

    网站建设硬件设计方案.docx

    去处理 数据存储的设计思路 1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。 2)采用高效的网络文件共享策略,采用独立的图片服务器和磁盘阵列来实现页面图片资源的web请求和...

    服务器虚拟化部署方案(2).doc

    服务器虚拟化设计 通过服务器虚拟化技术可以在一台物理服务器上创建多个不同的虚拟机,可以部 署不同的操作系统,部署不同的业务应用,每个虚拟机之间相互隔离。当用户有新增的 业务需求时,无需再去采购新的硬件,...

    C++项目设计和高性能服务开发

    主要讲解集群聊天服务器设计,软件分层设计思路,用muduo网络库实现高性能的聊天服务器,cmake构建项目集成编译环境,负载均衡器的介绍和项目的整套开发流程,bug调试定位等,需要的小伙伴可以看下。

    高性能电子商务平台构建:架构、设计与开发(带详细书签)

    第四部分(第10章)安装部署,将已制作完成的商城部署至服务器,并介绍了集群部署中主要节点的部署过程。这四个部分对电子商务平台从规划,再到各个重点模块构建,再到部署及性能、用户体验的优化,全面透彻地进行了...

    毕业设计个人博客系统源码-PM25:开源节点服务器监控平台

    毕业设计 个人博客系统源码 NodeJS服务监控报警系统的核心实现和开源共建 建设服务监控系统的初衷和历程 核心实现思路及实际应用 现有功能点介绍和路线图 代码开源的目的、愿景 开源代码的结构和部署拓扑图 项目...

    数据脱敏大数据架构设计.docx

    数据脱敏大数据架构设计全文共4页,当前为第1页。数据脱敏大数据架构设计... 采用微服务架构设计,架构和部署(部署方式可以 容器思路来操作)都有一些复杂,但是每个服务职责单一,易于扩展。 数据脱敏大数据架构设计

    厂区网络视频监控系统设计方案.docx

    本次设计思路如下: 1、采用服务器集群结构,实现"大容量、多画面处理、实时录像和回放、联网远程监控"的目标。 2、便于以后用户的安装、操作和今后的维护便利。 3、考虑了各种兼容要求和扩容要求:包括现有数字...

    PHP秒杀系统 高并发高性能的极致挑战 从万次到亿万次的性能优化,从单机到分布式的架构升级

    本课由360架构师亲授,以...从单机到web集群,从多服务器到多机房数据中心,服务器资源可随业务规模扩展,不局限于系统极限容量5.加入机器人服务识别,自动完成安全认证 黄牛无法重复、多次下单 保证抢购系统公平稳定

    Java思维导图xmind文件+导出图片

    redis使用常见问题及性能优化思路 redis高可用及高并发实战 缓存击穿、缓存雪崩预防策略 Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 ...

    医院网络设计方案.docx

    住院医生工作站系统,电子病历、全院PACS、无线查房、腕带技术、RFID、万兆网络、服务器集群、数据虚拟容灾等先进的系统和网络技术已经开始应用。 医院通过信息化系统建设,优化就诊流程,减少患者排队挂号等候时间...

Global site tag (gtag.js) - Google Analytics