СИСТЕМА ДЛЯ УПЛОТНЕНИЯ ВРЕМЕННОГО ХРАНИЛИЩА ФАЙЛОВ ВЫДЕЛЕННЫХ СЕРВЕРОВ

Область техники, к которой относится полезная модель
Полезная модель относится к виртуальным частным серверам (от английского - Virtual Private Server, VPS). Более точно, полезная модель относится процедуре размещения, уплотнения и извлечения из кэш-памяти общих файлов виртуальных частных серверов.
Уровень техники
Значительная коммерческая важность технологий хранения данных обусловлена популярностью и успешностью сети Интернет. Обычно индивидуальное приложение для хранения данных (т.е. компьютерная программа) выполняется на выделенном физическом (т.е. реально существующем) основном компьютере (хост-компьютере), обслуживающем клиентские запросы, либо как приложение под контролем общей операционной системы. Однако предоставление отдельного физического основного компьютера для каждого клиента или приложения требует значительных финансовых затрат и неэффективно.
Например, поставщики интернет-услуг иногда предоставляют коммерческие сервисы хостинга, при этом каждому потребителю обычно предоставляется выделенный основной компьютер (сервер), на котором выполняется данное приложение. Однако нередко потребителю, приобретающему услуги хостинга, не требуется вычислительная мощность всего сервера, и потребитель не склонен оплачивать его использование. Как правило, индивидуальному потребителю нужна только часть ресурсов сервера: часть вычислительной мощности, часть пространства памяти его запоминающих устройств, канала связи и т.п.
В связи с этим, на одном физическом компьютере желательно разместить несколько приложений различных пользователей, сгруппированных в виртуальные сервера или контейнеры, а хранение данных виртуальных серверов и их извлечения желательно выполнять с максимальной скоростью, и с минимальным потреблением ресурсов сервера, на котором установлены приложения. Для этого для каждой группы приложений требуется процедура формирования контейнера или изолированного виртуального частного сервера, аналогичного серверному приложению на выделенном физическом сервере. Такая организация вычислений не может быть реализована обычной серверной технологией, поскольку вместо выполнения отдельных дискретных процессов виртуальный частный сервер должен содержать множество как-бы не взаимодействующих друг с другом процессов. Каждый контейнерный процесс выполняет различные элементы функциональности, требуемой потребителю, и каждый процесс использует принадлежащие ему файлы, хранящиеся в изолированной частной зоне виртуального частного сервера (контейнера).
Таким образом, другая проблема организации множества виртуальных частных серверов на едином физическом основном компьютере состоит в предоставлении каждому виртуальному частному серверу (контейнеру) отдельной файловой системы. Файловая система представляет собой организованную совокупность данных, хранящуюся на одном или более физических запоминающих устройствах, например, накопителях на жестких дисках, например, реализованных в виде RAID-накопителей (от английского RAID - Redundant Array of Inexpensive Disks, избыточный массив недорогих дисков).
Как правило, данные хранятся в виде файлов, например, в виде текстовых документов, таблиц с данными, кодов исполняемых программ и т.п. Файлы хранятся во множестве "элементов памяти" запоминающего устройства, для обозначения которых часто используют термины "дисковый блок" или "единица дисковой памяти" (кластер).
Предоставление отдельного физического устройства для хранения файловой системы каждого виртуального частного сервера дорого и неэффективно. Поэтому каждому виртуальному частному серверу (контейнеру) выделяется приватная (т.е. индивидуальная) директория или другим образом организованная область памяти для хранения файлов, используемых данным виртуальным частным сервером. Однако если на физическом основном компьютере реализовано множество идентичных друг другу виртуальных частных серверов, то в своей работе эти виртуальные частные серверы могут хранить и использовать идентичные наборы одинаковых файлов.
Хотя организовать совместное использование файлов несколькими виртуальными частными серверами несложно, однако оснащение контейнеров эффективным методом совместного использования различных совпадающих файлов, когда это явным образом не задано, проблематично.
В патенте США №8577940 B2, опубл. 05.11.2013, международный класс G06F 17/30, предлагается система для использования ссылок на совместно используемые файлы виртуальных частных серверов, расположенных в физическом запоминающем устройстве основного компьютера или сервера. Известная технология существенным образом экономит компьютерные ресурсы, однако каждый запрос к одному и тому же файлу из различных контейнеров сопровождается кэшированием данных, что существенно перегружает систему операциями ввода-вывода.
Таким образом требуется действенная и эффективная система, обеспечивающая экономию не только дискового пространства и ресурсов процессора, но и снижающая количество операций ввода-вывода при кэшировании совместно используемых данных.
На решение указанной задачи направлена настоящая полезная модель.
Решение задачи достигается тем, что система размещения, уплотнения и извлечения файлов выделенных серверов, содержит основной компьютер, обеспечивающий координированный доступ к ресурсам компьютера; хранилище данных, выполненное с возможностью записи на него совокупности файлов выделенных серверов, поддерживаемых блоком обслуживания файловой системы таким образом, что совокупности файлов раздельных выделенных серверов расположены в индивидуальных областях памяти хранилища данных. Система содержит кэш-память дискового запоминающего устройства, выполненную с возможностью временного хранения файлов выделенных серверов. Дополнительно, система содержит блок хранения базы данных, выполненный в виде области памяти, предназначенной для хранения внутренних системных имен файлов выделенных серверов и сопоставленных им метаданным, однозначно соответствующим содержимому файлов, Система содержит, по числу выделенных серверов, блоки поддержки выделенных серверов, выполненные ассоциированными с выделенными серверами с возможностью сбора статистических показателей обращений к файлам соответствующих выделенных серверов и определения метаданных, предназначенных для записи в блок хранения базы данных, а блок размещения и извлечения файлов, выполнен управляющим основным процессором системы таким образом, что изначально для всех файлов обеспечивается хранение файлов виртуальных серверов в кэш памяти в течение заранее заданного времени, после обращения к файлу с использованием кэш памяти, и с обеспечением снятия ограничения по времени для файлов, медаданные которых в блоке хранения базы данных идентичны.
В частном случае реализации полезной модели, блок хранения базы данных выполнен хранящим метаданные файлов, представляющие собой, по крайней мере, контрольную сумму файла, и/или длину файла.
В другом частном случае реализации полезной модели, по крайней мере, один из блоков поддержки выполнен определяющим метаданные измененного файла путем учета изменения файла в ранее вычисленных метаданных.
Краткое описание чертежей На чертежах показано:
на фиг. 1 - схема промежуточного буфера запоминающего устройства согласно варианту осуществления;
на фиг. 2 - графическое представление процедуры формирования контрольной суммы, являющейся суммой файла в контейнере, согласно варианту осуществления;
на фиг. 3 - графическое представление процедуры формирования промежуточного буфера файлов контрольной суммы, согласно варианту осуществления;
на фиг. 4 - графическое представление способа кэширования компьютерных файлов контрольной суммы, согласно варианту осуществления;
на фиг. 5 - пример схемы компьютерной системы, которая может использоваться в настоящей полезной модели;
на фиг. 6 - графическое представление системы размещения, уплотнения и извлечения файлов выделенных серверов.
В предложенной системе имеется хранилище данных, и основной компьютер с одной операционной системой, поддерживающей множество виртуальных частных серверов (виртуальных серверов или контейнеров). Пользователям виртуальных частных серверов доступно, по крайней мере, одно приложение. Каждый виртуальный частный сервер имеет свой собственный виртуальный набор адресов, который включает: адреса оперативного запоминающего устройства (ОЗУ); адреса IP (от английского Internet Protocol - протокол сети Интернет); адреса накопителя на жестких дисках; имена по протоколу SMB (от английского Server Message Block - совокупность серверных сообщений, сетевой протокол удаленного доступа к файлам, принтерам и другим сетевым ресурсам); имена по протоколу TCP (от английского Transmission Control Protocol - протокол управления передачей); имена каналов и т.д. Каждый виртуальный частный сервер имеет свои собственные объекты и файлы, каждый из которых, в свою очередь, имеет уникальный идентификатор.
Каждый из виртуальных частных серверов не может воздействовать на файлы или объекты другого виртуального частного сервера (контейнера), а также не может получить доступ к информации о процессах, выполняемых на другом виртуальном частном сервере. В состав ресурсов сервера входят: пространство виртуальной памяти, выделенное каждому пользователю; пространство памяти подкачки, выделенное в ядре операционной системы для поддержки виртуальных частных серверов; пространство памяти подкачки, используемое ядром операционной системы для поддержки процессов пользователя либо в форме совместного использования, либо в эксклюзивной форме (т.е. для поддержки процессов пользователя либо одного, либо множества виртуальных частных серверов); резидентная память, выделенная в ядре операционной системы; физическая память, используемая процессами пользователя; совместно используемые ресурсы центрального процессорного устройства (ЦПУ); секретные дескрипторы (или иные идентификаторы, относящиеся к разграничению прав доступа пользователей и виртуальных частных серверов); объекты и файлы, используемые ядром операционной системы; интерфейсы ввода-вывода и уровень их использования конкретными виртуальными частными серверами; файловое и (или) дисковое пространство памяти; ограничения, накладываемые на индивидуальные ресурсы пользователя.
Каждый виртуальный частный сервер содержит: совокупность процессов, обслуживающих соответствующих пользователей; совокупность объектов и файлов, ассоциированных с указанным множеством потоков. Согласно варианту осуществления, если виртуальный частный сервер использует файлы для операций чтения и записи, то для каждого из файлов основная управляющая операционная система с помощью хэш-функций вычисляет контрольные суммы. Такие контрольные суммы используются как атрибуты (хэш-атрибуты) или метаданные файла. Указанные значения контрольных сумм формируются при создании файлов (т.е. при выполнении операции закрытия файла). Хэш-атрибуты входят в состав расширенных атрибутов файлов, которые хранятся совместно с файлами.
Когда процесс виртуального частного сервера обращается к файлу, то выполняется проверка его контрольной суммы) на соответствие записям базы данных. И если выявляется идентичный файл с совпадающими значениями контрольной суммы и длины файла в области памяти, то этот файл помещается в кэш-память дискового запоминающего устройства. Контрольная сумма проверяет специальную утилиту ресурса операционной системы. Если контрольные суммы файлов совпадают, и файл уже перемещен в кэш в процессе работы другого контейнера, то файл не копируется. Вместо этого для открытия файла, хранящегося виртуально относящегося к частной директории контейнера, используется ссылка-перенаправление. Файл в пространстве процесса виртуального частного сервера может быть переназначен (т.е. перенаправлен) на кэш-память дискового запоминающего устройства специальной утилитой ядра операционной системы. Затем вместо того, чтобы обращаться к приватному пространству виртуального частного сервера, процессы виртуального частного сервера обращаются к файлу в кэш-памяти дискового запоминающего устройства. Программное обеспечение сервера может представлять собой дополнение к любой из операционных систем: Microsoft Windows NT Server - Terminal Server Edition; Microsoft Windows 2000 Server - Terminal Server; Microsoft Windows Server 2003 - Terminal Services, или любому серверу, основанному на платформе Microsoft Windows. Операционная система содержит совокупность потоков, предназначенных для выполнения запросов пользователей. Виртуальные частные серверы представляются пользователю по существу как выделенные серверы и в общем случае предоставляют функциональность выделенного сервера или удаленного компьютера, включая все операции администрирования.
Виртуальный частный сервер предоставляет пользователям услуги, которые по существу функционально эквивалентны предоставляемым выделенным сервером с удаленным доступом. По сути, с точки зрения администратора, виртуальный частный сервер в настоящей полезной модели является тем же, что и выделенный компьютер, установленный в вычислительном центре и функционирует так же, как и сервер с удаленным доступом, и предоставляет те же услуги, например, через выделенный IP-адрес. Следует учитывать, что некоторые процессы, выполняемые в составе ресурса операционной системы, могут предоставлять услуги множеству виртуальных частных серверов.
В вычислительной системе с одной операционной системой каждый виртуальный частный сервер виртуализирует указанную операционную систему и использует службы операционной системы. Каждый виртуальный частный сервер содержит множество процессов, каждый из которых, в свою очередь, содержит, по крайней мере, один поток, обслуживающий соответствующих пользователей, а также множество объектов и файлов, ассоциированных с указанным потоком (множеством потоков). Процессы виртуального частного сервера используют некоторое число одних и тех же файлов.
Когда процессу виртуального частного сервера требуется обратиться к файлу, то процесс находит ссылку на файл в приватной зоне виртуального частного сервера и обращается к файлу в физическом запоминающем устройстве. Однако такая процедура не всегда работоспособна после восстановления виртуального частного сервера из резервной копии. В таких случаях обычно некоторое число ссылок на файлы виртуального частного сервера не работают или указывают на неверное положение, в связи с чем запуск виртуального частного сервера оказывается невозможным.
Согласно варианту осуществления, когда процессы виртуального частного сервера выполняют операции чтения и записи в файлы, основная управляющая операционная система вычисляет контрольные суммы для каждого из файлов. Специально назначенный блок управления в ядре операционной системы перехватывает операции чтения и записи файлов и, при выявлении файла без общего доступа, выполняет требуемые действия. Хэш сумма или контрольная сумма может быть сформирована при создании файла, а также может быть пересчитана при изменении файла. Контрольные суммы используются в качестве атрибутов файлов. Значение контрольной суммы файла контейнера формируется при создании файла (т.е. при выполнении операции закрытия файла). Контрольные суммы хранятся в базе данных и упорядочены в соответствии со значениями атрибутов размера файла или согласно значениям контрольных сумм, с целью облегчения поиска. Следует учитывать, что в базе данных могут также храниться неупорядоченные записи. Контрольные суммы могут быть объединены в группы.
Первая группа битов контрольных сумм используется в качестве имени папки (группы) и соответствует упорядоченным или неупорядоченным хэш-атрибутам, хранящимся в этой папке. При поступлении нового значения оно направляется в соответствующую папку, такой способ перераспределения файлов с определенными контрольными суммами является разновидностью алгоритма упорядочивания. Например, файл с контрольной суммой “ABCD” может храниться как файл “ABCD”, или же как файл “D” в папке “С”, входящей в папку “В”, которая расположена в корневой папке “А” (которая, тем не менее, может являться папкой более низкого уровня для некоторой другой папки). Буквы “A-D” могут быть числами в шестнадцатеричном коде. Контрольная сумма может также использоваться в качестве адреса запоминающего устройства, в котором хранятся соответствующие данные, например, в качестве пути к файлу с общим доступом. Предложенный способ не обязательно требует дополнительного хранения какого-либо рода.
Когда процесс виртуального частного сервера (контейнера) обращается к файлу, то выполняется сопоставление контрольной суммы с содержимым базы данных. И если выявляется идентичный файл с совпадающими значениями в области памяти (контрольная сумма и длина файла), который уже хранится в кэш памяти, то указанный выше процесс перенаправляется к соответствующей области памяти, а в базе данных делается отметка о времени обращения к файлу. Кэш память может быть выполнена в виде оперативного запоминающего устройства (ОЗУ), в составе сервера, в составе дискового запоминающего устройства или представлять собой другую форму компьютерной памяти с быстрым доступом. Кэш также может располагаться на локальном сервере или на любом сервере кластера или в кластере сервиса облачных вычислений. Следует учитывать, что для виртуальных частных серверов предпочтительно не использовать запросы клиент-сервер. Предпочтительно использовать одиночный локальный вычислительный узел и (или) кластер вычислительных узлов. Указанные операции могут выполняться специальным блоком управления и поддержки пользователя. Затем файлу в приватной директории контейнера назначается ссылка переадресации на его копию в кэш-памяти дискового запоминающего устройства. Далее виртуальный частный сервер обращается к файлу из кэш-памяти дискового запоминающего устройства вместо файла из приватной зоны виртуального частного сервера.
Если файл получен добавлением данных к другому файлу, то суперпозиция старой контрольной суммы и контрольной суммы, вычисленной для добавленных данных равна контрольной сумме, вычисленной для всего файла (нового). Сохранение исходного значения кэша позволяет использовать кэшированный файл различными контейнерами, как аналог существенно отличающихся друг от друга файлов. При этом, в одном случае, кэшированный файл может использоваться, как аналог файла длиной N байт с контрольной суммой k1, а во втором, как файл длиной N+b байт с контрольной суммой k2.
Аналогичный метод может использоваться при удалении данных из файла. При этом может использоваться суперпозиция кэшей разделенных участков файлов.
Иными словами, ядро операционной системы определяет доступ к диску, на котором хранится область памяти файлов. Если выявляются идентичные области памяти, то значение контрольной суммы и длины файла передаются блоку управления и поддержки пространства пользователя. Блок управления и поддержки пространства пользователя (блок поддержки виртуального сервера) представляет собой приложение пространства пользователя, которое проверяет все файлы в контейнере и собирает статистику обращений к файлам. Блок управления и поддержки пространства пользователя может применяться на локальном сервере или на любом сервере кластера или на кластере сервиса облачных вычислений. Например, если блок управления и поддержки пространства пользователя обнаруживает некоторое число файлов в приватной директории контейнера, к которым регулярно обращаются процессы контейнера, то блок пространства пользователя обрабатывает эти сведения и выполняет соответствующие действия.
Ядро операционной системы проверяет, имеют ли файлы идентичные области памяти в базе данных и, если таковые найдены, назначает ссылки-перенаправления на местоположение тех же самых файлов в кэш-памяти дискового запоминающего устройства. Блок управления и поддержки пространства пользователя также освобождает кэш-память дискового запоминающего устройства от устаревших файлов, к которым в течение длительного заранее заданного времени не было обращений.
Если файл открыт для записи, то контрольная сумма файла отбрасывается, и по завершении операции записи в файл формируется новое значение атрибута. Эти действия выполняются обновленной подсистемой ввода-вывода ресурса операционной системы. Согласно варианту осуществления, контрольная сумма формируется при выполнении операции закрытия файла только для файлов, расположенных в директории с атрибутом "checksum = auto" (от английского - "контрольная сумма = автоматически"). Например, директория "/bin" имеет атрибут "checksum = auto".
Если в указанной директории записан файл "/bin/xxx", то для этого файла вычисляется контрольная сумма "XXX" и записывается в атрибут файла "checksum = XXX". Следует учитывать, что, например, директория "/home" не имеет атрибута контрольной суммы, и файлы пользователя в этой директории не подвергаются вычислению контрольной суммы, поскольку вероятность совпадения файлов пользователя крайне мала по сравнению с вероятностью совпадения файлов контейнера.
Согласно варианту осуществления, могут применяться известные алгоритмы хэширования, например, SHA20, Gold Fish, ECB, SHA1, SHA2, SHA256, SHA512 и т.д. Если файл хранится на уровне блоков данных (кластеров), то значение контрольной суммы может изменяться при изменении блоков данных, образующих файл. В таком случае значение контрольной суммы пересчитывается с учетом соответствующего блока данных. Эти операции должны выполняться быстро, в связи с чем рекомендуется использовать простую (короткую) хэш-функцию. Альтернативный вариант заключается в расчете и хранении значений контрольных сумм для каждого блока данных.
Согласно варианту осуществления, число файлов индексных дескрипторов не ограничено, однако ограничен объем доступной для файлов памяти дискового запоминающего устройства. Файлы, к которым не обращались в течение продолжительного времени, удаляются из кэш-памяти и отбрасываются. Проверка обращений к файлам и их удаление могут выполняться другим блоком управления и поддержки пространства пользователя, который сканирует виртуальное запоминающее устройство независимо от пользователей и удаляет файлы. Интервал времени, по истечении которого файл считается устаревшим, устанавливается системным администратором. Альтернативный вариант заключатся в архивации файлов в сжатой форме.
Следует учитывать, что основное преимущество варианта осуществления полезной модели состоит не столько в экономии объема доступной памяти дискового запоминающего устройства, сколько в снижении числа обращений к устройствам данного типа. То есть, достоинствами являются большая производительность и быстродействие системы. Например, в случае, если 100 идентичных виртуальных серверов (контейнеров) случайным образом обращаются к 10 страницам, то общее число обращений по сравнению с обычной системой сокращается на (100-1)×10. Следует учитывать, что 990 случайных обращений к обычному традиционному накопителю на жестких дисках занимает приблизительно 10 с.
Иными словами, вместо того, чтобы считывать один и тот же файл пять раз из пяти различных областей дисковой памяти, файл считывается один раз из кэш-памяти дискового запоминающего устройства. Ядро операционной системы обнаруживает наличие общего файла для заданной области памяти (т.е. наборов метаданных файла, таких, как расширение файла, контрольная сумма, длина файла) и быстро находит файл. Блок управления и поддержки пространства пользователя находит общие для контейнеров файлы на основе статистики обращений к файлам. Блок управления и поддержки пространства пользователя запущен в контейнере приложения с пониженным приоритетом доступа к диску. Кеш чистится по времени с использованием алгоритма двух LRU (Least Recently Used - вытеснение давно неиспользуемых строк) списков. Файлы просто выбрасываются из кэша, а основные файлы теряют метку, при обращении к ним. Блок управления и поддержки пространства пользователя работает в пространстве пользователя, однако она не неподконтрольна пользователям виртуального частного сервера. Предлагаемые блоки управления и поддержки пространства пользователя могут управляться вычислительным узлом администратора (виртуальным частным сервером с индексом "0"), контролируемым системным администратором. В случае, если файл всего лишь переименовывается внутри контейнера без изменения контрольной суммы, то в работе системы принципиально ничего не меняется, и файл может быть прочитан с использованием прежнего значения контрольной суммы. Если изменения в содержимом файла и метаданных затрагивают значение контрольной суммы, то в пространстве памяти контейнера может быть создан новый экземпляр файла, после чего к файлу может быть открыт общий доступ в соответствии с изложенной выше процедурой.
Согласно варианту осуществления, система периодически в автоматическом режиме сканирует контейнеры в поисках идентичных файлов, используя другой блок управления и поддержки пространства пользователя. Файлы копируются в кэш-память и хранятся там в течение установленного времени, по истечении которого файлы удаляются из кэш-памяти или перемещаются на хранение в архив. Это повышает общую производительность системы и эффективность использования ОЗУ при условии, что система оперирует с большим объемом избыточных данных (т.е. с языковыми настройками, специфическими для географического местоположения данными, графическими примитивами и т.д.).
Следует учитывать, что если файл изменяется, то измененный экземпляр файла остается в приватной директории контейнера. При размещении файлов в быстродействующей кэш-памяти дискового запоминающего устройства используется список процессов виртуального частного сервера (контейнера). Файл всегда хранится в приватной директории контейнера. Однако для быстрых операций открытия файлов может использоваться версия файла, предоставляемая механизмом "PFcache". Согласно варианту осуществления, файл виртуального частного сервера (контейнера) остается в приватной директории контейнера и после того, как он копируется в кэш-память дискового запоминающего устройства. В случае миграции контейнера или в случае, если требуется восстановление контейнера из резервной копии, когда указанный файл из кэш-памяти дискового запоминающего устройства недоступен, используется файл, хранящийся в приватной директории.
Когда процесс контейнера пытается обратиться к файлу из приватной директории контейнера, он получает перенаправление на файл, расположенный в кэш-памяти дискового запоминающего устройства. Однако если перенаправление не действует (например, в случае миграции контейнера на другой хост-сервер), то процесс обращается к файлу в приватной директории по пути, хранящемуся в дереве файловой системы. Если доступ к файлу, указанному в перенаправлении, после нескольких попыток не предоставляется, то альтернативный вариант заключается в отбрасывании значения атрибута контрольной суммы. Затем по завершении внесения изменений в файл формируется новое значение атрибута контрольной суммы.
Согласно варианту осуществления, всегда применяются файлы-шаблоны, если таковые имеются в распоряжении. Контрольные суммы кэш-памяти шаблонов рассчитываются заранее. Контрольная сумма рассчитывается каждый раз при модификации или создании нового файла. Каждый файл области памяти, в состав которой входит атрибут, показывающий, была ли рассчитана контрольная сумма и хранится ли она вместе с файлом. Если та же контрольная сумма уже имеется в базе данных, то процесс контейнера перенаправляется на аналогичный файл с той же контрольной суммой, доступную в кэш-памяти дискового запоминающего устройства. Согласно варианту осуществления, контрольные суммы запоминаются автоматически.
На фиг. 1 показана диаграмма работы кэш-памяти запоминающего устройства. Создается файл, вычисляется значение контрольной суммы, это значение помешается в один из вариантов кэш-памяти 110 "centos-6.tgz" шаблона файла и уплотняется (цифра 6 может обозначать номер версии файла, "tgz" - расширение файла, означающее, что это контейнер сжатых данных, а не виртуальный контейнер). Назначается атрибут контрольной суммы файла ("x-attr: csum = HEX 16"). При создании контейнера указанный файл копируется вместе с предварительно рассчитанным значением "x-attr" (значением контрольной суммы) из кэш-памяти шаблонов в файл, уплотняется (виртуальное запоминающее устройство, образ диска) "ploop" (от английского "p"+"loop", в технологии виртуализации OpenVZ - файл, содержащий файловую систему контейнера) 120. Файл "ploop" 120 представляет собой совокупность виртуального блочного устройства и соответствующего драйвера, который получает данные из файла, а не от физического запоминающего устройства. Файл "ploop" 120 является результатом переноса технологии кольцевого запоминающего устройства (от английского - loop device, виртуальное запоминающее устройство, содержащее файловую систему) из операционной системы Linux, которое поддерживает: модульную архитектуру; различные форматы файлов ("плоский", QCOW2 и др.); сетевое хранение и соответствующий протокол сетевой файловой системы NFS; создание моментальных копий содержимого запоминающего устройства и быструю инициализацию через стековые образы и трекер совмещенной записи для ускоренной миграции на лету (живой миграции). Файл "ploop" 120 является виртуальным блочным кольцевым дисковым устройством, которое в дополнение к возможностям устройства типа "ploop" обладает расширенным набором возможностей, в частности обеспечивает динамическое изменение объема, моментальное создание копий содержимого, резервное копирование и т.д. Основная идея состоит в размещении файловой системы контейнера в файле. При создании контейнера файл копируется в директорию 130 "/bin/bash/". Виртуальное запоминающее устройство "ploop" 120 проверяет файлы в приватной директории контейнера "/vz/private/100/fs". Затем, если файл имеет хэш-атрибут (контрольную сумму) "x-attr: csum = HEX 16", то файл помещается в кэш-память локального шаблона 140 "/opt/vzcached-file" совместно с атрибутом контрольной суммы файла "х-attr: csum = HEX 16". Затем файл сохраняется (150) локально по адресу "/opt/cached-file" со своим атрибутом "x-attr: csum = HEX16" для использования контейнером в случаях, когда сохраненный в кэш-памяти файл недоступен (т.е. утерян или усечен).
Файл из кэш-памяти 140 шаблонов "/opt/vzcached-file" перемещается в кэш-память 160 дискового запоминающего устройства "/vz/pfcache/HEX1-2/HEX3-16". Альтернативный вариант заключается в том, что файл из локального запоминающего устройства 130 контейнера "/bin/bash/" не помещается в кэш-память 140, однако помещается к кэш-память 160 дискового запоминающего устройства при необходимости (по запросу) или отложено. Отложенное кэширование означает, что блоки управления пространства пользователя собирает статистику обращений к файлам контейнеров, а ресурс операционной системы по прошествии некоторого времени помещает файлы в кэш-память на основе статистических данных, обработанных блоком управления и поддержки пространства пользователя.
Следует учитывать, что при инсталляции шаблона приложения исходный менеджер пакетов компании Red Hat "RPM" (менеджер пакетов или система управления пакетами) инсталлирует файлы и помощники ядра и вычисляет их контрольные суммы в отложенном режиме. Затем кэш-память 160 обрабатывает контрольные суммы файлов, модифицирует файлы и устанавливает атрибуты "xattrs" файлов. Кроме того, кэш-память 160 обнаруживает копии (клоны) файлов, имеющие то же самое значение области памяти. Клоны могут выявляться путем выполнения процедуры хэширования над файлом и последующего сравнения собственно содержимого файла. Поскольку вероятность совпадения начальных битов различных файлов с одинаковыми значениями контрольных сумм очень мала, то для вынесения решения об идентичности файлов могут сравниваться только предопределенные части файлов - размеры файлов. Следует учитывать, что значения контрольных сумм в данном случае будут идентичны.
Фиг. 2 поясняет процедуру формирования контрольной суммы файла контейнера согласно варианту осуществления полезной модели. Согласно варианту осуществления, при создании контейнера файл вместе с ранее рассчитанным значением контрольной суммы "xattr" извлекается из кэш-памяти шаблонов и копируется в локальное запоминающее устройство 130 "/bin/bash/" контейнера.
При инсталляции соответствующего шаблона приложения исходный менеджер пакетов компании Red Hat или иной менеджер пакетов или инсталлятор устанавливает файлы и, опционально, шаблоны. Ядро принимает участие в этой процедуре и рассчитывает контрольные суммы "x-attr: csum = HEX16" файлов в кэш-памяти 210 "/opt/plesk" в отложенном режиме. Кэш-память 160 (см. фиг. 1) формирует контрольные суммы для измененных файлов и устанавливает значения их атрибутов "x-attr". Затем обновляются значения атрибутов "x-attr: csum = HEX16" файлов в приватной директории "/bin/ls" контейнера.
Фиг. 3 поясняет процедуру заполнения кэш-памяти согласно варианту осуществления полезной модели. Шаблоны приложений устанавливаются менеджером пакетов компании Red Hat (этой процедуре способствует ресурс операционной системы), вычисляются "на лету" значения атрибутов "x-attr". Кроме того, кэш-память 160 пересчитывает значения контрольных сумм тех файлов, которые были изменены по сравнению с состоянием на момент предыдущего вычисления значений контрольных сумм.
Если значение области памяти некоторого файла (контрольная сумма и длина файла) совпадает со значением области памяти другого файла, к которому осуществляется обращение, то ресурс операционной системы может запросить кэширование файла. Например, значения атрибутов файлов, расположенных в приватных директориях контейнеров 310 и 320, одинаковы (совпадают контрольные суммы и длины файлов). Ресурс 330 операционной системы обнаруживает факт использования одного и того же файла (контрольная сумма и длина одинаковы) и уведомляет об этом блок управления и поддержки пользователя кэш-памяти. Блок управления и поддержки пространства пользователя 340 в отложенном режиме принимает решение, следует ли и когда именно выполнить кэширование общего для контейнеров файла. Для ограничения размера кэш-памяти путем использования образа файла применяется виртуальное запоминающее устройство "ploop" 350. Виртуальное запоминающее устройство "ploop" является разновидностью виртуального дискового запоминающего устройства или образа диска с определенными характеристиками и свойствами, описанными выше, снабженного соответствующими программами-драйверами. Следует учитывать, что виртуальное запоминающее устройство "ploop" 350 может применяться как отдельный раздел дискового запоминающего устройства.
Согласно варианту осуществления, для хранения ссылок-перенаправлений как для шаблонов, так и для размещенных в кэш-памяти файлов применяется глобальная кэш-память "/vz/pfcache". Файлы кэшируются в отложенном режиме: изначально кэш-память "pfcache" запоминающего устройства пуста, она заполняется на основе статистики доступа к файлам контейнера, собираемой блоком управления и поддержки пространства пользователя 340 кэш-памяти. Кэш-память запоминающего устройства заполняется динамически, в нее помещаются только общие для контейнеров файлы, к которым происходит обращение. Неиспользуемые файлы удаляются из кэш-памяти по прошествии установленного времени.
Согласно варианту осуществления, в случае модификации файла атрибут контрольной суммы файла очищается ресурсом операционной системы. Файлы, хранящиеся в кэш-памяти, к которым в течение длительного времени не обращаются процессы контейнеров, "отсекаются" блоком управления и поддержки пространства пользователя. Это может выполняться по достижении объема кэш-памяти установленного ограничения.
Когда объем кэш-памяти достигает предельного значения, "старые" файлы перемещаются в поддиректорию (директорию, имеющую более низкий уровень иерархии) "to-be-removed" (от английского - "для удаления"). В свою очередь, все хранящиеся в этой поддиректории файлы должны быть удалены к началу этой операции. Если ресурс операционной системы сообщает, что некоторые из перемещенных файлов все еще используются, то эти файлы блоком управления и поддержки пространства пользователя перемещаются обратно. Превентивную операцию удаления в фоновом режиме выполняет специальный вычислительный поток.
Устаревшие файлы выявляются на основе отметок о времени доступа к файлам. Если происходит обращение к файлу из кэш-памяти с использованием ссылки-перенаправления, основанной на атрибуте контрольной суммы, то ресурс операционной системы обновляет отметку времени доступа к файлу (например, если текущее время отличается на 12 часов от значения отметки времени доступа к файлу).
Следует учитывать, что шаблоны могут помещаться в кэш-память в форме "simfs" (представление в виде памяти дискового запоминающего устройства или виртуальной памяти, используемое в проекте по технологии виртуализации OpenVZ), но с атрибутами, содержащими контрольные суммы файлов. Шаблоны могут быть удалены просто путем удаления помещенного в кэш-память файла "template.tgz" (например, при обновлении).
Виртуальный частный сервер (контейнер) создается путем распаковки кэшированного шаблона контейнера, содержащего файлы и атрибуты. Контейнер может быть удален путем удаления его приватной директории. Следует учитывать, что помещенные в кэш-память файлы удаляются позднее, в зависимости от времени последнего доступа к файлу.
Согласно варианту осуществления, виртуальные частные серверы (контейнеры) могут быть восстановлены, а также могут мигрировать. Легко может создаваться копия контейнера. Преимуществом является то, что не требуются дополнительные действия, поскольку автоматически используются те же самые файлы, расположенные в кэш-памяти (если таковые имеются). В противном случае требуемые файлы создаются по требованию (т.е. в отложенном режиме), если другой контейнер использует те же файлы.
Следует учитывать, что копирование кэш-памяти или шаблонов не требуется. Кэш-память дискового запоминающего устройства воссоздается автоматически (в отложенном режиме и по требованию) в зависимости от обращений к файлам. Согласно варианту осуществления, виртуальный частный сервер (контейнер) может быть обновлен по сравнению с текущим состоянием. Монтируется контейнер, монтируется образ "ploop", затем копируются файлы. Образ "ploop" выглядит аналогично другим образам дисковых накопителей, например, образам типа ISO (от английского International Organization for Standardization - Международная организация по стандартизации) и др. Иными словами, для файла или области памяти файловая система выглядит так, как будто бы она является реальной. Альтернативный вариант заключается в сохранении в запоминающем устройстве файлов (шаблонов) вместе с рассчитанными контрольными суммами.
Согласно варианту осуществления, шаблон приложения инсталлируется следующим образом:
- используется пакет "dpkg" менеджера пакетов компании Red Hat "RPM". Пакет "dpkg" представляет собой сетевой пакет, содержащий исчерпывающую информацию для инсталляции программного обеспечения. Помимо собственно программного обеспечения, в состав этого пакета могут входить руководство пользователя, отладочные данные, настройки и т.д. Пакеты инсталлируются "как есть", после чего выполняется сортировка данных;
- ядро операционной системы способствует инсталляции и формирует "на лету" контрольные суммы файлов, созданных менеджером пакетов компании Red Hat;
- для формирования контрольных сумм используется усиленный алгоритм SHA1 (от английского Secure Hash Algorithm 1 - алгоритм криптографического хэширования тип 1).
Следует учитывать, что скорость вычислений алгоритма SHA1 достаточно высока. С использованием современного программного обеспечения скорость составляет около 300 МБ/с.Это значение сравнимо со скоростью передачи данных высокоскоростного дискового запоминающего устройства. Алгоритм SHA1 формирует значения большой длины (20 байт или 40 шестнадцатеричных слов), в связи с чем они должны быть закодированы в 27-символьный формат атрибута контрольной суммы с использованием алфавита [0, 1, …, 9, a, b, …, z, A, B, …, Z]. Согласно варианту осуществления, значения атрибутов, рассчитанные по правилу "SHA1 + длина файла", сравниваются для выявления совпадающих областей памяти.
Согласно варианту осуществления, блок управления и поддержки пользователя кэш-памяти исполняется с использованием отдельного бинкаунтера пользователя или иного контроллера ресурсов. Бинкаунтеры пользователя являются набором ограничений и могут использоваться для предотвращения перегрузки системы работой блока управления и поддержки пользователя. Бинкаунтеры ресурсов позволяют учитывать и держать под контролем потребление группой процессов ресурсов операционной системы. Полный набор бинкаунтеров пользователя позволяет контролировать:
- пространство памяти ядра операционной системы. Все объекты ядра операционной системы, размещаемые по требованию пользователя, должны учитываться и ограничиваться для предотвращения сбоя типа "отказ в обслуживании" (от английского DoS - Denial of Service), например, страничные таблицы, структуры данных типа "task struct" (структура данных в ядре операционной системы, содержащая необходимую информацию для управления определенным процессом), "vmas" и т.д.;
- страницы виртуальной памяти.
Бинкаунтер пользователя позволяет ограничивать объем памяти, используемый контейнером, и вводит двухуровневое ограничение типа "нехватка памяти", следящее за потреблением контейнером ресурсов запоминающего устройства. Страницы, используемые контейнерами совместно, загружаются корректно в виде частей (процедура настраиваемая). Следует учитывать, что обычно ошибка типа "нехватка памяти" возникает, когда операционная система не может увеличить объем виртуальной памяти, поскольку все доступное пространство памяти запоминающих устройств заполнено. Различные операционные системы, такие как Linux, будут пытаться преодолеть подобную нехватку объема памяти путем прекращения выполнения процессов с низким приоритетом, этот механизм известен как "ООМ Killer" (от английского Out of Memory Killer - устраняющий ошибку типа "нехватка памяти"). В некоторых случаях утечки памяти (т.е. неконтролируемого уменьшения объема свободной памяти компьютера, связанного с ошибками высвобождения ненужных участков памяти) механизм "ООМ Killer" уязвим. Утечка памяти возникает, когда компьютерная программа некорректно выполняет операции размещения в пространстве памяти. В объектно-ориентированном программировании утечка памяти может происходить в случае, если хранящийся в памяти объект оказывается недоступным для выполняемой программы.
Полный набор бинкаунтеров пользователя также позволяет контролировать:
- сетевую буферную память. Эта память включает буферы приема и передачи по протоколу TCP/IP, буферы типа "dgram snd", "unix", "netlink" и др.;
- второстепенные ресурсы, учитываемые по значению:
- задания и файлы; механизмы и объекты "flock", "ptys", "siginfo", "pinned dcache";
- сокеты; механизмы и объекты "mem", "iptentry" (для контейнеров с виртуализированным доступом к локальной вычислительной сети).
Все или некоторые из перечисленных механизмов и объектов могут использоваться для ограничения показателя IOPS (от английского Input/Output Operations Per Second - число операций ввода-вывода в секунду) или пропускной способности или применительно к образу "ploop" (для ограничения объема памяти дискового запоминающего устройства, загруженного в кэш-памятью дискового запоминающего устройства).
Контроллеры ресурса "Virtuozzo™" в дополнение к управлению использованием пространства памяти и ресурсов системы позволяют:
контролировать загрузку ЦПУ; подробные сведения об этом ресурсе приведены в разделе "Управление распределением времени центрального процессора";
контролировать квоты дисковой памяти (см. руководство пользователя программного обеспечения "Parallels Virtuozzo Containers" компании "Parallels", раздел "Управление ресурсами");
формировать и вести учет сетевого трафика (см. руководство пользователя программного обеспечения "Parallels Virtuozzo Containers" компании "Parallels", раздел "Управление ресурсами").
В рассматриваемом случае объем памяти ограничен. Если свободный объем памяти для новых записей отсутствует, то старые данные удаляются. Следует учитывать, что для минимизации времени доступа к файлу в кэш-памяти индексный дескриптор файла, содержащий информацию о перенаправлении, должен быть ограничен в размерах таким образом, чтобы умещаться в один блок данных. Использование алгоритма хэширования типа SHA1 позволяет сформировать индексные дескрипторы требуемой длины.
Если программа-демон является частью менеджера ресурсов, то она может обращаться ко всем файлам контейнеров и может рассчитывать для этих файлов значения хэш-атрибутов. После этого программа-демон может инициировать перемещение и переназначение файлов, к которым должен быть открыт общий доступ.
На фиг. 4 показана схема алгоритма, реализованного в полезной модели.. Первоначально, например, на шаге 410 создается контейнер. На шаге 415 происходит установка или задание времени хранения всех файлов контейнера. На шаге 420 контейнер делает запрос одного файла в процессе работы для дальнейшей работы с ним. На шаге 425 для запрашиваемого файла вычисляются (определяются) атрибуты и записываются в базу данных. На шаге 430 ищутся идентичные хэши. На шаге 435 выполняется проверка условия: если выявлен факт идентичности файлов, то на шаге 440 сбрасывается время хранения для данного хэша и на шаге 445 файлу из приватной директории контейнера назначается ссылка-перенаправление на его копию в кэш-памяти дискового запоминающего устройства. Таким образом, в следующий раз, когда процесс контейнера обращается к упомянутому файлу, процесс перенаправляется на копию файла в кэш-памяти дискового запоминающего устройства. Если же факт идентичности файлов не выявлен, то на шаге 450 производится проверка наличия файла в кэше. На шаге 455 выполняется вторая проверка условия: если файл в кэше не найден, то на шаге 460 файлы копируются на кэш-память диска, если же файл в кэше найден, то на шаге 465 сбрасывается время хранения файлов и далее, на шаге 470 происходит переход к запросу на работу со следующим файлом. На фиг.5 показан пример структурной схемы хост-компьютера или сервера, который может быть использован в настоящей полезной модели. Пример системы, показанный на фиг. 5, содержит вычислительное устройство общего назначения в виде компьютера или сервера 20 или подобного вычислителя, содержащего вычислительное устройство 21, системное запоминающее устройство 22 и системную шину 23, которая объединяет различные компоненты системы, в том числе, системное запоминающее устройство 22 и вычислительное устройство 21. Системная шина 23 может быть шиной любого типа, в том числе, шиной запоминающего устройства или контроллером запоминающего устройства, периферийной шиной, локальной шиной, и быть построена по любой архитектуре шин. В состав системного запоминающего устройства входят постоянное запоминающее устройство (ПЗУ) 24 и ОЗУ 25.
В ПЗУ 24 хранится базовая система ввода-вывода 26, которая содержит базовые процедуры, способствующие передаче информации между составными частями компьютера 20, в частности во время начальной загрузки.
Компьютер 20 может также содержать: накопитель 27 на жестких дисках для чтения и записи информации на жесткие диски (на фиг.5 сами жесткие диски условно не показаны); привод 28 магнитных дисков для чтения и записи информации на сменные магнитные диски 29; привод 30 оптических дисков для чтения и записи информации на сменные оптические диски 31, такие, как CD-ROM (от английского Compact disk read-only memory - компакт-диск - постоянное запоминающее устройство), DVD-ROM (от английского Digital video disc read-only memory - цифровой видеодиск - постоянное запоминающее устройство) или оптические машиночитаемые среды другого типа.
Накопитель 27 на жестких дисках, привод 28 магнитных дисков и привод 30 оптических дисков подключены к системной шине 23 с помощью интерфейса 32 накопителя на жестких дисках, интерфейса 33 привода магнитных дисков и интерфейса 34 привода оптических дисков соответственно. Приводы и соответствующие машиночитаемые среды обеспечивают компьютеру 20 энергонезависимое хранение машиночитаемых инструкций, структур данных, программных модулей и прочих данных.
Несмотря на то, что в описываемом варианте осуществления используется жесткий диск, магнитный диск 29 и сменный оптический диск 31, специалистам в данной области должно быть понятно, что для хранения данных, доступных компьютеру, могут использоваться машиночитаемые среды других типов, в частности магнитные кассеты, карты флэш-памяти, цифровые видеодиски, картриджи для накопителей Бернулли, накопители на ОЗУ и ПЗУ и т.п.
Некоторое число программных модулей может храниться на жестком диске, магнитном диске 29, оптическом диске 31, ПЗУ 24 или ОЗУ 25, в том числе, операционная система 35. Компьютер 20 содержит: файловую систему 36, связанную или входящую в состав операционной системы 35; одну или более прикладных программ 37; другие программные модули 38; данные 39 программ. Пользователь может вводить команды и информацию в компьютер 20 через устройства ввода, такие, как клавиатура 40 и указывающее устройство 42. В состав прочих устройств ввода (на фиг. 5 не показаны) могут входить: микрофон; джойстик; игровой пульт управления; спутниковая антенна; сканер; другие подобные устройства.
Перечисленные и прочие устройства ввода обычно соединяются с процессорным устройством 21 через интерфейс 46 последовательного порта, который подключается к системной шине. Однако указанные устройства ввода могут подключаться и через другие интерфейсы, такие, как параллельный порт, игровой порт, порт USB (от английского Universal serial bus - универсальная последовательная шина). Также к системной шине 23 через интерфейс, такой, как видеоадаптер 48, подключается монитор 47 или устройство другого типа для отображения видеоинформации. Помимо монитора 47, персональные компьютеры обычно содержат другие периферийные устройства вывода (на фиг. 5 не показаны), такие, как громкоговорители и принтеры.
Компьютер 20 может действовать в сетевом окружении с использованием логических подключений к одному или более удаленных компьютеров 49. Удаленным компьютером (компьютерами) 49 могут быть: другой компьютер; сервер; роутер; сетевой персональный компьютер; сетевое устройство, напрямую взаимодействующее с другими устройствами в сетевом окружении; другой узел той же сети. Кроме того, удаленный компьютер 49 обычно содержит многие или все функциональные узлы, описанные выше применительно к компьютеру 20, хотя показано только запоминающее устройство 50. В число логических подключений входят локальная вычислительная сеть (ЛВС) 51 и глобальная вычислительная сеть 52. Описанное сетевое окружение распространено в офисах, вычислительных сетях предприятий, сетях интранет и Интернет.
При использовании в сетевом окружении ЛВС компьютер 20 подключен к ЛВС 51 через сетевой интерфейс (сетевой адаптер) 53. При использовании в сетевом окружении глобальной вычислительной сети компьютер 20 обычно содержит модем 54 или иное средство установления соединения через глобальную вычислительную сеть 52, такую, как Интернет.
Модем 54, который может быть внутренним или внешним, подключается к системной шине 23 через интерфейс 46 последовательного порта. В сетевом окружении программные модули, изображенные относительно компьютера 20 или его частей, могут храниться в удаленном запоминающем устройстве. Следует учитывать, что показанные сетевые подключения служат в качестве примера, и могут использоваться другие средства установления коммуникационного соединения между компьютерами.
На фиг. 6 показано графическое представление системы размещения, уплотнения и извлечения файлов выделенных серверов.
Серверный блок 601, состоящий из совокупности виртуальных частных серверов 602, взаимодействует с блоком хранения базы данных 603, с совокупностью блоков управления и поддержки пользователя 605, с совокупностью блоков размещения и извлечения файлов 608.
Блок хранения базы данных 603 предназначен для хранения внутренних системных имен файлов выделенных серверов, которые собирают статистические показатели обращений к файлам соответствующих выделенных серверов и определяют метаданные.
Блок управления и поддержки пользователя 605 сконфигурирован с возможностью сбора статистики обращений к файлам выделенных серверов, управляющих блоком размещения и извлечения файлов. Кэш-память 607 дискового устройства 606 с возможностью временного хранения файлов выделенных серверов, взаимодействует с блоком размещения и извлечения файлов 608 и областью памяти 604 блока хранения базы данных 603
Блок размещения и извлечения файлов 608 обеспечивается хранение файлов виртуальных частных серверов в кэш памяти в течение заранее заданного времени с обеспечивает снятие ограничения по времени для файлов, метаданные которых в блоке хранения базы данных идентичны.