Шаблоны асинхронного подтверждения дизайна? - PullRequest
0 голосов
/ 10 января 2019

У меня есть сервер, который отправляет команды на другие серверы, и я хочу спроектировать систему подтверждения, чтобы мой сервер знал, были ли выполнены команды.

В большинстве случаев это просто, другой сервер может просто отправить обратно сообщение, когда команда завершена или она аварийно завершается.

Часть, на которой я застрял, - это что если один из серверов отключится после получения команды? Некоторые из этих команд могут выполняться очень долго (например, 20 минут). И если сервер восстанавливается после сбоя, он не будет продолжать выполнять команду.

Так что это означает, что я не могу просто сохранить очередь неподтвержденных команд и считать их неудачными, если проходит заданное количество времени, так как эти команды могут занять много времени в зависимости от ситуации.

Я также не могу просто проверить связь с серверами, чтобы проверить, исправны ли они, поскольку они могли восстановиться после сбоя.

В настоящее время нет способа проверить текущую активность сервера.

В идеале, я бы хотел избежать опроса, чтобы уменьшить накладные расходы.

Существуют ли шаблоны проектирования, которые будут работать для этого?

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

...