Надёжность в сложных системах
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 17.11.15 08:01
Оценка:
Здравствуйте, коллеги.

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

А проблема, если вкратце, вот в чём.
На данный момент, если пользователь вводит что-то через вёб-интерфейс, это в фоне может запустить дополнительную обработку данных на бэкенде, при этом бэкенд может запрашивать вспомогательные сервисы, которые в свою очередь могут инициировать дополнительные запросы. Если эти сервисы находят какую-то проблему, они отправляют вёб-интерфейсу уведомление. Но если какой-то из сервисов попросту упал, то пользователь не сможет понять — толи оно проблем не находит, толи оно просто отвалилось и не работает.
При этом, отвалиться может и сам пользователь — браузер повис или интернет у него отвалился. При восстановлении соединения клиент должен продолжить работу.
Я так понимаю, некоторые модули нужно соединять через MSMQ или подобные очереди сообщений — так мы сможем гарантировать, что даже если сервис упал и перезагрузился, то нужные сообщения он получит. Плюс, вероятно, понадобится добавить какой-то диспетчер этих отложенных действий чтобы клиент мог узнать — не запущена ли для него какая-то фоновая задача.
А хочется мне посмотреть/почитать/пощупать описание архитектуры таких систем — фактически мне нужна транзакционность для задач, распределённых по разным программным модулям. И в тоже время, оно должно вести себя как "workflow" в Windows Workflow Foundation — обеспечивать выполнение задачи, даже если система была перезагружена или остановлена во время работы. Вот есть у меня подозрения, что за основу в этом случае и надо брать Windows Workflow, но как на этом построить взаимодействие нескольких систем — пока что-то не придумал.

Вся система пока ещё на написания, т.е. все модули при необходимости можно слегка переделать.

Пните в нужном направлении.
С уважением, Artem Korneev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.