当前位置:  开发笔记 > 编程语言 > 正文

Erlang在哪里使用?为什么?

如何解决《Erlang在哪里使用?为什么?》经验,为你挑选了11个好方法。

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

解释为什么将它用于特定解决方案而不是其他编程语言也将非常受欢迎.

列出BAD Erlang案例研究(Erlang被滥用的情况),它也会很有趣.



1> JRL..:

编程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)的一部分提供数据库服务.

雅虎!在其社交书签服务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 "无模式"面向文档的数据库,提供跨多核和多服务器集群的可扩展性.

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

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


Ramiz Uddin - 当你说"不,不是吗?"时,你在谈论哪个新系统?
@RamizUddin当你说"不,不是吗?"时,你在谈论哪个新系统?(我只是重复几年前在你名字前面忘了@的Great Turtle的问题 - 我认为它应该得到一个答案)
facebook转离erlang:https://www.facebook.com/notes/facebook-engineering/chat-stability-and-scalability/51412338919/和https://www.quora.com/When-did-Facebook-switch -away从 - 使用 - 二郎换的Facebook聊天

2> Eric..:

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/elseswitch/case制定业务规则更容易,更清晰.

结束

编写可伸缩的服务器,这是erlang的重点.一切都是为了让这一切变得简单.在前两个功能中,我添加:

热门代码升级

mnesia,分布式关系数据库(包含在基础分发中)

mochiweb,构建了大多数http erlang服务器

二进制支持(解码和编码二进制协议一如既往容易)

一个伟大的社会以极大的开源项目(ejabberd,couchdb而且webmachine,riak和库很容易嵌入的转换)

更少的LOC

理查德琼斯也有这篇文章.他将应用程序从C++重写为erlang:erlang中的行数减少了75%.


公平地说,几乎所有用现代语言重写的C++代码都会降低LOC.

3> jldupont..:

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

它在这些应用程序中使用的原因来自Erlang的核心优势:管理应用程序可用性.

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

横向可扩展性(通过无缝的机内和机器间通信轻松地跨机器边界分配作业).内置数据库(Mnesia)也是自然分布的.

垂直可伸缩性(在同一台机器上跨处理资源分配作业的能力):本机处理SMP.

代码热交换:在操作期间实时更新/升级代码的能力

异步:现实世界是异步的,因此Erlang的构建是为了解释这种基本性质.一个有助于满足此要求的功能:Erlang的"免费"流程(> 32000可以同时运行).

监督:许多不同的过程监督策略,包括重启策略,阈值等.有助于更轻松地从拐角箱/超载中恢复,同时仍然保留问题的痕迹,以便以后进行故障排除,事后分析等.

资源管理:调度策略,资源监视等.请注意,默认进程调度程序使用O(1)缩放操作.

实时调试:随意"登录"实时节点的能力有助于解决问题.调试可以在现场进行,可以完全访问任何进程的运行状态.此外,内置的错误报告工具非常有用(但有时使用起来有些尴尬).

当然,我可以谈论它的功能根源,但这方面与主要目标(高可用性)有些正交.对于目标目标慷慨贡献的功能性的主要组成部分是,IMO:"不分享".该特征有助于包含"副作用"并减少对昂贵的同步机制的需求.

我想所有这些特性都有助于扩展在业务关键型应用程序中使用Erlang的情况.

Erlang并不擅长一件事:处理大块数据.


他的意思是解码mpeg数据.Erlang没有针对过多的数值计算.如果处理过程只涉及将大块数据从一个地方转移到另一个地方,那么Erlang就非常擅长.(文件到TPC套接字等)
你能解释一下:"Erlang并不擅长一件事:处理大块数据."
您无法更新共享数据块(Erlang中没有指针),因此必须跨进程跨越数据,这反过来又会导致效率低下.

4> Brian Agnew..:

Erlang来自爱立信,在一些电信系统中使用.

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

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

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


@I给予可怕的建议 - 是的,当然.纠正.我会改变你的绰号:-)

5> 小智..:

我们使用Erlang 建立了一个博彩交易所(又名预测市场).由于内置的​​并发性,我们选择了Erlang而不是一些更传统的金融语言(C++,Java等).市场的功能与电话交换非常相似.我们的首席技术官就CTO谈话中我们使用Erlang进行了讨论.

我们还使用CouchDB和RabbitMQ作为堆栈的一部分.


请注意,您演讲的链接现在是私密的.

6> CoderTao..:

我发现这是在撰写报告的过程中:Erlang in Acoustic Ray Tracing.

这是一个研究小组尝试使用Erlang进行声波追踪的经验报告.他们发现虽然编写程序更容易,但是错误更少等等.它的表现更差,并且比同类C程序慢10倍.因此,可能不适合的一个地方是CPU密集型场景.

请注意,人们写的论文是在第一次学习Erlang的阶段,可能还不知道CPU密集型Erlang的正确开发过程.


关于英特尔与Cell的12x性能问题我有所纠正,但我认为Erlang非常适合于具有CPU挑战性的场景.这并不是说他们不对:这真的可能是一个好的C++解决方案永远胜过一个好的Erlang解决方案的问题.也许这确实在某种程度上提醒了一些人,Erlang和任何其他技术一样,不是银弹,只有在正确的地方使用正确的方式才能发光.
我想你误解了这篇文章.无法在Cell处理器上运行是不幸的,但这只是一个侧面说明.在x86平台上运行的C++和Erlang实现之间的12倍性能差异是真正的问题,并且它没有线性扩展的事实.也就是说,他们对语言不熟悉,并且可能采取了一些不明智的代码路径......这就是生活.我很好奇非线性缩放.
这篇论文很有意思.它没有直接对适用性进行概括,它表明如果你试图在Playstation 3中找到的IBM Cell BE处理器上部署,他们发现Erlang不合适.它还说明他们对Erlang缺乏经验.凭借更多的经验和合适的硬件,他们可能得出了不同的结论.我得到的印象是他们的代码可能包含了非尾递归函数的使用; 如果是这样,那么它可能会在某种程度上解释他们的内存,垃圾收集,崩溃和性能问题.

7> harms..:

显然,雅虎使用Erlang制作了一款名为Harvester的产品.关于它的文章:http://www.ddj.com/architect/220600332


阅读文章:"虽然Harvester最初是用Perl编写的,但Erlang的高级并发结构 - 以及OTP设计原则 - 使其成为构建可靠,容错和可扩展的应用程序(如Harvester)的理想平台.更具可扩展性,可用性,可靠性,并且能够在更轻的代码库和更低成本的开发工作中遵守更严格的服务级别协议(SLA)." 非常感谢 :)

8> Gene T..:

什么是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卷正在快速增长



9> ErJab..:

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



10> 小智..:

我正在为一家社交游戏公司wooga工作,我们使用Erlang作为我们的一些游戏后端(基本上是数百万日常用户的http apis)和ios推送通知提供商,支付等辅助服务.

我认为它在网络相关任务中确实很有用,它使得在其中构建和实现简单和复杂的网络服务变得非常简单.分布,容错和性能很容易实现,因为Erlang已经内置了一些关键组件,并且它们在关键生产基础架构中使用了很长时间.所以它不像"新臀部技术的东西0.0.2 alpha".

我知道其他游戏公司也使用Erlang.你应该能够在slidehare上找到关于它的演示文稿.



11> emb..:

Erlang从功能语言中汲取力量,没有共享内存.因此,IMO,Erlang将不适合需要进行内存操作的应用程序.例如图像编辑.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有