战魂小筑

谈论群:309800774 知乎重视:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 主页 :: 新漫笔 :: 联络 :: 聚合  :: 办理 ::
  252 漫笔 :: 0 文章 :: 506 谈论 :: 0 Trackbacks
为了编写依据cellnet的新一代游戏服务器结构,最近深入研讨微服务,ServiceMesh等概念。研讨进程中对Web和游戏两种服务器架构规划有一些心得,编写并记录下来。(下文中,Game表明游戏服务器,Web表明Web服务器) ``
状况缓存
所谓状况缓存,就是在内存而非专业数据缓存服务器(如redis)中保存和处理逻辑数据,手动编写此进程较为繁琐可是功率较高,但随着状况逻辑杂乱性和并发、扩容问题提出,状况同步会变得越来越杂乱。
Game:
强交互性的服务器类型需求在服务器做缓存,逻辑编写也较为简单,无需处理业务并发问题。例如:组队,匹配,战役逻辑。服务器不能随意重启。
弱交互性的服务器类型可合作redis做成无状况服务器,例如:养成,技能晋级,收取物品等。服务器随时支撑重启。
游戏服务器为了进步功能,前期一切服务器都是运用状况缓存写法编写,特别是MMORPG这类强交互的游戏服务器尤为严峻。
Web:
均为无状况服务器,弱交互。运用业务办法处理并发逻辑,例如:买卖,下单等。
推送,独自发送
这儿说到的所谓推送,独自发送是与RPC差异的通讯办法。RPC要求恳求必须有回应。而推送独自发送则更像是告诉和播送,无需意图方回来任何音讯。
Game:
找到服务器的Session,直接Send
经过中转服务器,或称为中心服务器进行注册/播送
客户端的model数据需求更新时,服务器会自动推送音讯。
游戏服务器没有严厉的RPC规划需求,推送和独自发送较Web服务器更多。并且游戏服务器多运用长衔接,所以自动推送也比Web服务器来的便利一些。
Web:
将推送做成专有的服务,并做排队和并发处理。
可用性
听说过游戏停服更新,付出宝服务器在刷二维码时停服了可必定被骂惨吧。Web对服务器高可用性要求很高,游戏尽管也重视服务器安稳性和可用性,可是因为版别迭代更新频频,停服更新反而能取得玩家承受。
Game:
游戏对可用性要求不高。
游戏大版别更新时需求停服更新。支撑热更新技能的服务器(例如Erlang,Skynet)仅运用热更新修正bug,很少直接更新新版别。
不是一切的游戏服务器支撑动态增加服务器。
Web:
极高的可用性,服务不允许停服更新,运用蓝绿及灰度办法更新服务器。
随时能够横向扩展服务器,进步服务器容量和承载。
衔接及传输
均运用TCP传输协议,游戏服务器重视功能,自有协议及二进制协议运用较多。
Web重视兼容和接口友爱,运用JSON格局较多。
Game:
运用长衔接,需求从逻辑层维护衔接状况及处理服务器不在线状况
运用自有封包格局,大部分运用protobuf或二进制流格局。
Web:
微服务大部分运用短衔接,grpc支撑http2长衔接
运用json编码便利调试和版别兼容。
流量约束
人数多了,任何服务器都扛不住,流量约束和登入约束能有用维护服务器安稳。
Game:
单服有人数约束,能够经过GM后台设置挡墙,超越无法进入
Web:
限流器中间件,能够准确到服务操控流量
断流,避免雪崩
Game:
游戏没有,也不需求这种概念,游戏恳求不会忽然升高,即使有,也经过GM后台人为操控
Web:
断流器中间件
服务发现
怎么找到服务器地址。
服务有变化时,经过Watch体系告诉订阅者更新本地缓存
服务器没有变化时,运用本地缓存找到服务地址
Game:
游戏服务器相互依靠复用只在很小的范围内,因而无需在不同言语不同进程服务间取得地址,大部分在配置文件中填写各服务的IP及地址即可相互拜访。
前期游戏自己编写服务器状况及地址发现服务。
有用redis做服务发现
Web:
运用服务发现体系,分布式布置。无需依靠配置文件
网关需求
Game:
网关处理客户端上下线告诉,心跳,保持衔接,转发,播送上下行封包
Web:
依据恳求地址路由,无上下线概念,无心跳。播送经过音讯推送体系完结
因为笔者从事游戏职业,对Web服务器概念在逐步了解中,若有过错和缺乏请各位大佬指出。
自己新书《Go言语从入门到进阶实战》,生动的言语,比如带有各种彩蛋,轻松了解Go言语特性,更有cellnet结构分析解密
https://search.jd.com/Search?keyword=go%E8%AF%AD%E8%A8%80%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6%E5%AE%9E%E6%88%98&enc=utf-8&suggest=1.def.0.V02&wq=Go%E8%AF%AD%E8%A8%80%E4%BB%8E&pvid=145d55a92cab4b07b71326f8beb1700b
posted on 2018-08-29 11:16 战魂小筑 阅览(1240) 谈论(0)  修改 保藏 引证 所属分类: 游戏开发技能网络 服务器技能Golang