#erlang #lamp #fault-tolerance
#erlang #lamp #отказоустойчивость
Вопрос:
Давайте предположим, что у нас есть веб-проект, в котором мы хотим иметь ~ 10000 веб-клиентов, подключенных к серверу одновременно. Давайте также предположим, что один клиентский сеанс длится около 25 минут.
Если мы сравним стек LAMP или любой другой популярный веб-стек / фреймворк (Ruby on Rails с Apache в Linux и т. Д.) С веб-проектом, созданным на Erlang / OTP — что у Erlang / OTP есть с точки зрения отказоустойчивости, чего нет у других фреймворков?
Какое событие может произойти с клиентом, которое приведет к сбою всего стека LAMP, в то время как Erlang / OTP будет стоять на своем?
Ответ №1:
Обратите внимание, что типичный стек LAMP использует некоторую отказоустойчивость. В частности, если запрос в стеке LAMP завершается с ошибкой, будет выполнен только этот запрос, в то время как остальная часть кода будет выполняться. Этот вид защиты позволяет вам иметь ошибки в одном запросе, не нанося ущерба другим запросам.
Erlang предлагает эту идею «способности справляться с меньшими непредвиденными ошибками» в гораздо более мелком масштабе. В приложении могут быть другие подсистемы, и на них может быть распространена такая же устойчивость к ошибкам. Вы не получите это «бесплатно», но есть инструменты для создания надежной системы. Представьте ошибку клиента в стеке LAMP. Это часто приводит к отключению этого клиента. В Erlang это может быть не так, и клиент может продолжать работать.
Для системы из 10000 клиентов Erlang предоставляет преимущество в том, что у вас может быть процесс для каждого клиента. Или, возможно, 10 процессов на клиента. Это намного сложнее использовать на многих языках, поскольку процесс / поток довольно тяжелый и дорогой. Обратите внимание, что межпроцессное взаимодействие между клиентами легко, даже если некоторые клиенты находятся на другой машине (представьте, что когда-нибудь распространится на распределенный кластер).
Если вы пишете свой код определенным образом, вы можете быть уверены, что в случае сбоя клиента по той или иной причине его состояние будет должным образом очищено другими процессами. Это также может избежать множества мелких неприятных утечек в состоянии.
Комментарии:
1. Недавно нашел это на HN: erlang.org/pipermail/erlang-questions/2012-February/064277.html
Ответ №2:
что у Erlang / OTP есть с точки зрения отказоустойчивости, чего нет у других фреймворков?
Теперь Erlang / OTP имеет очень минимальные, если не нулевые побочные эффекты. Из-за своего параллелизма веб-сервер, подобный yaws
буквально, порождает небольшой веб-сервер для каждого соединения. Если ошибка веб-службы повлияет на одного пользователя в вашем приложении, все остальные пользователи никогда не заметят, и единственный пользовательский процесс может завершиться.
С помощью OTP вы можете создавать приложения с несколькими supervisors
, так что, если сервер выйдет из строя, он будет перезапущен, а также множество других функций и опций, которые могут вам понадобиться.
Дистрибутив Erlang позволяет нам писать распределенные приложения. Я лично использовал yaws web server
при создании веб-приложения.
Мой опыт заключается в том, что какой бы веб-сервер вы ни выбрали, скажем Mochiweb
, учебник, найденный здесь: http://alexmarandon.com/articles/mochiweb_tutorial /, весьма впечатляет по производительности. Фактически, несколько лет назад самая старая версия веб-сервера yaws была помечена как (на тот момент) новейшая версия Apache
, и результаты контрольной оценки очень впечатляют. Когда я просмотрел приложение comet для миллионов пользователей с Mochiweb, в котором есть часть 2 и часть 3, я был впечатлен. Это некоторые из немногих примеров мощных веб-фреймворков, созданных для Интернета.
И, кстати, вы слышали об этих новых решениях, NO SQL Databases
REST (HTTP) interface
разработанных в Erlang / OTP, например, Membase Server [домашняя страница здесь: http://www.couchbase.com/products-and-services/membase-server ], Couch DB и Riak, их производительность очень впечатляет, что означает, что их интерфейс web / REST очень стабилен и благодаря их впечатляющей документированной записи через putони доказали, что их базовая технология (Erlang / OTP) была создана не только для систем с высокой доступностью и отказоустойчивостью, но и для Интернета! Просто прочитайте этот документ: http://blog.couchbase.com/why-membase-uses-erlang
Многие другие веб-фреймворки, построенные на erlang и очень впечатляющие, можно найти на странице wiki здесь: http://en.wikipedia.org/wiki/Erlang_ (programming_language). Возможно, лучшее краткое описание его функций, которые делают его мощным в Интернете, можно найти здесь: http://cs.nyu.edu /~lerner/spring10/проекты/Erlang.pdf