Erlang在哪里使用,为什么?


Answers

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

我认为这是学习erlang最有趣的项目之一,因为它真正建立在erlang的实力之上。 (但有些人会认为它不是OTP,但不用担心里面还有一大堆好的代码......)

为什么?

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

所以我们有两个特点:

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

这些都是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.

这是5个不同版本的access功能。 Erlang将根据收到的参数选择最合适的版本。 ( Config#config类型的结构,它具有type属性)。

这意味着它比链接if/elseswitch/case来制定业务规则更容易和更清晰。

总结

编写可伸缩的服务器,这是erlang的重点。 一切都在设计中让它变得简单。 在前面的两个功能中,我会添加:

  • 热码升级
  • mnesia ,分布式关系数据库(包含在基础分布中)
  • mochiweb ,大多数http erlang服务器都是基于它构建的
  • 二进制支持(解码和编码二进制协议一如既往)
  • 一个伟大的社区,拥有伟大的开源项目( ejabberdcouchdb ,还有webmachinewebmachinewebmachine很容易嵌入的库)

更少的LOC

Richard Jones也有这篇文章 。 他重写了一个从C ++到erlang的应用程序:erlang中的行数减少了75%。

Question

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

解释为什么它被用于特定的解决方案,而不是其他编程语言,也将非常感激。

列举BAD Erlang案例研究(Erlang被滥用的案例),这也很有趣。







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/的回答)

认识Erlang的四个部分非常重要:语言本身,虚拟机(BEAM,hipe)标准库(以及github,CEAN等模块)和开发环境正在稳步更新/扩展/改进。 例如,我记得当Wings3d的作者意识到它需要改进时浮点性能得到了改善(我找不到这个来源)。 这家伙刚刚写到:

http://marian-dan.com/wordpress/?p=324

几年前,Tim Bray的Wide Finder宣传以及所有开始使用Web应用程序框架和HTTP服务器的人士(至少部分)领导改进正则表达式和二进制文件处理。 所有这些工作都集成了HiPE和SMP,透析器项目,多个单元测试和构建库。

所以它的甜蜜点正在扩大,困难的是官方文档不能很好地保持,邮件列表和erlang博客圈的数量正在迅速增长




我正在为社交游戏公司wooga工作,我们使用Erlang来处理我们的一些游戏后端(基本上每天数百万用户的http apis)以及ios推送通知提供商,付款等辅助服务。

我认为它真的在与网络相关的任务中大放异彩,并且它使得构建和实现简单和复杂的网络服务变得非常简单。 分布,容错和性能很容易实现,因为Erlang已经拥有一些内置的关键组件,并且它们已经在关键的生产基础架构中长期使用。 所以它不像“新潮科技的东西0.0.2 alpha”。

我知道其他游戏公司也使用Erlang。 您应该能够在幻灯片上找到关于此的演示文稿。




Erlang来自爱立信,在其电信系统中使用。

在电信以外, CouchDb (一种面向文档的数据库)可能是迄今为止最出名的Erlang应用程序。

为什么是Erlang? 从overview (值得全文阅读):

Erlang平台的文档,视图,安全和复制模型,特殊用途查询语言,高效和强大的磁盘布局以及并行和可靠的特性都经过精心整合,以实现可靠高效的系统。






Related