现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS、CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架构时就需要考虑高可用和抗攻击这两个特性,本文详细介绍了如何基于滴滴云现有的产品组合来设计一套高可用的抗攻击架构。

需要解决的技术点

1. 数据共享

由于棋牌类游戏的数据少,计算量不大,所以完全可以不使用内存缓存,而直接使用Redis 共享内存。用户的所有数据都缓存在 Redis 中,更新也同步到 Redis 中,这样一个用户不管登陆到哪一台业务服务器,都能获得自己最新的数据。

2. 负载均衡

因为棋牌类游戏不分区不分服,在设计服务器的时候,是按世界服的思想去设计,即服务器是一个 n 多台物理机的集群。当用户登陆服务器创建房间时,可能根据负载均衡算法,它可以在任何一台服务器上面。

3. 抗攻击

针对可能发生的 DDOS攻击以及Web应用层攻击,可以考虑购买DDOS高防以及Web应用防火墙。

4. 长短连接

考虑到服务器的负载情况以及用户的状态变化,在用户未进入游戏之前可以采用短连接,进入游戏状态之后采用长连接状态。

系统架构

1. 登录服务器

登录服务器一般需要实现如下的功能:

  • 登录,一般都是需要接第三方登陆,登陆这一块是 HTTP 操作,可以统一提供一个Web服务,用来做登陆验证。因为在登陆时,调用第三方的 HTTP 服务,这个过程可能很慢,如果放在逻辑服务器的话,可能会卡业务逻辑任务。因为不同的玩家业务请求可能在同一个线程中,如果有任务卡了,那么这个任务以后新来的请求都会卡住,导致消息延迟。

  • 获取游戏公告,也放在 Web 服务中。公告一般是游戏登陆的时候向服务器获取一次。把它放在 Web 服务器中,与业务逻辑分离的好处是,当业务逻辑服务器维护或更新的时候,不影响用户的登陆,和获取公告,这样用户体验会好一些。

  • 创建用户唯一的 ID,因为棋牌类游戏服务器是世界服,无分区,所以用户的 ID 必须是全局唯一的。可以利用 Redis 的 incr 方法原子的递增,如果不想被别人根据 userid 的递增推算出有多少注册用户,递增的梯度可以随机,比如每次递增的值从 1 到 1024 中的随机一个。

2. 大厅服务器

大厅服务器实现如下功能:

  • 创建房间,当房间主创建房间时,房间可以创建在下游的任意一台业务服务器上,这里面可以做一些负载均衡策略,给用户返回房间具体落得服务器信息,使得玩家可以登入房间。

  • 查找加入房间,根据房间 ID 查询房间,查找到房间后,获取房间所在的 IP 地址或服务器 ID,把这个房间所在的 IP 和端口返回给客户端,让客户端重新与房间所在的服务器建立连接,使用登陆时的 token 验证用户。

3. 业务服务器

业务服务器实现如下功能:

  • 玩家同屏,玩家同屏是棋牌游戏中的一个重点,对于做过那些大型的 ARPG,或 MMO 游戏的程序员来说,这并不是什么难事。因为同屏就是服务器对客户端的消息进行转发。一个房间四个人,一个人出的牌或操作能被其他三个人同时看到。常用的方式有客户端主动拉取和服务端主动推送方式。

  • 消息保序,创建房间成功之后,接下来的操作都要保证它的顺序性,所以房间需要有一个它自己的消息队列。我们可以把每个房间到达服务器的消息封装为一个任务,把这个任务放到消息队列中,然后有一个任务执行者去按顺序执行这些任务。

  • 玩家状态跟踪,玩家和服务端之间需要有一个连接状态 Keep Alive 的探测,尤其是在移动客户端的游戏版本上,网络连接可能存在不稳定。

其他

很多服务器的长期使用者应该都知道,我们租用服务器,不仅要考虑服务器的配置、机房的防御、机房的带宽、机房的环境,还要考虑机房保证的带宽、机房的后期服务等等,这些都是非常重要的。特别是后期的服务,因为服务器是需要 24 小时运作的,一旦出现问题不能及时解决的话,对使用者的利益都是有无法估计的损害。

滴滴云可以提供上述架构所需要的所有产品,而且价格相对比较低,售后支持及时有保障,是一个可以信赖的选择。

基于滴滴云的棋牌游戏服务端架构设计相关推荐

  1. 中小型手机棋牌网络游戏服务端架构设计(带源码)

    承接自己<中小型棋牌类网络游戏服务端架构>博文,用Golang实现基础架构逻辑后,准备再次谈谈我的想法. 已实现的逻辑与前文描述有几点不同: Gateway更名为Proxy,DBProxy ...

  2. 棋牌游戏服务端架构(总)

    H5Gateway 接入H5客户端 Gateway 服务器仅暴露 Gateway 监听端口,Client 与 Server 之间通讯均通过 Gateway 转发 Client 与 Gateway 仅建 ...

  3. 棋牌游戏服务端开发和设计-苏劲-专题视频课程

    棋牌游戏服务端开发和设计-279人已学习 课程介绍         本门课程讲解棋牌游戏服务端的架构.数据库的设计.数据库异步存储.帐号管理.房间管理等棋牌游戏服务端的核心技术,有意向从事棋牌研发的同 ...

  4. 游戏服务端架构发展史(中)

    出处:http://www.skywind.me/blog/archives/1301 类型4:第三代游戏服务器 2007 从魔兽世界开始无缝世界地图已经深入人心,比较以往游戏玩家走个几步还需要切换场 ...

  5. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 (转载)

    原文链接 一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用,数据库使用MySQL.这个MOBA类游戏是笔者在学习时 ...

  6. railgun游戏服务端架构

    以上是整个游戏服务器架构图,分为三部分.(这里把一个.exe服务器程序称为一个App) 1.网关 GateApp,可以多个 2.路由 RouterApp,暂定一个 3.一般的业务App 这三部分的一个 ...

  7. 谈一款MOBA类游戏的服务端架构设计

    一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...

  8. 游戏系统开发笔记(六)——服务端架构设计

    . http://blog.csdn.net/mooke/article/details/8913051 上回写了写服务端的分层结构,分层是比较宏观上的东西,至于层次间具体的交互方式还得通过各个模块的 ...

  9. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)

    一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...

最新文章

  1. Ubuntu16.04安装qt
  2. PCB产业对ERP软件提出了哪些挑战?
  3. Python IO 基本编程示例
  4. 360互联网技术训练营第七期 -“遇见”PIKA
  5. java传递引用参数
  6. 可变长参数以及面试题
  7. XP系统最大能支持多少内存
  8. 将linux系统制作成iso镜像文件
  9. 一招解决 npm i 安装 node-sass 出现错误
  10. 肥猫学习日记------查找与排序(一)
  11. 知乎:月薪 2~3 万,码农的一天是怎么过的?
  12. 送给80、90后的人生经典语录,别再孩子气了
  13. Ubuntu sudo apt-get 安装下载更新软件包命令详解
  14. JAVA正则表达式验证英文字母、汉字和数字!!!
  15. 改造Kindeditor之:自定义图片上传插件。 外加给图片增加水印效果的选择。
  16. flac如何转换成wav?
  17. SpringCloud Gateway微服务网关实战与源码分析-上
  18. 热水器进水阀与角阀连接处漏水
  19. gettime 函数 java,Java ZipEntry getTime()用法及代码示例
  20. Linux安装gitlab教程

热门文章

  1. HMI智能座舱自动化测试的技术应用
  2. oracle 单机改rac,把oracle rac 转化作单机数据库
  3. uni-app或者小程序爬scroll-view标签中white-space: nowrap的坑
  4. Window平台Qt软件打包发布方法
  5. 【建议收藏】面试官会问的位运算奇淫技巧
  6. 穷举法解八皇后问题和凑硬币问题
  7. mysql的所有聚合函数_MySQL常用聚合函数详解
  8. Python 列表的列表
  9. .chm文件打开显示找不到网址
  10. vscode 好用的插件推荐