Положим у нас есть программы-клиенты которые время от времени подключаются к серверу и работают там со своими данными. Каждый клиент при подключении спрашивает у балансера с каким сервером (из множества серверов) ему нужно работать (где хранятся его данные), подключается к нужному серверу и работает. Время от времени складывается ситуация когда одни серверы простаивают, а другие перегружены - возникает задача переноса данных клиентов с сервера на сервер. Кроме того такая задача может возникнуть просто для обслуживания сервера или замены железа. Клиенты во время работы держат с сервером открытое соединение. Клиенты могут работать относительно долго (часы).
Что использую я: я храню долговременные данные в SQL (postgresql), кеш в NOSQL (memcached). Положим клиент пришел на свой сервер (current) и работает там. Нам нужно перенести клиента и его данные на новый сервер (target). Для переносимого клиента запись начинается в SQL target сервера, а чтение как из SQL current так и из SQL target. Параллельно данные из SQL current переносятся в target. Конечным этапом кеш из NOSQL current сбрасывается в SQL target а клиенту передается команда перейти на target.
Как бы такую задачу решали вы? Какие инструменты бы использовали? Может быть сделали бы для currnet и target общий выделенный SQL сервер? Использовали что-то типа mongodb или сетевых файловых систем? Чем подробней тем интересней, заранее спасибо за ответы!