文档章节

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

一一叶
 一一叶
发布于 2017/05/14 02:27
字数 1119
阅读 282
收藏 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
279
2
gzochi 0.4 发布,多人在线游戏开发框架

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

oschina
2013/07/09
1K
0
[石家庄]摩星科技有限公司招聘-服务器程序(java,linux,socket,Mysql)

[石家庄]摩星科技有限公司招聘-服务器程序(java,linux,socket,Mysql) 1.工作内容 岗位职责: 1. 负责网页游戏服务器端架构设计与实现; 2. 负责开发游戏服务端程序; 3. 负责服务器端基...

动静如一
2011/08/10
441
1
北京 招聘AS3程序员 待遇优厚平台宽广

岗位职责: 1. 构建公司项目前端开发框架,负责前端页面的开发和维护; 2. 和服务器端研讨技术实现方案,制定服务数据接口。 3. 配合策划,美术等各部门工作,保证游戏开发的正常进行。 岗位要...

贺翔
2012/04/10
331
6
北京 招聘AS3程序员 待遇优厚平台宽广

岗位职责: 1. 构建公司项目前端开发框架,负责前端页面的开发和维护; 2. 和服务器端研讨技术实现方案,制定服务数据接口。 3. 配合策划,美术等各部门工作,保证游戏开发的正常进行。 岗位要...

贺翔
2012/04/06
167
0

没有更多内容

加载失败,请刷新页面

加载更多

python实现下载网络图片

项目需求: 有时候我们做爬虫的时候,需要把爬取到的图片资源保存到我们本地,以防爬取的图片链接被原来资源主人变更,所以就需要把好不容易拿到的资源永久变为自己的,就需要把图片链接下载到我们...

银装素裹
38分钟前
2
0
米利型和摩尔型状态机

1. 经典状态机 x(t)为当前输入 z(t)为当前输出 组合逻辑电路输出s(t+1)为次态 状态寄存器(也就是一组触发器)输出s(t)为现态 2. 米利状态机(Mealy) 组合逻辑C1模块有两个输入端:当前输入x(t...

易冥天
40分钟前
4
0
Kafka是如何解决常见的微服务通信问题的

微服务自成立以来就以不同的方式相互沟通。有些人更喜欢使用HTTP REST API,但这些API有自己的排队问题,而有些则更喜欢较旧的消息队列,比如RabbitMQ,它们带有扩展和操作方面的问题。 以K...

java菜分享
43分钟前
2
0
关于php的xdebug配置(编辑器vscode)

虽然说echo和print_r是公认的最实用的调试工具,但是效率真的没有可视化的直接断点那么高。这里简单介绍如果安装及配置xdebug for vscode 一、PHP环境处的配置 1、编译安装 下载及编译php,因...

元谷
57分钟前
8
0
heartbeat

http://www.linux-ha.org/doc/users-guide/_building_and_installing_heartbeat_from_source.html kaer@linux-sqlf:~/Reusable-Cluster-Components-glue--0a7add1d9996> ./configure --enabl......

李有常
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部