欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Joel Reymont对Erlang的抱怨

程序员文章站 2022-07-15 08:19:36
...
Joel Reymont开发了OpenPoker─一个有超强伸缩性的在线多游戏玩家系统,翻译见这里

“OpenPoker是一个超强多玩家纸牌服务器,具有容错、负载均衡和无限伸缩性等特性。源代码位于我的个人站点上,大概10,000行代码,其中1/3是测试代码。”

他昨天在Erlang论坛强烈的抱怨Erlang的一些缺陷。在他自己的blog上,他使用了更强烈的词表达了他的不满:Erlang sucks,而且还带着一个感叹号!

他主要抱怨了Erlang的支持工具不够,当他成功的用Erlang开发了一个超稳定超可伸缩的游戏服务器OpenPoker后,玩家数量不断增长,他也计划给游戏添加更多的功能,例如一个Flash客户端。这时他遇到了麻烦,他开发用的工作站是一个Mac Pro  2x2.8Ghz Quad Xeon,12G内存,1T多硬盘空间,7200RPM SATA,Erlang/OTP是R12B3, SMP 和kernel poll。参数如下:
5.6.3 [source] [64-bit] [smp:8] [async-threads:0] [kernel-poll:true]

他的麻烦之一是:他做不到透明的运行Erlang系统。没有像样的工具可以内部监视系统(peering inside),没有一个可用的工具。

使用别的语言我们可以剖析(profile)系统、修改系统、评估系统性能以作评价,但是Erlang不行。

刚开始开发OpenPoker时,他到处用到了OTP,玩家、游戏、底池(玩家们的下注形成的,供最后的赢家获得)等等统统都是gen_server线程。几乎到处都使用到了Mnesia事务。
随后发现当有2~3千的玩家同时在线玩的时候遇到了问题。

他使用了专门的测试: 释放上千个机器人连接服务器然后根据脚本进行游戏。但他想在一个服务器集群的数十万个VM上,每个单独VM上有更多的(上万个)机器人进行测试,这样便于找出问题优化系统。

Erlang Efficiency Guide建议使用fprof作为工具。他运行了这个工具,发现运行的结果集不能在他的12G内存的机器上进行处理。这是在fprof工具运行数天后发现的,因为fprof数据文件将近100G大小,由于频繁的swapping使机器变得不稳定。

fprof使用ets表分析追踪结果,而ets表必须都装载到内存里。

他不得不简化了他的测试以便能使用fprof分析结果。
最终的fprof数据仍然太原始分析起来困难重重。没有好的办法通过得到运行时系统的状态。他只能大概的推断出:也许他用到的线程过多导致的问题。

他还认为写gen_server代码不利于系统剖析(profiling),他不得不重写gen_server clouse。

他把gen_server作为数据结构,例如底池、limit、牌堆等。一个牌堆可以接收消息划出一张牌,这个消息就像是一个函数调用。

他还谈到了Mnesia表和ets的问题

最后他悲观的认为他很难将他的系统扩展到能容纳10万用户的规模。
相关标签: Erlang