Вот что я бы предложил. Вместо того, чтобы все клиенты просыпались одновременно и пытались выполнить резервное копирование, пошатывайте время, когда они просыпаются.
Итак, когда клиент просыпается
- Он проверит некоторую таблицу в вашей БД (MYSQL), чтобы увидеть, завершено ли задание резервного копирования или выполняется в настоящее время. Если работа завершена, клиент продолжит выполнять свои обычные обязанности. Вы можете решить, как обрабатывать случай, когда задание выполняется.
- Если клиент обнаружит, что задание резервного копирования не было выполнено в течение дня, он запустит задание резервного копирования. В то же время изменит строку, чтобы указать, что задание резервного копирования запущено. После завершения резервного копирования клиент изменит таблицу, чтобы указать, что резервное копирование завершено.
Этот подход предотвратит скачок в сетевой активности, а также может обеспечить элементарную форму аварийного переключения. Таким образом, если один клиент выходит из строя, другой клиент позднее может попытаться выполнить резервное копирование. (хотя это немного сложнее. В основном все сводится к тому, что клиент должен делать, когда видит, что выполняется резервное копирование).