2006-11-22

使用erlang 开发 web的选择

关键字: erlang web
    最近看 Joe 的blog,并且研读他的那个  wiki 的例子程序。Joe就是那篇著名的  Yaws vs Apache的作者。不过, yaws 我始终还没有搞太明白,毕竟多了一层template,erlang程序本身还没搞熟呢。
    在那个wiki里面, Joe用了pico 这个 erlang web server,想来和 RoR 中的 webrick 角色类似。这个 pico 就是一个小的web服务器,erlang程序启动它之后,通过 event_handler 的方式处理 url dispatch,这里用了 pattern match 的方式,url 对应 erlang函数,处理起来倒也自然。
    现在还没有看到关于 pico 的性能测试方面的数据。

    其他通过Erlang开发web的方式还有: CGI,  yaws, erlyweb ,另外还可以作为 PHP等脚本的后台,通过socket进行通讯。现在 erlang的大型站点还真没有听说过,估计比 django的还要稀缺。
    考虑到 erlang 在并发性能上的优势,比较适合做大型的论坛社区。
评论
dcaoyuan 2007-05-26
cookoo 写道
不知道erlang的java port稳定性如何?


ErlIde很多地方用了jinterface,稳定性似乎有问题。

我在ErlyBird里用了一些,还可以,但在Erlang的String(List)转换到Java类型时似乎有个Bug,我没时间去查,等今后吧。
cookoo 2007-05-26
不知道erlang的java port稳定性如何?
Elminster 2007-05-25
Trustno1 写道
另外说道,并发/并行.我觉得很多人都搞不太清楚之间的差别.具体的区别我就不说了.我只是想说,在SMP架构上去做并行任务实际意义不大,虽然你可以通过OpenMP之类的库实现并行优化,但是实际上尽管CPU可以独立运行,但是I/O,memory都是仍然是共享的,这对于真正的并行计算来说是个致命伤.除非你用Numa,那情况又两说了,不过Numa那种东西很奢侈吧,现在google的PC farm大行其道的年代,谁用Numa就真有些人傻钱多速来的嫌疑了.



要不了多久,每一台计算机都会是传统意义上的 SMP 和 NUMA 系统了。多核 CPU 势不可挡,而当核心数量达到一定程度的时候(Intel 打算在几年内推出 80 核的 CPU),某个核心独享的 cache 甚至是内存也会不可避免。

到时候会很有趣吧,怎么样同时利用好多核 CPU 和 PC 集群的并行能力。我猜想,会有新的奇迹传说诞生的。
Puras 2007-05-25
wzgme 写道
turing 写道
像Second Life那样的虚拟社区,大家有没有关注过?它的后台语言好像叫Linden。


确定?

只知道Linden Lab是一个公司.

从招聘来看底层是C++/OpenGL,Web是PHP


SecondLife里的脚本语言是Linden
用这个可以自己在里面创建物品等
后台语言好像不是
Trustno1 2007-05-25
另外理论上说Functional的程序可以天然并行计算,很多functional的特性像lazy evaluation,好像就是专门为并行而量身定做的.比如说
result;
for(int i;i<100000;i++)
{
result+=power(i,3)
}

这样的代码,用OpenMP无论如何是不可能对其做任何优化的.但是如果你有惰性求职就可以.不过这目前也仅仅停留在理论上,实际使用FP语言的虚拟机需要为这些Funtional特性寻找特别的优化算法.这目前看来也只能期待数学上的突破了.
Trustno1 2007-05-25
AvinDev 写道
T1觉得Folding@Home这种方式的分布式运算,是否比SMP架构更适合?现在游戏主机和一些显卡的计算能力非一般的猛。

这实则上是分布式结构,和SMP/Numa已经没有关系了,分布/并行/并发的概念区别还是很大的.我不清楚Folding@Home具体的结构,不过我猜想这是一种SPMD并行,这其实是一种比较简单的并发模式了,每一个node上运行的计算程序相同,然后把一条蛋白质上的数据切成几小块,分给不同的节点做.每一个节点上运行的程序相同,但是不care具体的计算机是什么样的.但是事实上能做到SPMD的应用是不多的,大多数的应用都是MPMD,如果你要写MPMD的话,网络通信上的问题可能已经是优先级很低的问题了,最主要的工作是小心的设计并行算法.Folding@Home这种方式也就很难奏效,因为很有可能某些计算机由于配置比其他的低,而拖慢整个计算.
AvinDev 2007-05-25
T1觉得Folding@Home这种方式的分布式运算,是否比SMP架构更适合?现在游戏主机和一些显卡的计算能力非一般的猛。
Trustno1 2007-05-25
另外说道,并发/并行.我觉得很多人都搞不太清楚之间的差别.具体的区别我就不说了.我只是想说,在SMP架构上去做并行任务实际意义不大,虽然你可以通过OpenMP之类的库实现并行优化,但是实际上尽管CPU可以独立运行,但是I/O,memory都是仍然是共享的,这对于真正的并行计算来说是个致命伤.除非你用Numa,那情况又两说了,不过Numa那种东西很奢侈吧,现在google的PC farm大行其道的年代,谁用Numa就真有些人傻钱多速来的嫌疑了.
AvinDev 2007-05-25
MMORPG,就服务器端来说,我认为从架构上,都是差不多的,从实现角度,我谈谈我的看法。
在通信框架方面,Erlang会方便很多,那篇OpenPoker的文章主要是讲的分隔的休闲游戏,各个服务器之间没有太大的关联。MMORPG,如果是大世界,会涉及到跨服务器的通信,这方面也是Erlang的强项。
可能会有问题的是人物交互设计上,按照Erlang Way,对于游戏里面的人物,都要设计为Process,而不是C++里的Object。各个Process基于Message来进行并发的活动和交互,这样设计对绝大多数人来说还是比较陌生。
还有就是游戏逻辑上面,貌似大部分网游都是用python,lua这样的脚本来写的逻辑,如果要用Erlang开发,用FP风格写这些比较灵活的逻辑,可能会比较痛苦。

国外已经有人研究过Erlang开发MMORPG的可行性,这里顺便将ppt放上来吧。
pi1ot 2007-05-25
port不稳定,用inets库调用频率一上去就出莫名其妙的问题。
Trustno1 2007-05-25
qiezi 写道
只有并发好像意义并不大,不知道是否适合MMORPG类游戏开发?核心算法用其它语言实现难度怎样?erlang的扩展库还是比较难写吧,不能长时间阻塞,更不能有线程锁这类东西。。。


<EVE ONLINE>是stackless python写的,我想python在效率方面比不上erlang.我还见过N多的泡菜游戏用Java写,为了进行快速表查找和各种缓存,一启动就是2G内存那种,这点上erlang的menisa效率要好得多.
其实再不济可以参考openpoker的做法,把erlang server写成一个socket adapter,专门负责通信和分布式存储,具体的游戏算法用C/Java写,通过tcp/ip插在adapter上.
另,erlang的c/java的插件是通过port或者driver实现的,内部实则上是运行在一个native thread pool里面,所以cport的block不会影响其他的erlang process的运行.不过具potain实际使用下来,c/port或者driver好像不那么稳定总是会把整个erlang 拖死掉,所以还是用tcp/ip写个c服务器更好些.
qiezi 2007-05-25
只有并发好像意义并不大,不知道是否适合MMORPG类游戏开发?核心算法用其它语言实现难度怎样?erlang的扩展库还是比较难写吧,不能长时间阻塞,更不能有线程锁这类东西。。。
AvinDev 2007-05-25
我觉得将复杂计算分解到大量节点,使用Erlang也不太适合。Erlang的maillist上面有人问Erlang为什么没有一些科学计算的数学库,有人就举了个例子,
8000 dot products of 3000-element vectors:
Fortran 90: 0.79 seconds (Sun Fortran compiler, -O3)
C 89: 1.96 seconds (Sun C compiler, -xO3)
Erlang: 42.33 seconds (erlc +native)
可见如果要使用Erlang,要50台机器的运算量才能比得上Fortran。结论是Erlang更适合于并发,而非并行。
pi1ot 2007-05-25
cookoo 写道
pi1ot 写道
erlang的优势是分布和并发,适用的范围是计算密集型的,比如搜索引擎后端,或者按我的理解网游server端也应该是,没做过网游不是很肯定。
bbs的根本瓶颈在于io,或者在前端cache,或者在后端db,如果这个bbs的访问量足以使系统显现出性能瓶颈的话。

Erlang本身的执行速度并不快(相对于静态类型语言),不适合直接用于计算密集的任务。


描述不当,把复杂计算任务分解到大量的节点的意思。
cookoo 2007-05-24
pi1ot 写道
erlang的优势是分布和并发,适用的范围是计算密集型的,比如搜索引擎后端,或者按我的理解网游server端也应该是,没做过网游不是很肯定。
bbs的根本瓶颈在于io,或者在前端cache,或者在后端db,如果这个bbs的访问量足以使系统显现出性能瓶颈的话。

Erlang本身的执行速度并不快(相对于静态类型语言),不适合直接用于计算密集的任务。
AvinDev 2007-05-24
书上的那个例子只是个Demo,远远比不上Hadoop的强大,但是可以一窥Erlang开发此类应用的强大。
顺便附上源码包,中国的IP被屏蔽了,唉。
zhangyu8374 2007-05-24
看到Erlang这么好的并发性能,我猜应该有搜索引擎公司开始涉足这方面的技术。但自己在网上找了一通,没有发现相关的资料。不知谁有没有这方面的信息?

不知这个mapreduce实现与hadoop提供的实现在性能上差别大不大。

btw:正准备去下书中带的源码,竟然把中国IP屏蔽掉了。哎,中国的这些net spider已经是声名远播啦!
potian 2007-05-18
代码早就可以下载了

是一个mapreduce的全文检索例子

这本新书入门还是可以的,原理和基本习惯用法都讲解得非常得当

但基本上每一点讲得并不是很深入,如果要深入某一点,还是需要自己啃文档加练习。
cryolite 2007-05-18
dogstar 写道
joe programming erlang 马上就出了,据说是实现了一个google的大map做为demo,可以看看。


还早呢,7月份才出来
http://www.pragmaticprogrammer.com/titles/jaerlang/index.html
dogstar 2007-05-15
joe programming erlang 马上就出了,据说是实现了一个google的大map做为demo,可以看看。
albertlee
搜索本博客
博客分类
最近加入圈子
最新评论