我想知道成功或不成功使用Erlang的最常见应用程序/网站/解决方案的列表。
也非常感谢解释为什么将其用于特定的解决方案而不是其他编程语言。
列出BAD Erlang案例研究(滥用Erlang的案例)也很有趣。
我想知道成功或不成功使用Erlang的最常见应用程序/网站/解决方案的列表。
也非常感谢解释为什么将其用于特定的解决方案而不是其他编程语言。
列出BAD Erlang案例研究(滥用Erlang的案例)也很有趣。
Answers:
从编程Erlang:
• Amazon使用Erlang实施SimpleDB,将数据库服务作为Amazon Elastic Compute Cloud(EC2)的一部分提供。
• Yahoo! 在其社交书签服务Delicious中使用了该工具,该服务拥有超过500万用户和1.5亿个带有书签的URL。
• Facebook使用Erlang来支持其聊天服务的后端,处理超过1亿活跃用户。
• WhatsApp使用Erlang运行消息传递服务器,每个服务器最多可实现200万连接用户。
• T-Mobile在其SMS和身份验证系统中使用Erlang。
• 摩托罗拉在公共安全行业的呼叫处理产品中使用了Erlang。
• 爱立信在其支持节点中使用了Erlang,该支持节点已在全球GPRS和3G移动网络中使用。
•3D细分建模器Wings 3D,用于对多边形网格进行建模和纹理化。
• Ejabberd系统,它提供基于可扩展消息和状态协议(XMPP)的即时消息(IM)应用程序服务器。
• CouchDB “无schema”的面向文档的数据库,可跨多核和多服务器集群提供可伸缩性。
• MochiWeb库为构建轻量级HTTP服务器提供支持。它用于为MochiBot和MochiAds等服务提供动力,这些服务每天为数百万的观众提供动态生成的内容。
• RabbitMQ,一种AMQP消息传递协议实现。AMQP是高性能企业消息传递的新兴标准。
ejabberd是最知名的erlang应用程序之一,也是我从中学到的erlang应用程序之一。
我认为这是学习erlang的最有趣的项目之一,因为它确实建立在erlang的优势上。(但是有人会说这不是OTP,但请放心,里面仍然有很多很棒的代码...)
为什么呢
XMPP服务器(如ejabberd)可以看作是高级路由器,可以在最终用户之间路由消息。当然,还有其他功能,但这是即时消息服务器最重要的方面。它必须同时路由许多消息,并处理许多TCP / IP连接。
因此,我们有2个功能:
这些是erlang大放异彩的示例。
处理许多连接
使用erlang构建可扩展的无阻塞TCP / IP服务器非常容易。实际上,它旨在解决此问题。由于ejabberd 可以产生数十万个进程(而不是线程,它是无共享方法,因此更易于设计),因此ejabberd被设计为一组erlang进程(可以分布在多个服务器上):
他们所有人都在交换消息。
给定消息的某些方面来路由消息
Erlang的另一个非常可爱的功能是模式匹配。整个语言都使用它。
例如,在以下内容中:
access(moderator, _Config)-> rw;
access(participant, _Config)-> rw;
access(visitor, #config{type="public"})-> r;
access(visitor, #config{type="public_rw"})-> rw;
access(_User,_Config)-> none.
这是该access
功能的5个不同版本。根据收到的参数,Erlang将选择最合适的版本。(Config
是#config
具有type
属性的类型的结构)。
这意味着,与链接if/else
或switch/case
制定业务规则相比,它非常容易且清晰得多。
总结
编写可伸缩服务器,这就是erlang的全部重点。一切都经过精心设计,轻松实现。在前两个功能上,我要添加:
mnesia
,分布式关系数据库(包含在基本分发中)mochiweb
,大多数http erlang服务器都基于该服务器构建ejabberd
,couchdb
而且还有webmachine
,riak
很容易嵌入许多库)LOC更少
理查德·琼斯(Richard Jones )也提供了这篇文章。他将应用程序从C ++重写为erlang:erlang中的行数减少了75%。
涵盖了Erlang的最常见应用程序列表(CouchDb,ejabberd,RabbitMQ等),但是我想提供以下内容。
之所以在这些应用程序中使用它,是因为Erlang的核心优势:管理应用程序可用性。
Erlang是专为电信环境而构建的,该环境要求系统至少满足5x9的可用性(每年正常运行时间为99.999%)。这个数字在一年内没有太多的停机时间!出于这个原因,Erlang主要具有以下功能(非穷举):
水平可伸缩性(通过无缝的机器内和机器间通信轻松地跨机器边界分配作业的能力)。内置数据库(Mnesia)也自然分布。
垂直可伸缩性(能够在同一台计算机上的处理资源之间分配作业的能力):SMP是本地处理的。
代码热交换:在操作过程中实时更新/升级代码的能力
异步:现实世界是异步的,因此构建Erlang就是为了解决这一基本问题。满足此要求的一项功能是:Erlang的“免费”进程(可以同时运行32000个以上的进程)。
监督:用于过程监督的许多不同策略,包括重新启动策略,阈值等。有助于更轻松地从极端情况/超载中恢复,同时仍保留问题的痕迹,以便以后进行故障排除,事后分析等。
资源管理:调度策略,资源监视等。请注意,默认流程调度程序以O(1)缩放比例运行。
现场调试:随时“登录”实时节点的功能将有助于对活动进行故障排除。可以实时访问任何进程的运行状态来进行调试。内置的错误报告工具也非常有用(但有时使用起来有些尴尬)。
当然,我可以谈论它的功能根源,但这方面与主要目标(高可用性)有些正交。对目标目标大有帮助的功能性质的主要组成部分是IMO:“不共享”。此特性有助于抑制“副作用”,并减少对昂贵的同步机制的需求。
我想所有这些特征都有助于扩展在关键业务应用程序中使用Erlang的案例。
Erlang并不是真正擅长的一件事:处理大数据块。
Erlang来自爱立信,并在其某些电信系统中使用。
外部电信,CouchDb(面向文档的数据库)可能是迄今为止最著名的Erlang应用程序。
为什么选择Erlang?从概述(值得一读):
文档,视图,安全性和复制模型,专用查询语言,高效且健壮的磁盘布局以及Erlang平台的并发和可靠特性都经过仔细集成,以实现可靠和高效的系统。
我们使用Erlang 建立了一个投注交易平台(又名预测市场)。由于内置的并发性,我们选择了Erlang而不是一些更传统的财务语言(C ++,Java等)。市场的功能与电话交换非常相似。我们的CTO在CTO演讲中谈到了我们对Erlang的使用。
我们还将CouchDB和RabbitMQ用作堆栈的一部分。
我发现这是在撰写报告的过程中:《Earlang in Acoustic Ray Tracing》。
这是有关研究小组尝试使用Erlang进行声射线追踪的经验报告。他们发现,虽然编写程序更容易,但虫害更少。它的伸缩性更差,并且执行速度比同类C程序慢10倍。因此,它可能不太适合使用CPU密集型方案。
但是要注意,人们写这篇论文是在第一次学习Erlang的阶段,并且可能不知道CPU密集型Erlang的正确开发过程。
显然,雅虎使用Erlang制作了一个叫做Harvester的东西。此处的相关文章:http : //www.ddj.com/architect/220600332
Erlang有什么用处?
http://beebole.com/zh-CN/blog/erlang/why-erlang/
http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes
http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ 的答案)
重要的是要意识到,Erlang的4部分:语言本身,VMs(BEAM,hipe)标准库(以及github,CEAN等上的模块)和开发环境正在稳步更新/扩展/改进。例如,我记得读过一篇文章,当Wings3d的作者意识到需要改进时,浮点性能得到了改善(我找不到相应的来源)。这个家伙刚刚写了一下:
http://marian-dan.com/wordpress/?p=324
几年前,Tim Bray在Wide Finder的宣传以及所有开始使用Web应用程序框架和HTTP服务器的人们(至少部分地)导致了正则表达式和二进制文件处理的改进。整合HiPE和SMP,透析器项目,多单元测试和构建库的所有工作正在兴起,..
因此,它的优势在不断扩大。困难的是,官方文档不能很好地跟上进展,并且邮件列表和erlang Blogosphere的数量正在迅速增长
我们正在使用Erlang为我们基于实时浏览器的实时多人游戏Pixza提供后端力量。尽管该游戏是实时多人游戏,但我们不使用Flash或任何其他第三方插件。我们改用纯JS和COMET技术。Erlang支持Pixza的“真正实时性”。