我想知道使用Erlang的最常见应用程序/网站/解决方案列表,成功与否。
解释为什么它被用于特定的解决方案而不是其他编程语言也将非常感激。
列出BAD Erlang案例研究(Erlang被滥用的案例),这也很有趣。
答案 0 :(得分:203)
来自编程Erlang :
•亚马逊使用Erlang实现SimpleDB,提供数据库服务作为一部分 亚马逊弹性计算云(EC2)。
• Yahoo!在其社交书签服务中使用它,Delicious,其中包含多个 500万用户和1.5亿个书签网址。
• Facebook 使用Erlang为其聊天服务的后端供电,处理超过
1亿活跃用户。
• WhatsApp 使用Erlang运行邮件服务器,每台服务器最多可连接200万用户。
• T-Mobile 在其短信和身份验证系统中使用Erlang。
•摩托罗拉正在公共安全行业的呼叫处理产品中使用Erlang。
•爱立信在其支持节点中使用Erlang,用于GPRS和3G移动网络 全世界。
•3D细分建模器 Wings 3D ,用于建模和纹理多边形 啮合。
• Ejabberd 系统,提供可扩展的消息传递和在线状态协议 基于(XMPP)的即时消息(IM)应用服务器。
• CouchDB “无模式”面向文档的数据库,提供可扩展性 跨多核和多服务器集群。
• MochiWeb 库,为构建轻量级HTTP服务器提供支持。 它用于为服务的MochiBot和MochiAds等服务提供支持 每天为数百万观众动态生成内容。
• RabbitMQ ,一种AMQP消息传递协议实现。 AMQP是一个新兴的 高性能企业消息传递的标准。
答案 1 :(得分:79)
ejabberd是最知名的erlang应用程序之一,也是我学习erlang的应用程序之一。
我认为这是学习erlang最有趣的项目之一,因为它确实建立在erlang的力量上。 (然而有些人会认为它不是OTP,但不要担心里面还有很多很棒的代码......)
为什么?
XMPP服务器(如ejabberd)可被视为高级路由器,在最终用户之间路由消息。当然还有其他功能,但这是即时通讯服务器最重要的方面。它必须同时路由许多消息,并处理许多TCP / IP连接。
所以我们有两个功能:
这些是erlang闪耀的例子。
处理多个连接
使用erlang构建可扩展的非阻塞TCP / IP服务器非常容易。实际上,它旨在解决这个问题。 鉴于它可以产生数十万个进程(而不是线程,它是一种无共享方法,设计起来比较简单),ejabberd被设计为一组erlang进程(可以分发)在几个服务器上):
所有人都在交换信息。
根据消息的某些方面路由消息
erlang的另一个非常可爱的功能是pattern matching。 它在整个语言中使用。
例如,在以下内容中:
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还有this article。他将应用程序从C ++重写为erlang:在erlang中减少了75%的行。
答案 2 :(得分:46)
涵盖了Erlang的最常见应用程序列表(CouchDb,ejabberd,RabbitMQ等),但我想提供以下内容。
在这些应用程序中使用它的原因来自Erlang的核心优势:管理应用程序可用性。
Erlang是为电信环境而构建的,要求系统满足至少5x9的可用性(每年99.999%的正常运行时间)。这个数字在一年内没有留下太多停机时间!出于这个原因,Erlang主要提供以下功能(非详尽无遗):
横向可扩展性(通过无缝的机内和机器间通信轻松跨机器边界分配作业)。内置数据库(Mnesia)也是自然分布的。
垂直可伸缩性(在同一台计算机上跨处理资源分配作业的能力):本机处理SMP。
代码热插拔:在操作期间更新/升级代码实时的功能
异步:现实世界是异步的,因此Erlang的构建是为了解释这种基本特性。一个有助于满足此要求的功能:Erlang的“免费”流程(> 32000可以同时运行)。
监督:许多不同的过程监控策略,包括重启策略,阈值等。有助于更轻松地从拐角箱/超载中恢复,同时仍保留问题的痕迹,以便以后进行故障排除,验尸分析等。
资源管理:调度策略,资源监控等。请注意,默认流程调度程序使用O(1)缩放操作。
实时调试:随意“登录”实时节点的功能有助于解决问题。调试可以在现场进行,可以完全访问任何进程的运行状态。此外,内置的错误报告工具非常有用(但有时使用起来有些尴尬)。
当然,我可以谈论它的功能根源,但这方面与主要目标(高可用性)有些正交。对于目标目标慷慨贡献的功能性的主要组成部分是,IMO:“不分享”。这一特性有助于抑制“副作用”,并减少对昂贵的同步机制的需求。
我想所有这些特性都有助于扩展在业务关键型应用程序中使用Erlang的案例。
Erlang并不擅长:处理大块数据。
答案 3 :(得分:19)
Erlang来自爱立信,在一些电信系统中使用。
外部电信,CouchDb(面向文档的数据库)可能是迄今为止最知名的Erlang应用程序。
为什么选择Erlang?来自overview(值得一读):
文档,视图,安全性和 复制模型,特殊 目的查询语言,高效 和强大的磁盘布局和 同时可靠的性质 Erlang平台都是小心翼翼的 集成可靠和 高效的系统。
答案 4 :(得分:19)
我们使用Erlang构建了betting exchange(又名预测市场)。由于内置的并发性,我们选择了Erlang而不是一些更传统的金融语言(C ++,Java等)。市场的功能与电话交换非常相似。我们的首席技术官在CTO talk讨论了我们对Erlang的使用。
我们还使用CouchDB和RabbitMQ作为堆栈的一部分。
答案 5 :(得分:15)
我发现这是在撰写报告的过程中:Erlang in Acoustic Ray Tracing。
这是一份研究小组尝试使用Erlang进行声波追踪的经验报告。他们发现虽然编写程序更容易,但是错误更少等等。它的表现更差,并且比同类C程序慢10倍。因此,可能不适合的一个地方是CPU密集型场景。
请注意,人们写的文章是在第一次学习Erlang的阶段,可能还不知道CPU密集型Erlang的正确开发过程。
答案 6 :(得分:14)
显然,雅虎使用Erlang制作了一款名为Harvester的产品。关于它的文章:http://www.ddj.com/architect/220600332
答案 7 :(得分:11)
erlang的优点是什么?
http://beebole.com/en/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/ (jerf的回答)
重要的是要意识到Erlang的4个部分:语言本身,VM(BEAM,hipe)标准库(加上github上的模块,CEAN等)和开发环境正在稳步更新/扩展/改进。例如,我记得当Wings3d的作者意识到它需要改进时,浮点性能得到了提升(我找不到这个的来源)。这家伙刚刚写了这篇文章:
http://marian-dan.com/wordpress/?p=324
几年前,Tim Bray的Wide Finder宣传以及所有开始使用Web应用程序框架和HTTP服务器的人都(至少部分地)领导改进的正则表达式和二进制文件处理。并且所有的工作都集成了HiPE和SMP,透析器项目,多单元测试和构建库,...
所以它的最佳位置正在扩大,困难的是官方文档无法跟上,邮件列表和erlang blogosphere卷的增长很快
答案 8 :(得分:10)
我们正在使用Erlang为我们真正实时的基于浏览器的多人游戏Pixza提供后端肌肉力量。虽然游戏是实时多人游戏,但我们不使用Flash或任何其他第三方插件。我们使用纯JS和COMET技术。 Erlang支持Pixza的“真正实时性”。
答案 9 :(得分:10)
我在为社交游戏公司wooga工作,我们使用Erlang作为我们的一些游戏后端(基本上是数百万日常用户的http apis)和ios推送通知提供商,支付等辅助服务。
我认为它在网络相关任务中确实很有用,它使得构建和实现简单而复杂的网络服务变得非常简单。分布,容错和性能很容易实现,因为Erlang已经内置了一些关键组件,并且它们在关键生产基础架构中使用了很长时间。所以它不像“新臀部技术的东西0.0.2 alpha”。
我知道其他游戏公司也使用Erlang。你应该能够在slidehare上找到关于它的演示文稿。
答案 10 :(得分:6)
Erlang从功能语言中汲取力量,没有共享内存。因此,IMO,Erlang将不适合需要进行内存操作的应用程序。例如,图像编辑。