2

从迄今为止我读过的所有关于 Mochiweb 的文章中,我一遍又一遍地听说 Mochiweb 提供了非常好的可扩展性。我的问题是,Mochiweb 究竟是如何获得其可扩展性属性的?是来自 Erlang 固有的可扩展性属性,还是 Mochiweb 有任何额外的代码可以明确地使其能够很好地扩展?换句话说,如果我自己用 Erlang 编写一个简单的 HTTP 服务器,用一个简单的“循环”(递归函数)来处理请求,它是否具有与使用 Mochiweb 框架构建的简单 Web 服务器相同的可伸缩性?

更新:我不打算实现一个完整的网络服务器,支持所有可能的功能。我的要求非常具体 - 处理来自带有固定控件的 HTML 表单的 POST 数据。

4

2 回答 2

2

大概。:-)

如果您要编写一个在单独的进程中处理每个请求的 Web 服务器(Erlang 中的轻量级线程),您可以轻松达到相同的“可扩展性”。当然,功能集会有所不同,除非您实现 Mochiweb 的所有功能。

Erlang 还内置了对在许多机器之间进行分发的强大支持,这可能用于获得更大的可扩展性。

于 2010-05-25T10:31:20.230 回答
0

据我了解,MochiWeb 本身不可扩展。这是一个快速、小型的服务器库,每秒可以处理数千个请求。它这样做的方式与“可扩展性”无关(除了调整mochiweb_acceptor在任何给定时间正在收听的 s 的数量)。

您使用 MochiWeb 获得的是一个可靠的 Web 服务器库,以及 Erlang 的可扩展性特性。如果您想运行单个 MochiWeb 服务器,当请求进来时,您仍然可以将处理该请求的工作卸载到您想要的任何机器上,这要归功于 Erlang 的分布式节点基础设施和廉价的消息传递。如果您想运行多个 MochiWeb 服务器,您可以将它们放在负载平衡器后面,并使用 mnesia 的分布式功能在机器之间同步会话数据。

关键是,MochiWeb 小而快(足够)。Erlang 是可扩展性的强大工具。


如果您推出自己的服务器解决方案,您可能会满足或超越 MochiWeb 的效率和开箱即用的“可扩展性”。但是你必须重新考虑他们已经想到的一切,并且你必须自己进行战斗测试。

于 2010-08-17T19:25:20.497 回答