У вас есть приложение с микро-социальной сетью, сами ноды в СУБД не ходят, вместо этого они хранят состояние и список успешных операций.
Раз в какое-то время внутренний сервис приходит на ноду спрашивает список операций.
Если нода упадёт и потеряет стейт - ничего страшного.
На ноду приходят запросы вида: добавить пользователя в друзья, удалить пользоватетеля из друзей, забанить пользователя, разбанить пользователя.
Сервис возвращает ошибку если:
добавляют уже имеющегося друга или забаненного или того, у кого ты в забаненных
удаляют несуществующего друга
банят друга
разбанивают незабаненного.
Дружба - рефлексивна. Все операции, завершившиеся успехом должны изменять стейт ноды и сохраняться в списке операций, неуспешных операций в списке не должно быть.
Опишите дизайн решения и используемые конкаренси примитивы.