акторная модель и персистентность
От: Sazon  
Дата: 08.11.19 22:06
Оценка:
Всем привет, такой вопрос.

Есть что-то вроде сервиса приложения (с++), или хост — процесса, подгружающего модули, которые образуют подобие акторной модели взаимодействия
в рамках одного процесса. Обмениваемые данные изначально поступают из внешней среды, например сеть, клиентом которой является каждый из модулей.
Дальнейший межмодульный транзит определен маршртизацией в зависимости от типа сообщения.
Один компонент — отдельный агент-поток со своим неким почтовым ящиком. При разработке системы возникла проблема потери сообщений в ряде случаев.
Это kill -9, отвалилась сеть, модуль нужно перезапустить, аварийное завршение и прочие причины, когда компонент завершит свое исполнние, не разобрав ящик.
Не мог бы кто-то посоветовать, что почитать, какте методики применяются. Какие-то моменты уяснил из документации для akka, но тем не менее. Ситуация усугубляется тем, что при отправке модулем во внешнюю среду сообщения буфферизируются в пачку по N (асинхронность).

У меня лично была мысль такая. Для каждого агента создать что — то вроде mpsc ring buffer на диске, в который отправители сохраняют данные перед передачей в ящик.
Агент при чтении с своего почтового ящика также должен будет вызвать pop() для кольца. Главное только обеспечить одинаковый порядок данных.
При рестарте после внештатной ситуации этот ring buffer разгребается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.