0

Почему надежные коллекции пустуют после обновления микросервиса и не вызывают событие OnDataLossAsync для восстановления состояния из внешнего резервного копирования?Сервисная надежность надежных данных потери данных после обновления службы

Мы имеем большую систему масштаба на основе сохраняющих состояния услуг

<StatefulServiceType ServiceTypeName="UserServiceType" HasPersistedState="true" /> 

HasPersistedState устанавливаются как истинный, и данных реплицируются по репликам, в случае данных об отказах ВМ действительных и выздоравливающих с OnDataLossAsync, но после обновления коллекций пусто ,

Я пробовал все варианты обновления (удалить, сохранить, автоматически присвоить), результат же - коллекции пустые.

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

Итак, мы ищем решение, которое позволяет сохранять данные после обновления.

ответ

3

Обновление состояния с сохранением состояния не удалить данные в надежной коллекции по дизайну. Вся платформа Service Fabric построена на решении этой самой проблемы с обновлением на месте обновлений службы состояния.

Предполагаю, что вы на самом деле не выполняете прокатные обновления, а вместо этого вы удаляете и воссоздаете сервис. Именно это делает параметр «Удалить приложение» по умолчанию в режиме отладки приложения Visual Studio - он удаляет приложение, когда вы прекращаете отладку (при этом удаляется состояние). Опция «Автообновление» не удалит приложение и автоматически выполнит обновление для вас при следующем нажатии F5. Если ваше состояние ушло в этом случае, то я готов поспорить, что в вашем сервисном коде есть ошибка. Попробуйте это с новым проектом с поддержкой состояния.

+0

Я пробовал новый проект и обнаружил, что это была наша ошибка. У сервисной ткани есть две конфигурации: один для «режима отладки приложения», который был «Автообновление», а другой - до публикации службы - который не был установлен на MonitoredAuto, после изменение его в MonitoredAuto и изменение версии в службе ApplicationTypeVersion было правильно обновлено. –