`
albertlee
  • 浏览: 35905 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

使用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 在并发性能上的优势,比较适合做大型的论坛社区。
分享到:
评论
31 楼 dcaoyuan 2007-05-26  
cookoo 写道
不知道erlang的java port稳定性如何?


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

我在ErlyBird里用了一些,还可以,但在Erlang的String(List)转换到Java类型时似乎有个Bug,我没时间去查,等今后吧。
30 楼 cookoo 2007-05-26  
不知道erlang的java port稳定性如何?
29 楼 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 集群的并行能力。我猜想,会有新的奇迹传说诞生的。
28 楼 Puras 2007-05-25  
wzgme 写道
turing 写道
像Second Life那样的虚拟社区,大家有没有关注过?它的后台语言好像叫Linden。


确定?

只知道Linden Lab是一个公司.

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


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

这样的代码,用OpenMP无论如何是不可能对其做任何优化的.但是如果你有惰性求职就可以.不过这目前也仅仅停留在理论上,实际使用FP语言的虚拟机需要为这些Funtional特性寻找特别的优化算法.这目前看来也只能期待数学上的突破了.


26 楼 Trustno1 2007-05-25  
AvinDev 写道
T1觉得Folding@Home这种方式的分布式运算,是否比SMP架构更适合?现在游戏主机和一些显卡的计算能力非一般的猛。

这实则上是分布式结构,和SMP/Numa已经没有关系了,分布/并行/并发的概念区别还是很大的.我不清楚Folding@Home具体的结构,不过我猜想这是一种SPMD并行,这其实是一种比较简单的并发模式了,每一个node上运行的计算程序相同,然后把一条蛋白质上的数据切成几小块,分给不同的节点做.每一个节点上运行的程序相同,但是不care具体的计算机是什么样的.但是事实上能做到SPMD的应用是不多的,大多数的应用都是MPMD,如果你要写MPMD的话,网络通信上的问题可能已经是优先级很低的问题了,最主要的工作是小心的设计并行算法.Folding@Home这种方式也就很难奏效,因为很有可能某些计算机由于配置比其他的低,而拖慢整个计算.
25 楼 AvinDev 2007-05-25  
T1觉得Folding@Home这种方式的分布式运算,是否比SMP架构更适合?现在游戏主机和一些显卡的计算能力非一般的猛。
24 楼 Trustno1 2007-05-25  
另外说道,并发/并行.我觉得很多人都搞不太清楚之间的差别.具体的区别我就不说了.我只是想说,在SMP架构上去做并行任务实际意义不大,虽然你可以通过OpenMP之类的库实现并行优化,但是实际上尽管CPU可以独立运行,但是I/O,memory都是仍然是共享的,这对于真正的并行计算来说是个致命伤.除非你用Numa,那情况又两说了,不过Numa那种东西很奢侈吧,现在google的PC farm大行其道的年代,谁用Numa就真有些人傻钱多速来的嫌疑了.

23 楼 AvinDev 2007-05-25  
MMORPG,就服务器端来说,我认为从架构上,都是差不多的,从实现角度,我谈谈我的看法。
在通信框架方面,Erlang会方便很多,那篇OpenPoker的文章主要是讲的分隔的休闲游戏,各个服务器之间没有太大的关联。MMORPG,如果是大世界,会涉及到跨服务器的通信,这方面也是Erlang的强项。
可能会有问题的是人物交互设计上,按照Erlang Way,对于游戏里面的人物,都要设计为Process,而不是C++里的Object。各个Process基于Message来进行并发的活动和交互,这样设计对绝大多数人来说还是比较陌生。
还有就是游戏逻辑上面,貌似大部分网游都是用python,lua这样的脚本来写的逻辑,如果要用Erlang开发,用FP风格写这些比较灵活的逻辑,可能会比较痛苦。

国外已经有人研究过Erlang开发MMORPG的可行性,这里顺便将ppt放上来吧。
22 楼 pi1ot 2007-05-25  
port不稳定,用inets库调用频率一上去就出莫名其妙的问题。
21 楼 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服务器更好些.


20 楼 qiezi 2007-05-25  
只有并发好像意义并不大,不知道是否适合MMORPG类游戏开发?核心算法用其它语言实现难度怎样?erlang的扩展库还是比较难写吧,不能长时间阻塞,更不能有线程锁这类东西。。。
19 楼 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更适合于并发,而非并行。
18 楼 pi1ot 2007-05-25  
cookoo 写道
pi1ot 写道
erlang的优势是分布和并发,适用的范围是计算密集型的,比如搜索引擎后端,或者按我的理解网游server端也应该是,没做过网游不是很肯定。
bbs的根本瓶颈在于io,或者在前端cache,或者在后端db,如果这个bbs的访问量足以使系统显现出性能瓶颈的话。

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


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

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

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

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

是一个mapreduce的全文检索例子

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

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


还早呢,7月份才出来
http://www.pragmaticprogrammer.com/titles/jaerlang/index.html
12 楼 dogstar 2007-05-15  
joe programming erlang 马上就出了,据说是实现了一个google的大map做为demo,可以看看。

相关推荐

    erlang_web_development

    这些软件层面的要求与基于互联网的应用非常相似,因此Erlang成为了开发Web服务的有力候选者。 2. **WebPlatform框架**:基于Erlang内部开发Web应用程序的经验,开发了一套名为WebPlatform的框架。该框架采用设计...

    使用Erlang和Yaws开发REST式的服务

    在本文中,我们将探讨如何使用Erlang编程语言和Yaws Web服务器开发RESTful服务。Erlang是一种面向并发和分布式系统的语言,以其高可靠性而著称,而Yaws是由Claes Wikström用Erlang编写的高性能Web服务器,能够处理...

    erlang写的一个特别的web服务器

    在Web服务器领域,Erlang由于其天然的并发处理能力和强大的错误恢复机制,成为了构建高效服务器的理想选择。 这个特别的Web服务器可能是用Erlang编写的Mongrel2的Erlang实现,名为emongrel2。Mongrel2是一款由Zed ...

    Building Web Applications with Erlang

    首先,我们需要了解Erlang语言的特性和优势,然后逐步探索如何使用Erlang构建可扩展的系统,并通过RESTful架构提供Web服务。在此基础上,我们将进一步了解如何与Yaws服务器交互以及相关的Web开发技术。 Erlang是一...

    Building Web Applications with Erlang.2012.英文

    综上所述,文件描述了通过Erlang及其生态系统中的一系列工具和框架(包括OTP和Yaws)来开发Web应用的方法。涉及到了如何通过RESTful设计来增加Web服务的可扩展性和弹性,以及如何利用Yaws服务器来启动和管理Web服务...

    erlang中文基础教程

    3. **Web开发**:Erlang框架如YAWS和Chicago Boss为构建高性能Web应用提供了可能。 **学习资源与进阶** - 《Erlang编程》一书是学习Erlang的入门经典,适合初学者阅读。 - OTP(Open Telecom Platform)是Erlang的...

    erlang9.rar

    RabbitMQ是一款使用Erlang开发的消息队列服务,它是开源的、基于AMQP(Advanced Message Queuing Protocol)的代理,用于路由和分发消息。Erlang的强大并发处理能力和内置的分布式特性使得RabbitMQ成为处理大量并发...

    Erlang开发电信网管项目实践.ppt

    标题中的“Erlang开发电信网管项目实践”指的是使用Erlang编程语言来构建电信网络管理系统的过程和经验。在电信行业中,网管系统对于监控、维护和优化网络至关重要,而选择Erlang作为开发语言主要是因为它在并发处理...

    JavaScript + Delphi + ErLang讲座内容(4)

    erlang + delphi demo with Web UI`可能是通过Web界面展示Erlang和Delphi的集成,这可能使用了Erlang的Web开发框架,如Yaws或Mochiweb,与Delphi后端进行交互。 - `12. erlang demo with hot update`可能展示了...

    erlang web frame

    Erlang Web框架,如标题所示,是一种基于Erlang编程语言构建的Web开发框架,用于构建高效、可扩展和高并发的Web应用程序。Erlang因其强大的并发处理能力和容错性,在分布式系统和实时通信领域备受推崇。而Erlang Web...

    RabbitMQ和Erlang开发应用

    **RabbitMQ与Erlang开发应用** 在IT行业中,消息队列系统是分布式系统间进行异步通信的重要工具,而RabbitMQ作为一款广泛使用的开源消息代理,扮演着核心角色。RabbitMQ允许应用程序之间通过发布/订阅、路由、队列...

    erlang 框架

    Erlang框架是一种基于Erlang编程语言的全功能Web框架,主要设计用于构建高度并发、可扩展且容错...不过,Erlang和其框架的学习成本相对于传统Web开发语言可能较高,因此在选择时应根据项目需求和技术团队的背景来评估。

    ChicagoBoss, Erlang web MVC,现在有Comet.zip

    ChicagoBoss, Erlang web MVC,现在有Comet 芝加哥老板:开始小,梦想大 注意这是一个支持 Erlang 18的主分支。 对于旧的Erlang版本使用遗留分支。芝加哥老板是一个由 Rails 启发并用Erlang编写的服务器框架。 它...

    building_web_applications_with_erlang.pdf

    根据给出的文件信息,我们可以...以上所述内容提供了对Erlang在Web应用开发中角色的深刻理解,特别是使用Yaws Web服务器的相关知识和实践。这些知识对于想要深入学习Erlang在Web开发中应用的开发者来说是非常重要的。

    Erlang官网下载过慢

    RabbitMQ,一个基于Erlang开发的消息队列系统,是实现异步通信的关键组件。 标题中提到的“Erlang官网下载过慢”可能是因为网络问题或者官方服务器的繁忙导致的,这对于急需安装或更新Erlang的开发者来说是一个常见...

    erlang资源

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入...

    [Erlang] 网络应用开发 (Erlang 实现) (英文版)

    [奥莱理] Building Web Applications with Erlang Working with REST and Web Sockets on Yaws (E-Book) ☆ 出版信息:☆ [作者信息] Zachary Kessin [出版机构] 奥莱理 [出版日期] 2012年06月14日 [图书页数] ...

    基于Erlang VM的语言

    3. **ErlyJS**: ErlyJS是一个纯Erlang实现的JavaScript编译器,它面向Erlang VM,旨在提供高性能的服务器端JavaScript,简化Ajax和Comet Web应用的开发。ErlyJS可以与CouchDB的JSON API无缝对接。 【代码层面的结合...

    erlang23.2版windows64位.zip

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson...同时,Erlang社区还提供了一系列框架,如 Cowboy(Web服务器),Ecto(ORM),Phoenix(Web应用框架)等,帮助开发者更高效地开发应用程序。

Global site tag (gtag.js) - Google Analytics