Являются ли сообщения Erlang / OTP надежными? Можно ли дублировать сообщения?

Длинная версия:

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

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

Будут ли все производители автоматически ретранслировать сообщения, которые не были подтверждены, когда потребительские процессы умирают? Если нет, то как это можно считать отказоустойчивым? И если так, что мешает повторной передаче сообщения, которое было обработано - но не совсем подтверждено - и, следовательно, обработано ненадлежащим образом?

(Я признаю, что эти проблемы не являются уникальными для erlang; аналогичные проблемы возникнут в любой системе распределенной обработки. Но энтузиасты erlang, похоже, утверждают, что платформа делает все это "легким" ...?)

Предполагая, что сообщения передаются повторно, я легко могу представить сценарий, в котором последующие эффекты сложной цепочки сообщений могут стать очень запутанными после ошибки. Без какой-либо тяжелой системы распределенных транзакций я не понимаю, как можно поддерживать согласованность и корректность без устранения дублирования в каждом процессе. Должен ли мой код приложения всегда применять ограничения для предотвращения выполнения транзакций более одного раза?

Укороченная версия:

Являются ли распределенные процессы erlang дублирующимися сообщениями? Если да, то является ли защита от дубликатов (т.е. идемпотентности) ответственностью приложения, или erlang / OTP как-то помогает нам в этом?

Ответы на вопрос(3)

Ваш ответ на вопрос