3

假设我们有一个 Web 项目,我们希望在其中有大约 10000 个 Web 客户端同时连接到服务器。我们还假设一个客户端会话持续大约 25 分钟。

如果我们将 LAMP 堆栈或任何其他流行的 Web 堆栈/框架(Ruby on Rails 和 Linux 上的 Apache 等)与构建在 Erlang/OTP 中的 Web 项目进行比较 - Erlang/OTP 在容错方面有什么其他框架没有不是吗?

客户端会发生什么事件会导致整个 LAMP 堆栈崩溃,而 Erlang/OTP 会站稳脚跟?

4

2 回答 2

7

请注意,典型的 LAMP 堆栈确实采用了一些容错能力。特别是,如果 LAMP 堆栈中的请求失败,则只有该请求会,而其余代码将继续运行。这种保护允许您在单个请求中出现错误,而不会损害其他请求。

Erlang 以更细粒度的规模提供了“能够应对较小的不可预见错误”的想法。您可能在应用程序中有其他子系统,并且可以将相同类型的错误容忍度扩展到这些子系统。您不会“免费”获得它,但该工具可用于构建强大的系统。想象一下 LAMP 堆栈中的客户端错误。这通常会导致该客户端断开连接。在 Erlang 中可能不是这样,客户端可以继续运行。

对于一个有 10000 个客户端的系统,Erlang 提供了每个客户端可以拥有一个进程的优势。或者每个客户端可能有 10 个进程。由于进程/线程相当繁重且昂贵,因此在许多语言中很难实现这一点。请注意,客户端之间的进程间通信很容易,即使某些客户端在另一台机器上(想象有一天扩展到分布式集群)也是如此。

如果您以某种方式编写代码,您可以确保如果客户端由于某种原因而崩溃,那么它的状态会被其他进程正确清除。这也可以避免状态中的大量小而讨厌的泄漏。

于 2011-10-13T11:12:28.293 回答
3

Erlang/OTP 在容错方面有什么其他框架没有的?

现在,即使没有,Erlang/OTP 的副作用也非常小,零副作用。由于它的并发性,像yaws字面上这样的 Web 服务器会为每个连接生成一个小型 Web 服务器。如果一个用户受到应用程序中给定 Web 服务故障的影响,所有其他用户将永远不会注意到,并且唯一的用户进程可能会退出。

使用 OTP,您可以使用多个 构建应用程序supervisors,例如,如果服务器出现故障,它会重新启动以及您可能需要的许多其他功能和选项。

Erlang 的发行版允许我们编写分布式应用程序。我个人用于yaws web server构建 Web 应用程序。

我的经验是,你可以选择哪一个 Web 服务器,比如说Mochiweb,在此处找到的教程:http: //alexmarandon.com/articles/mochiweb_tutorial/,在性能上相当令人印象深刻。事实上,几年前,最老版本的 yaws web Server 被 bench 标记为(当时)最新版本Apache,并且 benchmark 的结果非常醒目。当我使用 Mochiweb 完成一百万用户的彗星应用程序时,它有第 2部分和第 3 部分,我印象深刻。这些是为 Web 构建的强大 Web 框架的少数示例。

顺便说一句,你听说过这些NO SQL DatabasesREST (HTTP) interfaceErlang/OTP 开发的新产品,例如Membase Server [此处的主页:http: //www.couchbase.com/products-and-services/membase-server ]、Couch DBRiak,他们的性能非常令人印象深刻,这意味着他们的 web/REST 接口非常稳定,并且由于他们令人印象深刻的、有文档的 write through put,他们证明了他们的底层技术 (Erlang/OTP) 不仅是为了高可用性和仅容错系统,但也适用于网络!只需阅读此文档: http: //blog.couchbase.com/why-membase-uses-erlang

可以在此处的 wiki 页面上找到更多使用 erlang 构建且令人印象深刻的 Web 框架:http://en.wikipedia.org/wiki/Erlang_(programming_language)。可以在此处找到对其功能的更好总结,使其在网络上变得强大:http: //cs.nyu.edu/~lerner/spring10/projects/Erlang.pdf

于 2011-10-13T15:39:56.673 回答