Я не думаю, что вы можете избежать временного снижения емкости в этом случае, потому что у вас есть система с серверами с несовместимыми кодовыми базами.
Даже если бы вы могли оценить несовместимость формата объекта и его кэшированной версии, а не загружать его из кэша, в конечном итоге вы получите то, что некоторые машины будут читать из / записывать в кэш, а некоторыебудет идти прямо к базе данных, что приведет к непоследовательному доступу к данным, и так далее, и так далее.По сути, этот подход - червячная банка.
Существует лучшее решение .Шаги включают:
- Отключите половину кластера от сети.Вы можете использовать управление коммутатором или балансировщиком нагрузки или любые другие доступные средства.
- Снять эту половину, обновить ее, поднять.
- Подключить ее обратно.
- Отключитьсекунда.
- Повторите # 2 и # 3.
Здесь вы получаете временное снижение емкости, при этом система остается доступной для обслуживания запросов клиентов при обновлении.Это может хорошо работать в непиковые часы.Вы можете улучшить его, направляя новые запросы в обновленную часть кластера, когда он становится все более доступным.Есть и другие варианты, но идея та же - разделяй и властвуй.
Единственное, что важно, чтобы новый и старый кластер не разговаривали друг с другом.Вам понадобится помощь в ваших операциях, но это, безусловно, выполнимо.
Надеюсь, это поможет.
Слава Имешев
Cacheonix: надежный распределенный кэш Java