Erlang对Web项目的容错能真正受益吗?

ska*_*tek 3 erlang lamp fault-tolerance

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

如果我们将LAMP堆栈或任何其他流行的Web堆栈/框架(Ruby on Rails与Linux上的Apache等)与使用Erlang/OTP构建的Web项目进行比较 - Erlang/OTP在容错方面具有哪些其他框架不具备的功能"T?

客户端会发生什么事情会导致整个LAMP堆栈崩溃,而Erlang/OTP会坚持到底?

I G*_*ERS 7

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

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

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

如果以某种方式编写代码,则可以确保如果客户端由于某种原因而崩溃,则其状态会被其他进程正确清理.这样可以避免在州内出现许多小的令人讨厌的泄漏.