Erlang在哪里使用,为什么?
我想知道Erlang被使用的最常见的应用程序/网站/解决scheme的列表, 成功与否 。
解释为什么它被用于特定的解决scheme,而不是其他编程语言,也将非常感激。
列举BAD Erlang案例研究(Erlang被滥用的案例),这也会很有趣。
从编程Erlang :
许多公司在其生产系统中使用Erlang:
Amazon使用Erlang来实现SimpleDB,作为Amazon Elastic Compute Cloud(EC2)的一部分提供数据库服务。
• Yahoo! 在其社交书签服务“Delicious”中使用它,它拥有超过500万用户和1.5亿个书签url。
• Facebook使用Erlang为其聊天服务的后端供电,处理超过1亿活跃用户。
WhatsApp使用Erlang来运行消息服务器,每台服务器可实现多达200万个连接用户。
• T-Mobile在其SMS和authentication系统中使用Erlang。
• 摩托罗拉在公共安全行业的呼叫处理产品中使用Erlang。
• 爱立信在其支持节点中使用Erlang,用于全球的GPRS和3G移动networking。
最stream行的开源Erlang应用程序包括以下内容:
•3D细分build模器Wings 3D ,用于build模和纹理多边形网格。
• Ejabberd系统,提供基于可扩展消息和呈现协议(XMPP)的即时消息(IM)应用程序服务器。
• CouchDB “无模式”文档导向数据库,提供跨多核和多服务器集群的可扩展性。
MochiWeb库为构build轻量级HTTP服务器提供支持。 它被用来为MochiBot和MochiAds等服务提供动力,MochiBot和MochiAds每天为数百万观众提供dynamic生成的内容。
• RabbitMQ ,AMQP消息协议实现。 AMQP是高性能企业消息传递的新兴标准。
ejabberd是最知名的erlang应用程序之一,也是我学习erlang的一个应用程序。
我认为这是学习erlang最有趣的项目之一,因为它真的是build立在erlang的实力上。 (但有些人会认为这不是OTP,但不用担心里面还有一大堆代码…)
为什么?
XMPP服务器(如ejabberd)可以被看作是一个高级路由器,在最终用户之间路由消息。 当然还有其他function,但是这是即时消息服务器最重要的方面。 它必须同时路由许多消息,并处理许多TCP / IP连接。
所以我们有2个特点:
- 处理很多连接
- 给出消息的某些方面的路由消息
这是erlang闪耀的例子。
处理很多连接
使用erlang构build可扩展的非阻塞TCP / IP服务器非常简单。 实际上,它是为了解决这个问题而devise的。 考虑到它可以产生数十万个进程(而不是线程 ,这是一个无共享的方法,devise起来更简单),ejabberd被devise成一系列erlang进程(可以分布在多个服务器上):
- 客户端连接过程
- 路由器进程
- 聊天室过程
- 服务器到服务器进程
他们都在交换消息。
给出消息的某些方面的路由消息
erlang的另一个非常可爱的function是模式匹配 。 它在整个语言中都被使用。
例如,在下面:
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.
这是5个不同版本的access
function。 Erlang会根据收到的参数select最合适的版本。 ( Config
是#config
types的结构,它具有type
属性)。
这意味着它比链接if/else
或switch/case
来制定业务规则更容易和更清晰。
总结
编写可伸缩的服务器,这是erlang的重点。 一切都被devise出来,使这个简单。 在前两个function上,我会补充一下:
- 热码升级
-
mnesia
,分布式关系数据库(包含在基础分布中) -
mochiweb
,大部分的http erlang服务器都是build立在这个服务器上的 - 二进制支持(解码和编码二进制协议一如既往)
- 一个伟大的开源项目社区(
ejabberd
,couchdb
但也有webmachine
,webmachine
和webmachine
库很容易embedded)
更less的LOC
Richard Jones也有这篇文章 。 他重写了一个从C ++到erlang的应用程序:erlang中的行数减less了75%。
已经涵盖了Erlang最常见的应用程序列表(CouchDb,ejabberd,RabbitMQ等),但我想贡献以下内容。
在这些应用程序中使用它的原因来自Erlang的核心优势:pipe理应用程序可用性 。
Erlangbuild立在电信环境之上,要求系统至less满足5×9的可用性(每年99.999%的正常运行时间)。 这一数字在一年内没有留下太多停机时间! 由于这个原因,Erlang加载了以下特性(非穷举):
-
水平可扩展性 (通过无缝内部和机器间通信轻松地跨机器分配作业的能力)。 内置的数据库(Mnesia)也是自然分布的。
-
垂直可伸缩性 (在同一台机器上跨处理资源分配作业的能力):SMP是本地处理的。
-
代码热插拔 :能够在操作过程中更新/升级代码
-
asynchronous :现实世界是asynchronous的,所以Erlang是为了说明这个基本性质而build立的。 一个有助于这个要求的特性是:Erlang的“空闲”进程(> 32000可以同时运行)。
-
监督 :重启策略,门槛值等多种不同的过程监控策略,有助于更轻松地从angular落案件/超载案件中恢复过来,同时仍然保留后续故障处理,事后分析等问题的痕迹。
-
资源pipe理 :调度策略,资源监控等。请注意,默认进程调度程序以O(1)缩放进行操作。
-
实时debugging :随时“login”到活动节点的能力有助于解决问题。 debugging可以在任何进程的运行状态下进行。 此外内置的错误报告工具是非常有用的(但有时使用有些尴尬)。
当然,我可以谈论它的function根源,但是这个方面与主要目标(高可用性)有些正交。 对目标目标慷慨贡献的function性质的主要组成部分是IMO:“无所事事”。 这个特征有助于包含“副作用”,并减less了昂贵的同步机制。
我想所有这些特性都有助于扩展在业务关键型应用程序中使用Erlang的情况。
Erlang并不擅长处理大块数据。
Erlang来自爱立信,在一些电信系统中使用。
在电信以外, CouchDb (一种面向文档的数据库)可能是迄今为止最出名的Erlang应用程序。
为什么是Erlang? 从概述 (值得一读):
Erlang平台的文档,视图,安全和复制模型,专用查询语言,高效和强大的磁盘布局以及并行和可靠的特性都被精心地集成到一个可靠和高效的系统中。
我们使用Erlangbuild立了一个博彩交易所 (又名预测市场)。 由于内置的并发性,我们select了一些比较传统的金融语言(C ++,Java等)。 市场的function与电话交换非常相似。 我们的首席技术官谈了我们在首席技术官谈话中使用Erlang。
我们也使用CouchDB和RabbitMQ作为我们的堆栈的一部分。
显然,雅虎使用Erlang来做一个叫Harvester的东西。 文章在这里: http : //www.ddj.com/architect/220600332
我遇到了这个问题,正在编写一份报告: Erlang在Acoustic Ray Tracing中 。
这是一个研究小组尝试使用Erlang进行声光跟踪的经验报告。 他们发现,虽然编写程序比较容易,但是运行速度较慢,而且比同类的C程序慢了10倍。 所以一个可能不太适合的地方是CPU密集型的情况。
但请注意,写这篇文章的人正处于第一次学习Erlang的阶段,可能还不知道CPU密集型Erlang的正确开发stream程。
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的四个部分很重要:语言本身,虚拟机(BEAM,hipe)标准库(加上github上的模块,CEAN等)和开发环境正在不断更新/扩展/改进。 例如,我记得当Wings3d的作者意识到它需要改进时,浮点性能得到了改善(我找不到这个来源)。 这家伙刚刚写到:
http://marian-dan.com/wordpress/?p=324
几年前,Tim Bray的Wide Finder宣传以及所有开始使用Web应用程序框架和HTTP服务器的人士(至less部分)领导了改进的正则expression式和二进制文件处理。 所有的工作集成了HiPE和SMP,透析器项目,多个unit testing和构build库的发展。
所以它的甜蜜点正在扩大,困难的是官方文档不能很好地保持,邮件列表和erlang博客空间正在迅速增长
我们正在使用Erlang为我们真正基于浏览器的多玩家游戏Pixza提供后端肌肉力量。 我们不使用Flash或任何其他第三方插件,尽pipe游戏是实时的多人游戏。 我们使用纯JS和COMET技术。 而Erlang支持Pixza的“真正的实时性”。
我正在为社交游戏公司Wooga工作,我们使用Erlang来处理我们的一些游戏后端(基本上每天有数百万用户使用http apis)以及ios推送通知提供者,付款等辅助服务。
我认为它真的在networking相关的任务中闪耀,它使得构build和实现简单和复杂的networking服务变得简单直接。 分销,容错和性能很容易实现,因为Erlang已经拥有一些内置的关键要素,并在关键的生产基础设施中长期使用。 所以它不像“新科技东西0.0.2阿尔法”。
我知道其他游戏公司也使用Erlang。 你应该能够find有关幻灯片的演示文稿。
Erlang从没有共享内存的function语言中汲取力量。 因此,国际海事组织,爱尔兰将不适合需要在适当位置的内存操作的应用程序。 图像编辑例如。