#migration #virtual-machine #state
#миграция #виртуальная машина #состояние
Вопрос:
Это очень общий вопрос. Меня немного смущает термин состояние. Я хотел бы знать, что люди подразумевают под «состоянием приложения»? Почему они называют веб-сервер «без состояния», а базу «с сохранением состояния»?
Как передается состояние приложения (в виртуальной машине), когда память виртуальной машины перемещается с одной машины на другую во время оперативной миграции.
Достаточно ли переноса памяти, кэшей и значений регистров системы для переноса состояния запущенного приложения?
Ответ №1:
Вы определенно задали лишний вопрос — к сожалению, слово «состояние» используется в стольких разных контекстах, но каждый из них является допустимым использованием этого слова.
-
Состояние приложения
Состояние приложения — это примерно все содержимое его памяти. С этим понятием может быть сложно разобраться, пока вы не увидите что-то вроде серверных циклов Erlang, которые явно передают все состояние приложения в переменной от одного вызова функции к следующему. В более «обычных» языках программирования «состоянием» программы являются все ее глобальные переменные, статические переменные, объекты, размещенные в куче, объекты, размещенные в стеке, регистры, открытые файловые дескрипторы и смещения файлов, открытые сетевые сокеты и связанные буферы ядра и так далее.
На самом деле вы можете сохранить это состояние и возобновить выполнение процесса в другом месте. BLCR checkpoint tools для Linux делают именно это. (Хотя это крайне необычная задача для выполнения.)
-
Состояние протокола
Состояние протокола имеет другой смысл — отсутствие состояния HTTP-запросов означает, что каждое взаимодействие веб-браузера с веб-серверами, по сути, начинается заново, с нуля — каждый файл cookie повторно передается в обоих направлениях, чтобы попытаться «подделать» некоторое количество «сеанса» ради пользователя. Серверы не содержат никаких ресурсов, открытых для любого данного клиента по всем запросам — каждый начинается с нуля.
Сетевые файловые системы также могут быть без состояния (более ранние версии NFS) или с сохранением состояния (более новые версии NFS). Более ранние версии предполагали, что каждый отдельный пакет чтения, записи или управления метаданными будет фиксироваться по мере поступления, и каждый раз, когда из файла требовался определенный байт, он запрашивался повторно. Это позволило серверам быть очень простыми — они выполняли то, что им указывали клиентские пакеты, и не требовалось никаких усилий для восстановления согласованности серверов и клиентов в случае перезагрузки сервера или исчезновения маршрутизаторов. Однако это плохо сказалось на производительности — каждый клиент запрашивал статические данные сотни или тысячи раз в день. Таким образом, более новые версии NFS допускали некоторое кэширование данных на клиентах и постоянные дескрипторы файлов между серверами и клиентами, и серверы должны были отслеживать состояние подключенных клиентов — и наоборот: клиенты также должны были знать, какие обещания они дали серверам.
Брандмауэр с отслеживанием состояния будет отслеживать активные сеансы TCP. Он знает, какие сеансы системные администраторы хотят разрешить, поэтому он ищет именно эти начальные пакеты. После настройки сеанса он отслеживает установленные соединения как объекты с их собственными правами. (Это был реальный прогресс по сравнению с предыдущими брандмауэрами без состояния, которые рассматривали пакеты изолированно — наборы правил на предыдущих брандмауэрах были намного более разрешительными для достижения тех же уровней функциональности, но допускали слишком много вредоносных пакетов, которые притворялись, что сеанс уже активен.)
Ответ №2:
Состояние приложения — это просто состояние, в котором находится приложение, в зависимости от того, где выполняется программа, и памяти, которая сохранена для приложения. Веб не имеет состояния, что означает, что каждый раз, когда вы перезагружаете страницу, с предыдущей версии страницы не остается никакой информации. Вся информация должна быть повторно отправлена с сервера, чтобы отобразить страницу.
Технически браузеры обходят проблему безгражданства в Интернете, используя такие методы, как кэширование и файлы cookie.
Ответ №3:
Состояние приложения — это хранилище данных, доступное для всех классов. Состояние приложения сохраняется в памяти на сервере и выполняется быстрее, чем хранение и извлечение информации из базы данных. В отличие от состояния сеанса, которое специфично для сеанса одного пользователя, состояние приложения применяется ко всем пользователям и сеансам. Таким образом, состояние приложения является полезным местом для хранения небольших объемов часто используемых данных, которые не меняются от одного пользователя к другому.
Ресурс:http://msdn.microsoft.com/en-us/library/ms178594.aspx
Ответ №4:
Достаточно ли переноса памяти, кэшей и значений регистров системы для переноса состояния запущенного приложения?
Открыт ли в приложении файл, расположенный в байте 225? Если это так, то этот файл является частью состояния приложения, потому что следующий записанный байт должен перейти в позицию 226.
Прошло ли приложение аутентификацию на защищенном сервере с помощью ключа, основанного на времени? Тогда это соединение является частью состояния приложения, потому что, если приложение было приостановлено на 24 часа после сохранения значений памяти, кэша и регистра, когда оно возобновит работу, у него больше не будет действительного соединения с защищенным сервером, поскольку время ожидания истекло.
Вещи, которые делают приложение отслеживающим состояние, легко не заметить.