当Webgame邂逅Erlang庆亮(qingliangcn)http://www.qingliangcn.comhttp://twitter.com/qingliangcn
我们经历过的和目前的状态(明朝传奇)Webgame的特点Erlang的优势Erlang简介Erlang的劣势谁合适用Erlang?我们遇到的问题加入我们!当webgame邂逅Erlang
完全从零开始,0 Erlang基础,0 AS3基础1个半月开发原型2个月调整底层(区域划分的大世界)开发耗时7个月 (正式立项到上线收费)上线2个月内进行了大规模的后端重构与性能优化完全重写了一次客户端的底层最高在线2300,3台机器(=_=),CPUs %17预计可能3000会出现瓶颈(目前的流失还无法达到),进一步优化的空间很大http://web.4399.com/mccq/我们经历过的和目前的状态
如雨后春笋,每年300款以上的webgame问世山寨,大量同质化的产品快速,3-5个月出产品失败率极高,95%失败门槛低,3、5杆枪就敢搞稳定、不卡就能赚钱!Webgame的特点
变量大写开头函数式语言变量一次绑定C = 2,C2 = C + 2.发消息map_11000 ! restart.经典数据类型:tuple{a, b}   {a, b, c}  其他数据类型:atom、list、record、binary、pidErlang简介之语法
入门快:3天入门1天写个聊天服务器一周就能搭框架(基于OTP)、写代码虚拟机语言、跨平台、没有底层的内存操作、基本不会挂掉:9个9的稳定性、众多稳定的底层支持天生面向并发、面向架构编程、轻松实现各种多层架构和分布式架构热更新、热更新、热更新!内置的Nosql支持,同样是分布式的!Erlang优势
Erlang简介之架构
类似于操作系统的调度原理IO和scheduler完全分开的smp支持良好,几乎是线性的性能提升GC,无需关注内存回收,解放开发者底层实现了众多优秀的功能点:100+种内存分配方式epolltimer wheel……Erlang简介之特性
Erlang容错、稳定的快速实现方案简单易用,定义了最基础的几个principle怎么用application  ->  my_app.erl  (start)supervisor   ->  my_sup.erl  (init)gen_server  ->   my_server.erl (init  handle_info …)gen_event   ->   my_event.erl (handle_event)gen_fsm      ->  my_fsm.erl (state1/state2/…)Erlang之OTP
一个gen_server模板
{ok, Socket} = gen_tcp:listen(80, [binary]).{ok, Data} = gen_tcp:recv(Socket,  5000)ok = gen_tcp:send(Socket).gen_tcp:close(Socket).erl +K trueErlang之epoll
global名字服务:global:send(map_server, {fight, FromRID,  ToRID}).基于ets,一次消耗2-3us完全无视网络位置rpc服务:rpc:x_call(NodeName, Module, Method, [Args]).需要知道结点名Erlang分布式之服务
nosql方式的接口mnesia:read(table_name, key)mnesia:write(table_name, record)mnesia:delete(table_name, key)简单的查询mnesia:match_object(table_name, #p_role{level=1, sex=0, _=‘_’})mnesia:select(table_name, [{#p_role{level=‘$1’, _=‘_’}, [{$1, >, 20}], [‘$1’]}]).分布式,访问完全透明性能数据(本机,单核)50W/s+ 脏读写2.5W/s事务读写 Erlang分布式之mnesia
分布式监控树(supervisor)稳定性、可靠性
code:purge(mod_role).code:load_file(mod_role).更简单的方式: c:l(mod_role).热更新
小众语言,招人难,有问题多数需要独立解决在游戏行业里几乎毫无积累纯计算性能不够强劲nif/driver/port/ei/c nodeFunction语言,冲击传统的编程思维方式变量一次绑定,长逻辑比较麻烦try catch风格do_request/do_request2/do_request3风格吃内存机器成本远小于技术与人力成本Erlang劣势(都有办法处理)
C nif接口,例如寻路、AI,可能有10倍差距!C nodeei接口driver /port 方式都是C方式hipe(编译成本机机器码),性能平均提升2-3倍多机负载纯计算的性能问题
新项目希望快速开发和上线能独立解决问题Nothing!谁适合Erlang
Protobuferlang版本性能低下每秒编解码4-5w次(100%CPU)解决方法:简化protobuf协议地图频繁崩溃try catch   get_stackstrace分布式调试center log servergen_server  info接口简化架构,消息统一接口遇到的问题
欢迎加入我们!有东西可以学有钱可以赚we need you!
谢谢

当Webgame邂逅erlang