Your SlideShare is downloading. ×
0
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
当Webgame邂逅erlang
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

当Webgame邂逅erlang

4,525

Published on

webgame与erlang的一点聒噪

webgame与erlang的一点聒噪

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,525
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
117
Comments
0
Likes
11
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×