您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > QConShanghai2013-[陈超强]-[并发编程的思想变革]
QCon北京2014大会4月17—19日@InfoQinfoqchina特别感谢QCon上海合作伙伴陈超强并发编程的思想变革hrm@4399.com4399–逍遥工作室/2013.111游戏并发编程的现状2Web和游戏技术的对比4并发编程与跨服设计3并发编程的总结和设计思路单个CPU的速度提升缓慢多核时代到来其实大家都知道,但是游戏开发上并没有太大的转变并发是趋势4399–逍遥工作室/2013.11C++写的单进程游戏服务器也能撑很多人进程的创建、通信、销毁、管理麻烦数据原子性问题非常复杂功能的快速迭代,无暇深入研究游戏开发中没有对人数上限做硬性的要求并发发展障碍4399–逍遥工作室/2013.11网关进程数据库保存进程寻路、AOI可视判断进程聊天进程场景进程现有网游,有很多并发游戏服务器架构的尝试但并没有固定的模式,发展相对缓慢难以通过加机器来提高单服承载量游戏并发设计案例4399–逍遥工作室/2013.111游戏并发编程的现状2Web和游戏技术的对比4并发编程与跨服设计3并发编程的总结和设计思路Web负载均衡DNS轮询反向代理各种缓存:memcache、redis数据库与负载均衡IP层的负载均衡LVS其他能支撑百万数据量级的访问加机器即可提高单个站点的承载量4399–逍遥工作室/2013.11Web服务逻辑特点大部分逻辑是往客户端推送数据业务基本上只跟单个用户有关用户间的交互较少,或者交互逻辑简单1个用户1个进程,增加机器即可提升承载4399–逍遥工作室/2013.11思考其实大量的游戏逻辑都只跟单个玩家有关,包括网络、数据库、心跳、任务、背包、各类养成玩法等等假如1个玩家1个进程,加机器数即可提高上述功能的承载(类似于数据库横向切分的优化思路)交互类强的系统需要重新设计,比如聊天、战斗、交易、组队、帮会等思考1.2.思考思考3.4399–逍遥工作室/2013.111游戏并发编程的现状2Web和游戏技术的对比4并发编程与跨服设计3并发编程的总结和设计思路建立进程创建、管理方便的机制一套简易的可遵循的并发设计思路释放你的并发思路4399–逍遥工作室/2013.11进程管理机制1.轻进程.2.创建进程:spawn(function)3.进程间的通信发送消息:Pid!{data}接受消息:receive语言级别的进程管理机制(以erlang为例)在语言层面减少进程创建、管理的工作(或者自己写库)4399–逍遥工作室/2013.11并发设计思路单进程与多进程编程环境的区别多进程的限制4399–逍遥工作室/2013.11单、多进程编程环境的区别所有数据都在同一个进程空间里,所有代码都跑在同一个进程里单进程任何变量都可以放到任何进程,任何代码都可以在任何进程上跑。排列组合非常多多进程4399–逍遥工作室/2013.11多进程的限制1.数据的原子性。数据放到哪个进程、代码在哪个进程跑受这个限制2.数据操作可以分为两类一次性数据操作非一次性数据操作多进程的限制4399–逍遥工作室/2013.11引子复印10000张开会资料单进程做法:1台复印机复印10000张多进程做法:1台复印机复印N张,再分别给N台复印机复印4399–逍遥工作室/2013.11一次性数据操作一次性的数据操作1.像打印这种逻辑,是不受原始数据变化而改变。这类操作有纯写操作纯读操作2.没有原子性的问题,可以开进程去做例子:足球比赛在球场上进行,通过广播,成千上万的观众在电视前看。(实际上场景同步属于这类操作)4399–逍遥工作室/2013.11游戏中的例子Socket数据的收发数据库的保存聊天地图信息的同步Log输出这些功能都属于一次性数据操作,类似于web的数据下载业务,可以放心的开多个进程去做4399–逍遥工作室/2013.11非一次性数据对这个数据的操作,只交给一个进程,保证原子性数据既读又写的情况check,calc,set(检查、计算、修改)再细一点,可以分为以下操作check,set放在一个进程,calc可以放到别的进程进行可以优化为4399–逍遥工作室/2013.11A玩家攻击B玩家,B的HP下降•单进程的做法•多进程的做法?HP例子4399–逍遥工作室/2013.11总结对所有业务流程进行梳理,确认每个业务对某个变量的操作类型(读写)1.2.确定数据放到哪个进程,check和set都交由同一个进程去做,calc可以考虑新开进程去做确定哪些业务对数据是一次性的操作,可以新开进程去处理这些业务3.4399–逍遥工作室/2013.111游戏并发编程的现状2Web和游戏技术的对比4并发编程与跨服设计3并发编程的总结和设计思路并发思路与跨服设计任何变量都可以放到任何进程,任何代码都可以在任何进程上跑并发思路大部分的游戏功能跟跨服没有关系,实际上涉及到的功能只有:战斗同步相关、聊天、组队等等,以及跨服玩法本身。用并发的思路进行修改即可跨服玩法4399–逍遥工作室/2013.11页游的跨服设计案例客户端始终和同一个服务进程保持着通信,socket一直保持着连接跨服玩法中,可以跟本服玩家聊天、发邮件、交易,跟没跨服的情况一致一个玩家的大部分数据始终存在于同一个进程(机器),不存在着数据同步的操作再加强跨服玩家之间的交互并不困难4399–逍遥工作室/2013.11补充端游、页游、手游的服务器架构都是类似的客户端也可以考虑,只是可用的CPU少很多4399–逍遥工作室/2013.11网络稳定性的影响单台机器多个核,进程间的通信基本不会失败,基本都会成功单台机器多台机器,进程间的通信可能失败的概率较高,编程时考虑的异常情况变得复杂避免要求IDC提供更好的服务,保证网络不断多台机器4399–逍遥工作室/2013.11ThankYou!谢谢聆听,欢迎交流
本文标题:QConShanghai2013-[陈超强]-[并发编程的思想变革]
链接地址:https://www.777doc.com/doc-3287161 .html