文档章节

大型在线游戏服务器架构分享

一一叶
 一一叶
发布于 2017/05/14 02:27
字数 1119
阅读 229
收藏 3

        游戏服务器首先必须是安全的,大型在线游戏理论上支持在线用户是无限的。我们无法一次性做到无限,但我们可以通过负载均衡做到高扩展性,高伸缩性,高可用以及支持高并发的游戏服务器。无论是游戏服务器架构还是web 服务器架构,如果前期设计不好,后边将面临着重构的风险。当然我们也要考虑以重构的方案。

        无论什么服务器架构都是从0到1 再到无穷的。我们只要把基础架构做好,上线之后可以慢慢进行扩展,甚至于重构。

        agent :代理服务器及登陆服务器,在该服务上进行维护用户登陆状态,以及作为其他服务器的转发。在上层可以加四层负载均衡(TCP负载均衡) ,通过这种方式实现在线用户数量的横向扩展。同时也处理通讯协议,与用户服务交互验证用户信息。

        logic:逻辑服务器,主要包括有:活动,奖励,关卡,背包,交易,技能,好友等逻辑处理。

        user:用户服务器, 用户安全验证,白名单,黑名单,登陆令牌生成,用户第三方账号绑定信息,用户角色信息,等处理。

        BA:战斗服务器代理,代理各种战斗服务器。由agent 将消息转发过来,在经过进一步数据处理,转发至具体的战斗服务或者具体的战斗服务器组,同时也可以作分区分服以及合服合区。BA和B灵活搭配可实现跨服,跨区战斗。
        B:战斗服务器/战斗服务组。用于处理针对性的战斗,也可以用于搭建高可用性的战斗服务器。

        IM: 聊天室,单聊,群聊,广播.以及通知推送功能。

        area: 选区服务,用户登陆完毕之后,显示区服列表,跨服跨区信息,区服维护状态。

        dbproxy:db 代理服务器。代理cache 和db 在架构中缓解cache和db压力。

        其他服务就不再一一叙述。

        通讯协议:

包长

用户ID

token

操作类型

请求序列号

客户端版本

消息内容

md5

token由agent在线用户定时(登陆成功)请求user 服务器生成,并通过心跳发给client的。客户端拿到之后,放进通讯协议中。客户端版本:可以通过后台管理设置禁用,也可以通过版本号,作服务器重构兼容客户的版本(虽然这个很不爽)。最好的还是通讯协议做好兼容。

        在服务架构内部采用rpc通讯。通过zk(zookeeper) 来作服务发现和服务集群。其中rpc 可分场景分别选取同步和异步方式。如用户登陆之后,采用异步rpc方式把用户的其他信息增加到cache.用户退出登陆时(客户端心跳失败之后)异步rpc 持久化用户数据。logic,user,BA,B,IM,area,dbproxy均为rpc和zk 实现内部通讯,都是zk上的一个节点。

        跨区服/合区服。只有将area ,B,BA,agent,client,通讯协议等参与协同工作才可实现。如跨服,通过area(选区服务)在 client 上可跨服战斗的列表。client 获取列表之后,转换成我们制定的通讯协议发送给agent服务。在转发给BA,由BA 找到相应的跨服服务器B。如合服,如果服务分服配置一致,也可直接在BA处进行合服;如果是复杂的分服,可参考跨服流程。

© 著作权归作者所有

共有 人打赏支持
一一叶
粉丝 25
博文 21
码字总数 8193
作品 0
浦东
高级程序员
[引擎] 1.1XOpenServer 简介

# XOpenServer http://geek.iyplay.com/?id=26 XOpenServer是由极客联盟烽烟工作室即将开发的开源服务器框架,是基于c++/Lua的架构开发的高性能、分布式游戏服务器框架, 也可作为需要实时交...

谢焕标
2015/12/18
231
1
gzochi 0.4 发布,多人在线游戏开发框架

gzochi 0.4 增加了自动化、可持续的任务重新调度的支持,这是通过服务器容器的任务 API 实现的;重新架构用户认证系统以支持额外的认证机制,包括通过密码文件或者是 Kerberos 5 令牌进行认证...

oschina
2013/07/09
1K
0
OSC 第 121 期高手问答 -- Ansible 自动化运维:技术与最佳实践

OSCHINA 本期高手问答(7月19日- 7月27日) 我们请来了@jimchen010 (陈金窗)、@沈灿 、@老瓦房 (刘政委) 为大家解答关于Ansible自动化运维:技术与最佳实践方面的问题。 @jimchen010 (陈金...

催呀催呀
2016/07/19
4.3K
48
大型网站架构系列:电商网站架构案例(转)

转载地址: http://www.aboutyun.com/thread-17407-1-1.html 问题导读: 1、电商网站考虑的客户需求有哪些? 2、网站架构如何演变的? 3、电商架构优化需考虑哪些内容? 大型网站架构是一个系...

jbaowei2000
2017/07/22
0
0
MMORPG游戏服务器端的设计

MMORPG不同于其它的局域网的网络游戏,它是一个面向整个Internet的连接人数过万的网络游戏,因此他的服务器端设计则极为重要 服务器的基本设置   在大型网络游戏里,通常设计为C/S结构,客...

JavaGG
2010/03/24
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
22分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
29分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
31分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
37分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部