两万人在线服务器架构和一些公有云使用心得

感谢各大公有云不断的技术创新,使得人(zhi)丁(you)稀(1)少(ge)的我们,能够在三个月内完成支持在线2万人的服务器组,以支撑即将到来的江湖X资料片“世界服”。�

本文主要写给程序猿看,所以会有大量的晦(zhuang)涩(bi)语句,不感兴趣的还是跳过吧。。吐槽在最后

正文

本文主要是短句子的罗列。

组成

我们一个标准的服务器组,由以下部分组成:

  1. 两个负载均衡,一个挂目录服,一个挂游戏服;负载均衡由阿里保证双可用区高可用;
  2. 至少两个目录服ECS,分别在两个可用区;
  3. 至少两个游戏服ECS,分别在两个可用区;
  4. 至少一个管理服ECS;
  5. 至少有一个实例充当所有ECS的备用;
  6. 三个Mysql数据库,账号mysql,数据mysql,统计mysql,阿里保证双可用区高可用;
  7. 两个Redis,数据redis和公共redis,阿里保证双可用区高可用;

要点

  • 为了与客户端代码语言的一致性(U3D),我们后台都是用.Net实现的,所以所有实例都是windows实例,逼格比linux少了90%,易用性提升90%(PS:VS是世界上最好的IDE);
  • 将所有在线玩家的存档数据(约500kB/人),放在一个高性能的支持事物的数据redis里面,由这个redis来充当“公共内存”,给多个游戏服ECS使用;
  • 玩家离线一定时间之后,将存档数据序列化存入Mysql;玩家再上线的时候,从mysql取出数据反序列化放入redis;
  • 所有的统计数据和不需要多次查询的数据,放入一个专用的“统计Mysql”;
  • 所有的玩法级别的东西,例如PVP,世界boss,好友系统等,都放入一个redis里面,我们称为“公共redis”,这个redis其实是当数据库使用,redis本身就支持持久化(用阿里默认的备份功能就行);
  • 所有服务器配置放在mysql里,目录服和游戏服初始化的时候会去数据库加载配置;
  • 目录服处理玩家注册、登录,以及游戏版本、服务器状态和热更包的下发;
  • 游戏服主要是保持与玩家的socket长连接,并与mysql/redis交互数据,自身内存不保存任何状态信息;
  • 管理服主要是用来管理所有的mysql和redis,并计算一些玩法级别的东西,例如PVP结算,世界boss结算,客服后台,邮件公告等;

优缺点

  • 游戏服ECS不保存任何状态,不需要考虑同步、加锁等问题,随点随用,一秒重启不是梦(手游里,秒级的数据丢失是可以接受的);
  • 通过redis和mysql的原生事务来保证原子性,不需要coding来实现,省时省事效率高,虽然性能低下,不过性能,够用就行;
  • 充分利用公有云的高可用性和一切便利性,能不自己做的坚决不自己做,能花(xiao)钱解决的坚决不花时间;(这一点大家算算程序猿工资就知道哪个划算了,现在一个实例才多少钱);
  • 参考上点,这么做的一个缺点就是花费稍微大了点(多了redis的花费,很贵;多了一些实例,因为CPU没用满,可以用性能换空间),从一千块一个月变成了两三千一个月,一年多出了一个程序员的月薪(手动滑稽);

Redis相关

  • 江湖X每个在线玩家,对“公共redis”,会产生大概每秒2-3的QPS(最早的设计,好蠢,还不能改);
  • 阿里云和Ucloud目前的主备版redis,能支持6万的QPS;
  • 单台实例连接redis,能达到2万的QPS,四台实例的时候,每台1万5的QPS;
  • 一个玩家在redis中的数据,平均为500k(好蠢,同上);
  • 所以,一个16G的redis,能支持1.5-2万在线,3万左右的数据保有量;
  • 以20万日活来计算,玩家离线3小时,就需要把数据从redis移到mysql;
  • 单台实例能支持5000-7000的在线用户;
  • 如果单台16G实例扛不住,考虑加多个redis,只需要维护一个用户所在redis的表就行,一个用户只能在一个redis里;
  • redis尽量用hash,能比key-value快一半;
  • servicestack.redis,推荐4.0版本以上,事务回调很完善;
  • 阿里不支持sync命令,无法自建slave实例;Ucloud支持sync命令,所以slave可以走起;
  • Ucloud的redis没有密码。。没有密码。。。所以不小心一个flushall,就哭吧,适合小公司;
  • 阿里最近上了集群版的redis,最小16G,QPS令人发指(几十万),不过不支持事务。。。。如果自己在程序端实现了redis事务而不用原生事务(米哈游就自己写的),那么用集群版redis,几十万在线不是梦啊,以后会不会是一个集群redis,挂着几十台1核1G的实例,最便宜的1核1G只要33/月,10台330,能跑几万个TCP长连接;

网络相关

  • 由于主要的计算都发生在客户端,因此江湖X的网络负载很小;
  • 历史遗留原因,我们采用Scut来做多用户管理和网络分发(socket),并且到目前为止,表现不错;
  • 采用负载均衡,并且按量付费,是目前最适合我们的解决方案;(负载均衡一般都能支持几十万的TCP连接)
  • 热更包地址由目录服下发给客户端,客户端去CDN上下载;
  • 阿里的cdn越来越好用,秒级回源,不过有时候也会挂掉(今年挂过一次);
  • 阿里出过一个事情,就是某台实例的IP被中国移动给ban了,导致所有移动玩家上不去服务器;
  • 一般玩家说掉线频繁,第一反应都是问对方,“你是不是中国移动4G“,95%都是;

Mysql相关

  • Mysql还挺贵的;
  • 一个用户一秒才0.3次QPS,所以2核4G的mysql应该够我们用了;
  • mysql和redis可用区切换,程序要自动重连(感谢servicestack);半年内,有一个mysql切换过一次;
  • 定期看一下慢日志,说不定就找到一些漏网之鱼没有建索引;
  • Ucloud的Mysql,回档会损坏blob数据,原因未明,需要问一下;

计算相关

  • 除了rank系统,计算量都几乎没有;
  • 数据从redis移动到mysql计算量比较大,交给管理服;
  • rank系统的战斗计算,需要在服务端进行,准备引入MQ,通过MQ来进行计算任务的下发和结果的采集;
  • 一些定点结算(遍历所有玩家)的任务,都在管理服做,例如排行榜结算、世界boss结算,活动结算;
  • CPU比较过一次,各家相同价位都差不多;

磁盘相关

  • 对磁盘I/O没有任何要求,所以阿里云用起来没有问题(阿里云的磁盘I/O就是辣鸡,ssd盘都比不过ucloud的普通盘)

各家吐槽

  • 阿里,对磁盘没有要求的话,阿里是最佳选择了,稳定性,易用性很好,价格不贵,就是服务差,店大欺客,买了就不能退(包月),退还要手续费(包年),以前吃不完的还不能打包(不能降配),就是一黑店啊;另外,高可用和高并发,阿里说第二,没人敢说第一;
  • Ucloud,阿里降价之后,价格大概是阿里的80%。优点很明显,服务好,还有,包月包年机器随时可以退,并且只计算发生费用,这简直逆天啊;缺点也很明显,可用区少啊。。全国只有北京有多可用区,还资源紧张;我们需要的华南只有一个可用区,只好挥泪斩马谡;还有就是太灵活,以致不敢用,特别公司大了,风险比较大,例如mysql给root权限,redis无法设置密码等;
  • Azure,听说用它的人才能准确发音,反正我发不准。这是世界上唯一的一�个公有云,产品文档是由程序猿完成的,并且,还是机翻成的中文。这都还好,增加的是学习成本,但是,价格是阿里云的两倍是几个意思?
  • AWS,如果要有海外服,我们首选就是AWS,没什么好说的;额,同理,国内的AWS,也没什么好说的,”不敢“用;并且,机房在北京和银川,离广东太远了,电信南北光纤,最近每个月要故障两次,丢包15%,电信威武;
  • 华为云,功能少,贵;
  • 比格云,宣传得很有逼格,不敢用,有待时间验证其稳定性;
  • 京东云,联系过,没叼我们;
  • 腾讯云,持续关注,有可能会要用(应用宝上游戏必须架在腾讯云上);
  • 百度云,等等,这不是存小黄片的么?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容