Я читал в Orleans FAQ, когда может произойти расщепление мозга, но я не понимаю, что плохого может случиться и как правильно с этим справиться.
FAQ говорит что-то расплывчатое вроде:
Вам просто нужно учитывать редкую возможность иметь два экземпляра актера при написании приложения.
Но как на самом деле я должен это учитывать и что может случиться, если я не буду?
Орлеанский документ (http://research.microsoft.com/pubs/210931/Orleans-MSR-TR-2014-41.pdf) говорит следующее:
приложение может полагаться на внешнее постоянное хранилище для обеспечения более надежной согласованности данных
Но я не понимаю, что это значит.
Предположим, произошло расщепление мозга. Сейчас у меня два экземпляра одного зерна. Когда я отправлю несколько сообщений, они могут быть получены этими двумя (или их может быть даже больше?) разными инстанциями. Предположим, что каждый экземпляр до получения этих сообщений имел одинаковое состояние. Теперь, после обработки этих сообщений, они имеют разные состояния.
Как они должны сохранять свои состояния? Может быть конфликт.
Когда другие экземпляры будут уничтожены и останется только один, что произойдет с состояниями уничтоженных экземпляров? Это будет похоже на то, что сообщения, обработанные ими, никогда не обрабатывались? Затем состояние клиента и состояние сервера можно было бы десинхронизировать IIUC.
Я вижу в этом (расщепление мозга) большую проблему и не понимаю, почему этому уделяется так мало внимания.