Erlang 的可扩展性秘诀是啥?

Posted

技术标签:

【中文标题】Erlang 的可扩展性秘诀是啥?【英文标题】:What is Erlang's secret to scalability?Erlang 的可扩展性秘诀是什么? 【发布时间】:2010-10-05 17:16:42 【问题描述】:

Erlang 在处理大量消息和请求方面享有盛誉。我没有时间下载并尝试深入了解 Erlang 先生对切换理论的理解......所以我想知道是否有人可以教我(或指向一个好的教学网站。)

假设作为一个思想实验,我想将 Erlang ejabberd 移植到 Python 和 C 的组合中,以给我同样的速度和可扩展性的方式。我必须理解和实施哪些结构或模式? (Python 的 Twisted 已经这样做了吗?)

【问题讨论】:

【参考方案1】:

How/why do functional languages (specifically Erlang) scale well?(讨论原因)

http://erlang.org/course/course.html(用于教程链)

就移植到其他语言而言,在大多数现代语言中都可以轻松实现消息传递系统。获得函数式风格可以很容易地在 Python 中完成,尽管您不会“免费”获得 Erlang 的内部调度功能。 Stackless Python 可以复制 Erlang 的大部分并发特性,虽然我不能说细节,因为我没有太多使用它。 If 确实看起来更“明确”(因为它要求您在 Erlang 的设计允许内部发生并发的地方定义代码中的并发)。

【讨论】:

糟糕!谢谢!这是一个很大的帮助。我很惊讶 SO 的重复问题检查器没有引导我找到那个。【参考方案2】:

Erlang 不仅是关于可扩展性,而且主要是关于

可靠性 软实时特性(由软实时 GC 启用,这可能是因为不变性 [无循环] 并且不共享任何内容等) 并发任务的性能(廉价的任务切换、廉价的进程衍生、演员模型......) 可扩展性 - 在当前状态下值得商榷,但发展迅速(大约 32 个核心,比大多数竞争对手要好,但在不久的将来应该会更好)。

【讨论】:

是的,但这是“出色的可扩展性”的定义。没有可靠性、性能或实时能力的可扩展性就没那么有用了;)【参考方案3】:

erlang 的另一个影响可伸缩性的特性是轻量级廉价进程。由于进程的开销很小,erlang 可以产生比大多数其他语言更多的进程。与许多其他语言相比,使用 erlang 进程可以获得更多的收益。

【讨论】:

【参考方案4】:

我认为 Erlang 的最佳选择是网络绑定应用程序 - 使节点之间的通信更加简单,并且 OTP 中内置了心跳监控、使用主管自动重启等功能。

【讨论】:

以上是关于Erlang 的可扩展性秘诀是啥?的主要内容,如果未能解决你的问题,请参考以下文章

golang怎么实现横向扩展

语言和可扩展性之间的关系

如何限制 Erlang VM (BEAM) 使用的核心数量?

灵活/流畅的 HTML 表单的 CSS 秘诀是啥?

Erlang模块与Erlang程序的运行方法

使用以下方法消除 UINavigationbar 和另一个视图之间的黑色字符串的秘诀是啥?