首页 文章

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

提问于
浏览
221

我想知道使用Erlang的最常见应用程序/网站/解决方案列表, successfully or not .

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

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

11 回答

  • 11

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

  • 6

    从编程Erlang:

    alt text 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亿个书签网址 .

    Facebook 使用Erlang为其聊天服务的后端供电,处理超过1亿活跃用户 .

    WhatsApp 使用Erlang运行邮件服务器,每台服务器最多可实现200万连接用户 .

    T-Mobile 在其SMS和身份验证系统中使用Erlang .

    Motorola 正在公共安全行业的呼叫处理产品中使用Erlang .

    Ericsson 在其支持节点中使用Erlang,用于全球的GPRS和3G移动网络 .

    最流行的开源Erlang应用程序包括以下内容:

    •3D细分建模器 Wings 3D ,用于建模和纹理多边形网格 .

    Ejabberd 系统,提供基于可扩展消息传递和在线协议(XMPP)的即时消息(IM)应用程序服务器 .

    CouchDB “无架构”面向文档的数据库,提供跨多核和多服务器集群的可扩展性 .

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

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

  • 10

    ejabberd是最知名的erlang应用程序之一,也是我学过erlang的应用程序之一 .

    我认为这是学习erlang最有趣的项目之一,因为它确实 Build 在erlang的力量上 . (但是有些人会认为它不是OTP,但不要担心里面还有很多很棒的代码...)

    Why ?

    XMPP服务器(如ejabberd)可视为高级路由器,在最终用户之间路由消息 . 当然还有其他功能,但这是即时通讯服务器最重要的方面 . 它必须同时路由许多消息,并处理许多TCP / IP连接 .

    所以我们有2个功能:

    • 处理许多连接
      给出消息的某些方面的
    • 路由消息

    这些是erlang闪耀的例子 .

    handle many connections

    使用erlang构建可扩展的非阻塞TCP / IP服务器非常容易 . 实际上,它旨在解决这个问题 . 鉴于它可以产生数十万个进程(而不是线程,它是一种无共享方法,设计起来比较简单),ejabberd被设计为一组erlang进程(可以分布在多个服务器上):

    • 客户端连接过程

    • 路由器进程

    • 聊天室流程

    • 服务器到服务器进程

    所有人都在交换信息 .

    route messages given some aspects of the message

    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/elseswitch/case 更容易,更清晰 .

    To wrap up

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

    • 热门代码升级

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

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

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

    • 一个伟大的社区,拥有出色的开源项目( ejabberdcouchdb ,还有webmachineriak和一大堆非常容易嵌入的库)

    Fewer LOCs

    理查德琼斯也有this article . 他改写了一个应用程序C到erlang:erlang中的行数减少了75% .

  • 19

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

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

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

    • Horizontal scalability (通过无缝的机内和机器间通信轻松跨机器边界分配作业) . 内置数据库(Mnesia)也是自然分布的 .

    • Vertical scalability (在同一台机器上跨处理资源分配作业的能力):本机处理SMP .

    • Code Hot-Swapping :在操作期间实时更新/升级代码的能力

    • Asynchronous :现实世界是异步的,所以Erlang的 Build 是为了解释这种基本性质 . 一个有助于满足此要求的功能:Erlang的"free"进程(> 32000可以并发运行) .

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

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

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

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

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

    One thing Erlang isn't really good at :处理大块数据 .

  • 45

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

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

    为何选择Erlang?来自overview(值得一读):

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

  • 19

    我们使用Erlang构建了一个betting exchange(又名预测市场) . 由于内置的并发性,我们选择了Erlang而不是一些更传统的金融语言(C,Java等) . 市场的功能与电话交换非常相似 . 我们的首席技术官在CTO talk讨论了我们对Erlang的使用 .

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

  • 14

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

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

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

  • 194

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

  • 76

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

  • 13

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

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

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

  • 9

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

相关问题