Erlang在哪里使用,为什么使用?[关闭]


258

我想知道成功或不成功使用Erlang的最常见应用程序/网站/解决方案的列表。

也非常感谢解释为什么将其用于特定的解决方案而不是其他编程语言。

列出BAD Erlang案例研究(滥用Erlang的案例)也很有趣。


13
BAD案例研究的问题在于它们并没有真正出名,也没有看到今天的曙光。
埃里克

2
WHATSAPP使用Erlang!谷歌获取详细信息
Muzaaya Joshua 2014年

18
为什么关闭?我用谷歌搜索了确切的问题,并被带到了这里。
canhazbits

EMqtt是非常受欢迎的MQTT经纪人,如今在erlang中以100万用户可持续性发展的IoT中得到了广泛使用。
LAMRIN TAWSRAS

Answers:


214

编程Erlang

替代文字http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

许多公司在其生产系统中使用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移动网络中使用。


最受欢迎的开源Erlang应用程序包括:

•3D细分建模器Wings 3D,用于对多边形网格进行建模和纹理化。

Ejabberd系统,它提供基于可扩展消息和状态协议(XMPP)的即时消息(IM)应用程序服务器。

CouchDB “无schema”的面向文档的数据库,可跨多核和多服务器集群提供可伸缩性。

MochiWeb库为构建轻量级HTTP服务器提供支持。它用于为MochiBot和MochiAds等服务提供动力,这些服务每天为数百万的观众提供动态生成的内容。

RabbitMQ,一种AMQP消息传递协议实现。AMQP是高性能企业消息传递的新兴标准。


27
Ramiz Uddin-当您说“不,不是”时,您正在谈论哪种新系统?
大龟

10
@RamizUddin当您说“不,不是吗?”时,您正在谈论哪个新系统?(我只是重复大乌龟的问题,几年前谁曾忘记您名字前面的@,尽管如此,我认为仍然值得回答)
Walter Tross 2012年


Facebook破坏了WhatsApp的简单性和性能。
Krishnadas PC

您可以更新该书的断开链接吗?
pradyumnad

83

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/elseswitch/case制定业务规则相比,它非常容易且清晰得多。

总结

编写可伸缩服务器,这就是erlang的全部重点。一切都经过精心设计,轻松实现。在前两个功能上,我要添加:

  • 热门代码升级
  • mnesia,分布式关系数据库(包含在基本分发中)
  • mochiweb,大多数http erlang服务器都基于该服务器构建
  • 二进制支持(对二进制协议的解码和编码一如既往)
  • 一个伟大的社区,拥有出色的开源项目(ejabberdcouchdb而且还有webmachineriak很容易嵌入许多库)

LOC更少

理查德·琼斯(Richard Jones )也提供了这篇文章。他将应用程序从C ++重写为erlang:erlang中的行数减少了75%。


6
公平地说,几乎所有用现代语言重写的C ++代码都会减少LOC。
扎克

52

涵盖了Erlang的最常见应用程序列表(CouchDb,ejabberd,RabbitMQ等),但是我想提供以下内容。

之所以在这些应用程序中使用它,是因为Erlang的核心优势:管理应用程序可用性

Erlang是专为电信环境而构建的,该环境要求系统至少满足5x9的可用性(每年正常运行时间为99.999%)。这个数字在一年内没有太多的停机时间!出于这个原因,Erlang主要具有以下功能(非穷举):

  • 水平可伸缩性(通过无缝的机器内和机器间通信轻松地跨机器边界分配作业的能力)。内置数据库(Mnesia)也自然分布。

  • 垂直可伸缩性(能够在同一台计算机上的处理资源之间分配作业的能力):SMP是本地处理的。

  • 代码热交换:在操作过程中实时更新/升级代码的能力

  • 异步:现实世界是异步的,因此构建Erlang就是为了解决这一基本问题。满足此要求的一项功能是:Erlang的“免费”进程(可以同时运行32000个以上的进程)。

  • 监督:用于过程监督的许多不同策略,包括重新启动策略,阈值等。有助于更轻松地从极端情况/超载中恢复,同时仍保留问题的痕迹,以便以后进行故障排除,事后分析等。

  • 资源管理:调度策略,资源监视等。请注意,默认流程调度程序以O(1)缩放比例运行。

  • 现场调试:随时“登录”实时节点的功能将有助于对活动进行故障排除。可以实时访问任何进程的运行状态来进行调试。内置的错误报告工具也非常有用(但有时使用起来有些尴尬)。

当然,我可以谈论它的功能根源,但这方面与主要目标(高可用性)有些正交。对目标目标大有帮助的功能性质的主要组成部分是IMO:“不共享”。此特性有助于抑制“副作用”,并减少对昂贵的同步机制的需求。

我想所有这些特征都有助于扩展在关键业务应用程序中使用Erlang的案例。

Erlang并不是真正擅长的一件事:处理大数据块。


4
您能解释一下以下内容:“ Erlang并不擅长的一件事:处理大数据块。”
Kirill Trofimov

9
他的意思是解码mpeg数据。太多的数值计算没有针对Erlang进行优化。如果处理仅涉及将大块数据从一个地方移到另一个地方,那么Erlang就是非常擅长的。(文件到TPC套接字等)
基督教徒

4
您不能更新共享的数据块(Erlang中没有指针),因此数据必须在各个进程之间穿梭,从而转化为效率低下。
2009年

顺便说一句,我相信爱立信表示Erlang实现了9x9的可用性。
Jono

我们正在考虑改善此处引用的Erlang的弱点。
谢尔比·摩尔

19

Erlang来自爱立信,并在其某些电信系统中使用。

外部电信,CouchDb(面向文档的数据库)可能是迄今为止最著名的Erlang应用程序。

为什么选择Erlang?从概述(值得一读):

文档,视图,安全性和复制模型,专用查询语言,高效且健壮的磁盘布局以及Erlang平台的并发和可靠特性都经过仔细集成,以实现可靠和高效的系统。


1
对于他们的一些电信系统。
jldupont

1
CouchDB不是一个OO数据库,它是一个面向文档的数据库。
我给大家带来了可怕的建议'2009年

5
@我给出了可怕的建议-是的,当然。已更正。我会更改您的绰号:-)
Brian Agnew

爱立信使用一种较早的并发语言,称为PLEX(交换编程语言),该语言在整个80年代后期一直进行数字电话交换。我认为erlang是PLEX的完善版本。
user50619 '18

19

我们使用Erlang 建立了一个投注交易平台(又名预测市场)。由于内置的​​并发性,我们选择了Erlang而不是一些更传统的财务语言(C ++,Java等)。市场的功能与电话交换非常相似。我们的CTO在CTO演讲中谈到了我们对Erlang的使用

我们还将CouchDB和RabbitMQ用作堆栈的一部分。


10
仅需注意,您的演讲链接现在是私有的。
JDong 2014年

15

我发现这是在撰写报告的过程中:《Earlang in Acoustic Ray Tracing》

这是有关研究小组尝试使用Erlang进行声射线追踪的经验报告。他们发现,虽然编写程序更容易,但虫害更少。它的伸缩性更差,并且执行速度比同类C程序慢10倍。因此,它可能不太适合使用CPU密集型方案。

但是要注意,人们写这篇论文是在第一次学习Erlang的阶段,并且可能不知道CPU密集型Erlang的正确开发过程。


2
这篇论文很有趣。它并没有直接针对适用性进行概括,而是表明如果您尝试在Playstation 3中找到的IBM Cell BE处理器上进行部署,他们会认为Erlang不适合。它还指出,Erlang没有经验。有了更多的经验和合适的硬件,他们可能得出了不同的结论。我的印象是,他们的代码可能包含非尾递归函数的使用。如果是这样,那么它可能会以某种方式解释它们在内存,垃圾回收,崩溃和性能方面的问题。
蒂姆

3
我认为您看错了这篇文章。不幸的是,无法在Cell处理器上运行,但这只是附带说明。真正的问题是C ++和在x86平台上运行的Erlang实现之间的12倍性能差异,同时它并不能线性扩展。也就是说,它们是该语言的新手,可能已经采用了一些不明智的代码路径……这就是生活。我对非线性缩放感到好奇。
CoderTao

4
对于英特尔与Cell的12倍性能问题,我的立场是正确的,但我坚持认为Erlang非常适合CPU挑战性的情况。并不是说它们不正确:好的C ++解决方案总是会击败好的Erlang解决方案,这确实是一个问题。也许这确实在某种程度上提醒了人们,Erlang和其他任何技术一样,不是灵丹妙药,只有在正确的地方以正确的方式使用时,它才会发光。
蒂姆(Tim)

14

显然,雅虎使用Erlang制作了一个叫做Harvester的东西。此处的相关文章:http : //www.ddj.com/architect/220600332


4
阅读文章:“虽然Harvester最初是用Perl编写的,但Erlang的高级并发构造以及OTP设计原则使其成为构建可靠,容错和可扩展的应用程序(例如Harvester)的理想平台。具有更强的可扩展性,可用性,可靠性,并能够以更轻的代码库和更便宜的开发工作来遵守更严格的服务级别协议(SLA)。” 非常感谢:)
罗伯托·阿洛伊

11

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的数量正在迅速增长


10

我们正在使用Erlang为我们基于实时浏览器的实时多人游戏Pixza提供后端力量。尽管该游戏是实时多人游戏,但我们不使用Flash或任何其他第三方插件。我们改用纯JS和COMET技术。Erlang支持Pixza的“真正实时性”。


10

我正在为社交游戏公司wooga工作,我们将Erlang用于一些游戏后端(基本上是数百万日常用户的http api)和辅助服务,例如ios推送通知提供程序,付款等。

我认为这确实在与网络相关的任务中闪耀,并且使它在其中直接构建和实现简单和复杂的网络服务变得很简单。分发,容错和性能很容易实现,因为Erlang已经内置了一些关键要素,并且已在关键的生产基础架构中长期使用。因此,它不像“新的髋关节技术0.0.2 alpha”。

我知道其他游戏公司也使用Erlang。您应该可以在幻灯共享中找到有关此内容的演示文稿。


6

Erlang从一种没有共享内存的功能语言中汲取了力量。因此,IMO,Erlang将不适用于需要就地存储操作的应用程序。例如图像编辑。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.