Как erlang отказывается от толерантности или помогает в этом отношении?
Как erlang отказывается от толерантности или помогает в этом отношении?
Ответ 1
Я думаю, что я рассмотрел часть ответа в этом ответе на другой поток.
Ответ 2
Erlang является отказоустойчивым, учитывая следующее:
-
Erlang знает, что ошибки произойдут, и все сломается, поэтому вместо защиты от ошибок Erlang позволяет вам иметь сильные инструменты, чтобы минимизировать влияние ошибок и восстанавливать их, когда они происходят.
-
Erlang поощряет вас программировать случай успеха и сбой, если что-то пойдет не так, не пытаясь восстановить частично сломанные данные. Идея заключается в том, что частично неправильные данные могут распространяться дальше в вашей системе и могут быть записаны в базу данных и, таким образом, представляют опасность для вашей системы. Лучше сначала избавиться от него и сохранить только правильные данные.
-
Изоляция процесса в Erlang помогает минимизировать влияние частично неправильных данных, когда она появляется, а затем приводит к сбою процесса. Система очищает разбитый код и его память, но продолжает работать в целом.
-
Стратегии надзора и перезапуска помогают поддерживать работоспособность вашей системы, если ее части разбились, перезапустив жизненно важные части вашей системы и вернув их в эксплуатацию. Если что-то пошло не так, что перезапуск происходит слишком много, система считается нарушенной без ремонта и, следовательно, отключается.
Ответ 3
Предостережение: Я - Erlang noob.
@Ответ Даниэля в основном правильный. Я настоятельно рекомендую вам найти время, чтобы прочитать создателя Erlang Joe Armstrong thesis (создание надежных распределенных систем при наличии ошибок программного обеспечения). Диссертация дает хорошее объяснение необходимости и решения для разработки надежных распределенных систем. Я считаю, что статья ответит на ваш вопрос удовлетворительно.
Ответ 4
Erlang упрощает создание многих небольших процессов и мониторинг этих процессов. Когда один из этих процессов выйдет из строя, может быть возможно перезапустить эту часть системы, не требуя, чтобы все это было опущено.
Возможно, вы видели что-то подобное в современных версиях Windows: система может перезапустить графический драйвер, если он сработает; он не убивает всю систему.
Чтобы упростить работу с отказоустойчивыми приложениями, Erlang предоставляет концепцию процессов супервизора. Эти процессы контролируют ряд дочерних процессов и знают, как реагировать, если ребенок умирает. Вы можете создать цельное дерево наблюдения, чтобы у вас был прекрасный контроль над тем, как ведут себя разные части приложения. Вы можете прочитать в документации Erlang.