- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
使用Golang实现万人同服的游戏服务器
- 游戏服务器开发面临的挑战
- 服务器开发对语言的需求
- 使用Golang进行游戏服务器开发
- 成功案例
展开查看详情
1 .使用Golang实现万人同服的游戏服务器 游族·袁锋峰
2 .目 录 C O N T E N T I N D E X 00. 游戏服务器开发面临的挑战 01. 服务器开发对语言的需求 10. 使用Golang进行游戏服务器开发 11. 成功案例
3 .00 游戏服务器开发面临的挑战
4 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 500ms响应延迟的红线 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒10次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
5 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 服务器演算 Request Response 我眼中主流互联网行业的业务模型
6 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 服务器演算 MMORPG的上行/下行消息量对比 平均为1:5 极端情况下可以到1:50 非主流互联网行业(游戏)的业务模型
7 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 服务器演算 1. 模拟的世界中的定时事件 ① 时间流逝-新的一天 ② 技能buff效果 ③ …… 2. 模拟的世界中的AI行为 ① 巡逻 ② 发现新目标 ③ …… 3. ……
8 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 服务器演算 MMO MMO MMO RTS ARPG 相 SLG 互 影 响 MOBA ARPG 的 范 围 RTS 卡牌 模拟的细节丰富度
9 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 极低的延迟忍受度,500ms响应延迟的红线; 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒30次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
10 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 高并发 TPS = 并发数/平均响应时间 = 10 0.02 5 / /0.01 250 0.01==500 1000 10ms 20ms 我眼中主流互联网行业的高并发之道
11 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器高并发 1. 提高响应速度 单逻辑线程 2. 增加并发数量
12 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器高并发 分区分服
13 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器高并发 全区全服
14 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器高并发 分区分服实际案例
15 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器高并发 全区全服实际案例
16 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 极低的延迟忍受度,500ms响应延迟的红线; 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒30次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
17 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 数据读写频度高 //购买道具 相关的模块:6个 func (dm *BlackMallMgr) uint32) cl.RET { if dm == nil {BuyGoods(goodID 相关的需要存储的属性:8个 log4go.Warn("[BlackMallMgr] BuyGood dm nil") return cl.RET(entity.RET_ENTITY_NOT_EXIST) } //安全检查 if dm.ptrUser == nil { log4go.Warn("[BlackMallMgr] BuyGood ptrUser nil") return cl.RET(entity.RET_ENTITY_NOT_EXIST) } //安全检查 if dm.outData == nil { log4go.Warn("[BlackMallMgr] BuyGood outData nil, UID:%d", dm.ptrUser.UID()) return cl.RET(entity.RET_ENTITY_NOT_EXIST) } //功能是否开启 if !dm.ptrUser.UserModuleM.RoleMgr().UserFunction.IsFuncOpen(uint32(entity.FunctionId_FunctionId_BlackMall)) { log4go.Warn("[BlackMallMgr] BuyGood func not open, UID:%d goodID:%d", dm.ptrUser.UID(), goodID) return cl.RET(entity.RET_FUNCTION_NOT_OPEN) } //物品的配置信息是否存在 cfg := configparse.ParseShopConfigM.BlackGoodInfo(goodID) if cfg == nil { log4go.Warn("[BlackMallMgr] BuyGood config nil, UID:%d goodID:%d", dm.ptrUser.UID(), goodID)
18 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 极低的延迟忍受度,500ms响应延迟的红线; 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒30次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
19 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 高可用 1. 极低的延迟忍受度,500ms响应延迟的红线; 0ms < 延迟 <=200ms 2. 30分钟停止服务意味着永久流失 200ms < 延迟 <=500ms 500ms < 延迟
20 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 极低的延迟忍受度,500ms响应延迟的红线; 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒30次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
21 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 高爆发 游戏的发行方式和热度 会导致玩家、工作室在开服的时候爆发式涌入
22 . 0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 框架层面的挑战 011 高并发 十万级别PCU 100 百万级别的TPS 高可用 玩家对服务的可用性非常敏感 001 极低的延迟忍受度,500ms响应延迟的红线; 101 服务器演算 30分钟停止服务意味着永久流失 高爆发 50,000每分钟的玩家新增数量 游戏世界的模拟和同步,产生 大量的服务器演算和主动的信 息Push 010 数据读写频度高 单玩家每秒30次的请求频度 单次请求平均5个以上关键属性的读写 110 高迁徙率 高达60%以上的次日流失率
23 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 高迁徙率 目前通常情况下,游戏的次日留存平均在40%左右 三日留存平均在20%左右 七日留存平均在10%左右 随着资料片或者拉回流活动,又会重新被激活
24 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 业务层面 001 需求易变 从策划脑袋里面直接出来的方案,需要做调 整的几率很高。而且需要原方案90%以上的完 成度之后才能看出来是否需要调整 011 需求复杂 战斗逻辑、AI、3D数学… 010 需求常增 双周一个迭代,至少2个大功能,50 个功能优化
25 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 需求易变
26 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 需求常增
27 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 需求复杂
28 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器的设计模式 扩展层(Extension) 内容生产者的贡献 应用层(Framework) 通用的游戏逻辑 组织层(LoadAssign) 服务器角色和负载分配,服务发现,RPC 物理层(BaseLibrary) 网络、线程、存储等底层功能
29 .0 0 . 游 戏 服 务 器 设 计 面 临 的 挑 战 游戏服务器的设计模式 Config ID1 Data1 ID2 Data2 HandlerForMsgA HandlerForMsgC HandlerForMsgB ManagerA Cache ManagerB GUID1 Data1 RPC GUID2 Data2 GUID3 Data3 Database Dispatcher Network