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 的可扩展性秘诀是啥?的主要内容,如果未能解决你的问题,请参考以下文章