为啥在 Erlang 中使用 OTP?

Posted

技术标签:

【中文标题】为啥在 Erlang 中使用 OTP?【英文标题】:Why use OTP with Erlang?为什么在 Erlang 中使用 OTP? 【发布时间】:2011-08-18 08:09:13 【问题描述】:

正如问题所说:在使用 Erlang 开发时,使用 OTP 设计原则有什么好处?

我正在开发一个只接收命令并发送响应的服务器。

【问题讨论】:

【参考方案1】:

OTP 是一组久经考验的设计元素和惯用语,如 Jonas 所说,用于创建容错系统以及其他方面(如灵活性、实时更新等)。简而言之,您希望将它用于这些环境,或者可能发展成这些环境的环境,因为在 Erlang 中创建可靠、稳定的系统所付出的大量血汗和泪水都融入了 OTP 行为和架构。如果你不使用它们,你要么没有一个容错、灵活的系统,要么你将重新创建所有决策,一次一个失误和错误,最终创建相当于克隆的东西一次性密码。

所以问题真的是什么时候您想使用 OTP?如果您不使用旨在长时间运行且中断最少的软件,则不需要 OTP。如果您已经有一个可以完成您更熟悉的工作的框架,则不需要 OTP。如果您想了解(也许是困难的方式)OTP 设计背后的决策,则不需要 OTP。如果学习 OTP 的成本(而且存在成本!)超过了软件系统停机的成本,那么您就不需要 OTP。

了解 OTP 的原因和原因的最佳方式是OTP Design Principles User's Guide。如果没有直接说明推理,您通常可以在字里行间阅读以发现每个组件的基本原理。

【讨论】:

只是为了完成:“OTP 提供了实现最常见并发设计模式的库模块。在幕后,程序员无需意识到这一点,库模块确保错误和特殊情况不会发生以一致的方式处理。因此,OTP 行为提供了一组用于设计和构建工业级系统的标准化构建块。” 不确定是否允许在 Stack Overflow 上插入一本书,但manning.com/logan 的免费示例第 1 章和第 3 章应该让您了解 OTP 的好处。 我在 SO 和 PSE 中看到很多书籍链接。不要出汗,理查德C。可能发生的最糟糕的情况是你像狗一样被禁止和追捕! :D【参考方案2】:

OTP 包含一些用于容错系统的良好设计模式,例如gen_server 和监督这可能很有趣。这取决于你想用 Erlang 做什么。

例如如果你想运行一个网站,你可能会感兴趣使用Yaws,如果你想要一个容错网站,你可能会使用带有 Yaws 的 OTP 进行监督。

OTP 还包含有用的行为模式。

【讨论】:

@dkk:您可能有兴趣监督您的服务器,并在它崩溃时自动重新启动它。并且可能在运行时通过热代码交换对其进行升级。 所有这些都可以在没有 OTP 的情况下完成。 OTP 只是一个为您完成它的库,并且已经过广泛的测试(因此它不太容易出错)。

以上是关于为啥在 Erlang 中使用 OTP?的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 和 OTP in Action:为啥不能在 telnet 中调用 get_count?

如何使用 com.ericsson.otp.erlang 确定 erlang 术语是不是为空

为啥第二次调用接收没有在 Erlang shell 中检索消息?

Erlang/OTP 生产应用部署简介

如何在Erlang / OTP中构建MQ使用者循环?

初学者的 Erlang/OTP 行为