Преимущества использования веб-сервера Erlang для веб-приложения

Примечание. На этот вопрос сильно влияет основное требование к создаваемому веб-приложению: высокая доступность и отказоустойчивость. Все остальные требования (например, масштабируемость и количество пользователей) здесь не обсуждаются.

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

Было предложено использовать что-то вроде Mochiweb в качестве бэкэнда и Django/Ruby on Rails в качестве внешнего интерфейса с использованием JSON и сервис-ориентированной модели.

Единственное очевидное преимущество этого подхода, которое я могу понять, заключается в том, что разработка интерфейсной части происходит "как обычно" - обычные MVC-компоненты, Ruby on Rails или любые другие распространенные фреймворки по выбору.

Но как насчет других преимуществ? Они действительно существуют?

Конечно, Erlang/OTP добавляет отказоустойчивость к рассматриваемой системе, но разве добавление веб-интерфейса не снижает этот уровень отказоустойчивости до гораздо более низкого уровня?

Разве мы не вводим "единую точку отказа", связывая Ruby on Rails с Mochiweb? Конечно, Mochiweb может справиться с неисправностями, но что, если что-то не так случится на внешней стороне?

3 ответа

Решение

Технически платформа Erlang/OTP сама по себе ничего не делает для отказоустойчивости и высокой доступности. Это просто позволяет легко реализовывать параллельное и распределенное программное обеспечение. Веб-сервер Erlang, работающий на одной машине, может выйти из строя, как и все остальные, только из-за аппаратного сбоя

Таким образом, для сайтов высокой доступности важнее иметь надлежащие сценарии резервирования и резервирования для случаев сбоев аппаратного и программного обеспечения, а не использовать какой-либо конкретный программный стек или платформу. Возможно, это будет немного легче реализовать в Erlang по сравнению с другими платформами (если вы, конечно, знакомы с ним), но абсолютно таких же результатов можно достичь, используя чистый Ruby/Python/Java/C или почти любую другую.

Веб-индустрия обладает огромным опытом настройки отказоустойчивых интерфейсов. Это всего лишь вопрос настройки нескольких веб-машин (часто легких обратных прокси-серверов) и некоторого рода менеджера высокой доступности (встроенного во многие решения для балансировки нагрузки). Бэкэнд обычно является более сложной частью.

Я бы не стал использовать Erlang в качестве интерфейсного веб-сервера, если в качестве серверной части используется какая-то другая технология.

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

Если вы собираетесь что-то построить на Rails, вы можете также использовать что-то, с чем вы можете получить больше помощи во внешнем интерфейсе, например, nginx.

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