文档章节

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

一一叶
 一一叶
发布于 2017/05/14 02:27
字数 1119
阅读 255
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

好用的vue组件

http://elickzhao.github.io/2017/08/vue%E4%B8%80%E4%BA%9B%E7%89%B9%E5%88%AB%E6%9C%89%E7%94%A8%E7%9A%84%E6%8F%92%E4%BB%B6/...

Littlebox
21分钟前
2
0
linux 源码安装mysql8

1.安装依赖 yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel   2.下载源码包 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-......

苏牧影子
21分钟前
1
0
BeanFactory和FactoryBean

BeanFactory BeanFactory是ioc容器的顶层接口,里面定义了一些容器基本的功能 类似ConfigurableBeanFatory和ApplicationContext就是比较高级的容器,除了基本的方法之外,还实现了很多高级的...

sendo
23分钟前
1
0
Java并发(9)- 从同步容器到并发容器

引言 容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线...

Ala6
27分钟前
2
0
Java定时器Timer学习之一

种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PLC中,成为SD型定时器 断开延时型定时器:这种定时器是当输入条件00000为ON时...

王怀楼
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部