基于Erlang的MMO链接管理服务器侯明园御风行数码科技有限公司目录问题MMO链接管理的特点与需求整合Erlang如何整合入到现有集群系统?测量建立基于erlang的压力测试环境实现Erlang/OTP如何简化编程?优化此应用出现的性能问题,以及如何调优展望erlang在网络游戏开发中的潜力点问题MMO链接管理的特点链接管理的应用场景MMORPG游戏服务端结构中通常会有一个链接管理服务,这个服务是实际逻辑服务器与客户端之间的桥梁和管道,可以认为集群内是安全的可以预测的计算环境,外部是实际的不安全的计算环境管理集群中所有的来自client的链接,将从客户端收到的消息转发到对应的逻辑服务器,将逻辑服务器收到的消息转发到相应的client,发出去的包大部分的包是广播,链接服务器负责处理广播。路由广播安全MMO链接管理的需求高性能路由和广播的要尽可能快,保障游戏的流畅感觉服务端频率10HZ,响应时间100ms高并发连接多,能处理的链接越高越好,MMO服务器承载的人数对游戏有重要的意义大于5000+高吞吐量输出远远大于输入收到的数量少,需要广播的数据多高可用性出故障时间要少恢复时间要短95%整合erlang如何整合入到现有集群系统?整合进入原有的监控系统数据库访问mysql数据库支持兼容原有网络协议原有协议是简单二进制协议引入协议定义语言,自动生成actionscript,python,C++,erlang协议编码解码代码兼容原有管理工具状态报告维护操作,重启,关闭,查询关于整合的归纳与总结定义通信标准如果公司的应用程序想要扎根网络应用领域,及时你是第一款产品,建立的一个网络协议的规范和标准,定义语言,也是非常有必要的。Protobuf,asn,CERLSDL未来可以进一步建立一种行业标准测量压力测试环境的建立Erlang之前C++&pythonClient缺点远程连接10+机器管理困难状态监测困难代码发布困难压力测试环境的建立(续)PowerbyErlang/OTPrunerlasservice一个节点集中控制发布代码:热代码替换nl(MODULE).启动关闭[rpc:call(N,stress,start,[]]||N-nodes()][rpc:call(N,stress,stop,[]]||N-nodes()]采用ETS存储监测信息,不用编写任何代码即可方便查看wxPython绑定,非常快速设计跨平台监控GUI关于测量的归纳与总结测试先行Erlang非常适合搭建分布式测试系统开发快速平台丰富工具完善管理简单实现Erlang如何简化编程?实现V1一个进程对应一个链接一个进程对应一个客户端TCP链接一个进程对应一个到逻辑服务器的链接进程实现采用OTP状态机行为所有Client进程由一个监督进程管理所有Service进程由一个监督进程管理简单的实现比较C++代码行数:7924逻辑结构方面比较单进程状态机性能6000Erlang代码行数:2000逻辑结构进程表示连接状态机状态减少了:采用进程来模拟客户端之后模式匹配使代码更加清晰otp行为模式框架简化程序性能3000优化调优过程性能阶梯一般设计未经优化的C程序一般设计未经优化的Erlang程序良好设计优化过后的Erlang程序良好设计优化过后的C程序优化案例1:数字ID查找PID问题每个连接有一个数字ID,逻辑服务器的广播包里面包含一个数字ID类别和数据,网关服务器通过ID查找到对应PID,这个查找过程一度成为瓶颈方案性能对比查找方案测量结果ETS7DICT30广播,过滤25Register1展望erlang在网络游戏开发中的潜力点热部署网络游戏服务器维护通常会导致玩家流失如果Erlang的热部署能够有效应用那么有可能极大减少服务器维护的频率和时间AI有AI实现采用Lua协程,StacklessPython。Erlang进程也有类似的特点运营接口整合工具