我想知道成功与否使用Erlang的最常见应用程序/网站/解决方案列表.
解释为什么将它用于特定解决方案而不是其他编程语言也将非常受欢迎.
列出BAD Erlang案例研究(Erlang被滥用的情况),它也会很有趣.
从编程Erlang:
替代文字http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg
• Amazon使用Erlang实现SimpleDB,作为Amazon Elastic Compute Cloud(EC2)的一部分提供数据库服务.
• 雅虎!在其社交书签服务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 "无模式"面向文档的数据库,提供跨多核和多服务器集群的可扩展性.
• MochiWeb库,为构建轻量级HTTP服务器提供支持.它用于为MochiBot和MochiAds等服务提供支持,这些服务每天为数百万观众提供动态生成的内容.
• RabbitMQ,AMQP消息传递协议实现.AMQP是高性能企业消息传递的新兴标准.
ejabberd是最知名的erlang应用程序之一,也是我学习erlang的应用程序之一.
我认为这是学习erlang最有趣的项目之一,因为它确实建立在erlang的力量上.(但是有些人会认为它不是OTP,但不要担心里面还有很多很棒的代码...)
为什么?
XMPP服务器(如ejabberd)可视为高级路由器,在最终用户之间路由消息.当然还有其他功能,但这是即时通讯服务器最重要的方面.它必须同时路由许多消息,并处理许多TCP/IP连接.
所以我们有2个功能:
处理许多连接
给出消息的某些方面的消息
这些是erlang闪耀的例子.
处理许多连接
使用erlang构建可扩展的非阻塞TCP/IP服务器非常容易.实际上,它旨在解决这个问题.鉴于它可以产生数十万个进程(而不是线程,它是一种无共享方法,设计起来比较简单),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
理查德琼斯也有这篇文章.他将应用程序从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谈话中我们使用Erlang进行了讨论.
我们还使用CouchDB和RabbitMQ作为堆栈的一部分.
我发现这是在撰写报告的过程中:Erlang in Acoustic Ray Tracing.
这是一个研究小组尝试使用Erlang进行声波追踪的经验报告.他们发现虽然编写程序更容易,但是错误更少等等.它的表现更差,并且比同类C程序慢10倍.因此,可能不适合的一个地方是CPU密集型场景.
请注意,人们写的论文是在第一次学习Erlang的阶段,可能还不知道CPU密集型Erlang的正确开发过程.
显然,雅虎使用Erlang制作了一款名为Harvester的产品.关于它的文章:http://www.ddj.com/architect/220600332
什么是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卷正在快速增长
我们正在使用Erlang为我们真正基于浏览器的多人游戏Pixza提供后端肌肉力量.虽然游戏是实时多人游戏,但我们不使用Flash或任何其他第三方插件.我们使用纯JS和COMET技术.Erlang支持Pixza的"真正实时性".
我正在为一家社交游戏公司wooga工作,我们使用Erlang作为我们的一些游戏后端(基本上是数百万日常用户的http apis)和ios推送通知提供商,支付等辅助服务.
我认为它在网络相关任务中确实很有用,它使得在其中构建和实现简单和复杂的网络服务变得非常简单.分布,容错和性能很容易实现,因为Erlang已经内置了一些关键组件,并且它们在关键生产基础架构中使用了很长时间.所以它不像"新臀部技术的东西0.0.2 alpha".
我知道其他游戏公司也使用Erlang.你应该能够在slidehare上找到关于它的演示文稿.
Erlang从功能语言中汲取力量,没有共享内存.因此,IMO,Erlang将不适合需要进行内存操作的应用程序.例如图像编辑.