Особенности масштабируемости Mochiweb

Из всех статей, которые я до сих пор читал о Mochiweb, я слышал это снова и снова, что Mochiweb обеспечивает очень хорошую масштабируемость. Мой вопрос: как именно Mochiweb получает свойство масштабируемости? Это из внутренних свойств масштабируемости Эрланга или у Mochiweb есть какой-либо дополнительный код, который явно позволяет ему хорошо масштабироваться? Иными словами, если бы я сам написал простой HTTP-сервер на Erlang с простой "петлей" (рекурсивной функцией) для обработки запросов, имел бы ли он такой же уровень масштабируемости, как простой веб-сервер, построенный с использованием инфраструктуры Mochiweb?

ОБНОВЛЕНИЕ: Я не планирую внедрять полноценный веб-сервер, поддерживающий все возможные функции. Мои требования очень специфичны - обрабатывать POST-данные из HTML-формы с фиксированными элементами управления.

2 ответа

Решение

MochiWeb сам по себе не масштабируется, насколько я понимаю. Это быстрая, крошечная серверная библиотека, которая может обрабатывать тысячи запросов в секунду. То, как это происходит, не имеет ничего общего с "масштабируемостью" (кроме корректировки количества mochiweb_acceptorкоторые слушают в любой момент времени).

Что вы получаете с MochiWeb - это надежная библиотека веб-сервера и возможности масштабирования Erlang. Если вы хотите запустить один сервер MochiWeb, при поступлении запроса вы все равно можете перенести работу по обработке этого запроса на любую машину, какую захотите, благодаря инфраструктуре распределенных узлов Erlang и дешевой передаче сообщений. Если вы хотите запустить несколько серверов MochiWeb, вы можете поместить их за балансировщиком нагрузки и использовать распределенные функции mnesia для синхронизации данных сеанса между компьютерами.

Дело в том, что MochiWeb маленький и быстрый (достаточно). Erlang - это мощный инструмент для масштабирования.


Если вы создадите свое собственное серверное решение, вы, вероятно, сможете достичь или превзойти эффективность и "масштабируемость" MochiWeb "из коробки". Но тогда вам придется переосмыслить все, о чем они уже подумали, и вам придется испытать это самостоятельно.

Наверное.:-)

Если бы вы написали веб-сервер, который обрабатывал бы каждый запрос в отдельном процессе (легковесный поток в Erlang), вы могли бы легко достичь такого же "масштабируемости". Конечно, набор функций будет другим, если вы не реализуете все, что есть у Mochiweb.

Erlang также имеет отличную встроенную поддержку для распределения по многим машинам, это может быть возможно использовать для получения еще большей масштабируемости.

Другие вопросы по тегам