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

解释一下为什么它被用于特定的解决方案,而不是其他编程语言,也会非常受欢迎。

列出BAD Erlang案例研究(误用Erlang的案例)也会很有趣。


当前回答

显然,雅虎使用Erlang制作了一个名为Harvester的东西。关于它的文章在这里:http://www.ddj.com/architect/220600332

其他回答

Erlang来自爱立信,在他们的一些电信系统中使用。

在电信行业之外,CouchDb(面向文档的数据库)可能是迄今为止最著名的Erlang应用程序。

为什么是Erlang ?概述(值得一读):

文档、视图、安全性和 复制模式,特殊 目的查询语言,效率高 强健的磁盘布局和 并发性和可靠性的性质 Erlang平台都是认真的 一体化为可靠而可靠 高效的系统。

我们使用Erlang构建了一个投注交易(又名预测市场)。我们之所以选择Erlang而不是一些更传统的金融语言(c++、Java等),是因为它具有内置的并发性。市场的功能与电话交换机非常相似。我们的CTO在CTO大会上做了一个关于Erlang使用的演讲。

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

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

上面已经介绍了Erlang最常见的应用程序(CouchDb, ejabberd, RabbitMQ等),但我想贡献以下内容。

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

Erlang是为电信环境从头开始构建的,该环境要求系统满足至少5x9的可用性(每年99.999%的正常运行时间)。这个数字并没有给一年的停机时间留下太多的空间!主要出于这个原因,Erlang加载了以下特性(非详尽的):

Horizontal scalability (ability to distribute jobs across machine boundaries easily through seamless intra & inter machine communications). The built-in database (Mnesia) is also distributed by nature. Vertical scalability (ability to distribute jobs across processing resources on the same machine): SMP is handled natively. Code Hot-Swapping: the ability to update/upgrade code live during operations Asynchronous: the real world is async so Erlang was built to account for this basic nature. One feature that contributes to this requirement: Erlang's "free" processes (>32000 can run concurrently). Supervision: many different strategies for process supervision with restart strategies, thresholds etc. Helps recover from corner-cases/overloading more easily whilst still maintaining traces of the problems for later trouble-shooting, post-mortem analysis etc. Resource Management: scheduling strategies, resource monitoring etc. Note that the default process scheduler operates with O(1) scaling. Live debugging: the ability to "log" into live nodes at will helps trouble-shooting activities. Debugging can be undertaken live with full access to any process' running state. Also the built-in error reporting tools are very useful (but sometimes somewhat awkward to use).

当然,我可以谈论它的功能根源,但这方面与主要目标(高可用性)有点正交。在我看来,有助于实现目标的功能性质的主要组成部分是:“不分享任何东西”。这一特性有助于控制“副作用”并减少对昂贵的同步机制的需求。

我想所有这些特性都有助于在关键业务应用程序中使用Erlang。

Erlang确实不擅长的一件事是:处理大块数据。

我就职于wooga,这是一家社交游戏公司,我们将Erlang用于游戏后端(游戏邦注:主要是面向数百万日常用户的http api)以及ios推送通知提供商、支付等辅助服务。

我认为它在与网络相关的任务中非常出色,它使构建和实现简单和复杂的网络服务变得非常简单。分布、容错和性能很容易实现,因为Erlang已经内置了一些关键成分,而且它们在关键的生产基础设施中已经使用了很长时间。所以它不像“0.0.2 alpha的新技术”。

我知道其他游戏公司也在使用Erlang。你们应该可以在幻灯片上找到相关的演示。