注意:这个问题受到我构建的Web应用程序的主要要求的严重影响:高可用性和容错。所有其他要求(如可扩展性和用户数量)在这里都没有问题。
我从这个社区的一位成员那里得到了建议,使用 Erlang Web 服务器作为我的 Web 应用程序的后端。
建议我可以使用Mochiweb之类的东西作为后端,使用JSON和面向服务的模型使用Django/Ruby on Rails作为前端。
我能理解的这种方法唯一明显的优势是前端部分的开发是"像往常一样"的 - 常规的MVC东西,Ruby on Rails或某人选择的任何其他通用框架。
但是其他优势呢?它们真的存在吗?
当然,Erlang/OTP 为相关系统增加了容错能力,但添加 Web 前端层不会将这种容错级别降低到更低的级别吗?
我们不是通过将Ruby on Rails与Mochiweb耦合来引入"单点故障"吗?当然,Mochiweb可以应对故障,但是如果前端出现问题怎么办?
从技术上讲,Erlang/OTP 平台本身不会做任何关于容错和高可用性的事情。它只是允许轻松实现并发和分布式软件。在单台机器上运行的 Erlang Web 服务器可能会像所有其他服务器一样失败 - 只是因为硬件出现故障。
因此,对于 HA 站点,更重要的是为硬件和软件故障的情况提供适当的冗余和回退方案,而不是使用任何特定的软件堆栈或平台。与其他平台相比,在 Erlang 中实现可能稍微容易一些(当然,如果您熟悉它),但使用纯 Ruby/Python/Java/C 或几乎任何其他平台都可以获得完全相同的结果。
Web 行业在设置容错前端方面拥有丰富的经验。只需设置多台 Web 机器(通常是轻型反向代理)和某种 HA 管理器(内置于许多负载平衡解决方案中)。后端通常是更难的部分。
如果后端是其他技术,我不会使用 Erlang 作为前端 Web 服务器。
Erlang作为 Web 服务器的许多好处都是在后端也使用 Erlang 时实现的。其中最大的挑战是更低的 I/O 成本。当您的前端和后端是完全独立的软件堆栈时,您将失去这种优势。
如果你打算在Rails上构建一些东西,你不妨使用一些你可以在前端获得更多帮助的东西,比如nginx。