ОБЛАСТЬ ТЕХНИКИ
[0001] Заявленное техническое решение в общем относится к области вычислительной техники, а в частности к способу кодирования данных в распределенной системе хранения данных и системе хранения данных.
УРОВЕНЬ ТЕХНИКИ
[0002] В настоящее время, с развитием информационных технологий, существует потребность в хранении больших объемов данных. Так, например, системы хранения данных широко используются для хранения больших объемов цифровых данных, создаваемых и используемых вычислительными системами, такими как облачные системы и т.д. Такие системы спроектированы с учетом мер защиты от повреждения или потери данных. Поэтому последовательное и надежное восстановление данных имеет важное значение, а обеспечение надежного восстановления является существенной задачей в области хранения данных.
[0003] Обычно данные хранятся в распределенных системах хранения данных. В таких системах файлы данных разбиваются на фрагменты и распределяются по различным узлам (серверам) в сети. Каждый сервер содержит только часть данных, и совместно все серверы создают единое хранилище. Это позволяет эффективно управлять большими объемами, обеспечивает отказоустойчивость и высокую скорость доступа. Кроме того, в таких системах существуют механизмы восстановления данных при повреждении какого-либо узла системы хранения данных.
[0004] Одним из способов восстановления данных является репликация данных. При репликации данных блок данных хранится на одном узле системы хранения данных, и по меньшей мере одна копия указанного блока данных реплицируется и сохраняется на втором узле указанной системы. Таким образом, если первый узел выйдет из строя или станет недоступным, блок данных можно будет прочитать из другой копии со второго узла.
[0005] Очевидными недостатками такого механизма отказоустойчивости в системах хранения данных является большой объем памяти, требуемый для хранения всех копий данных хранилища, низкая производительность системы ввиду необходимости дублирования операций с блоками данными и, как следствие, высокий объем сетевого трафика.
[0006] Одним из способов уменьшения объема памяти, используемой при репликации, является использование кодов стирания (erasure code). При кодировании данных кодом стирания группа реплик (полоса данных) заменяется блоком исправления ошибок, например, блоком четности, созданным с использованием данных в каждом из блоков реплик. После формирования блока исправления ошибок реплики удаляются (стираются). Когда какой-либо из узлов с блоком данных в группе выходит из строя или становится недоступным, блок исправления ошибок и другие первичные блоки данных в полосе кодирования могут использоваться для восстановления отсутствующего первичного блока. Этот способ значительно уменьшает объем хранилища и сохраняет надежность данных, однако, имеет ряд трудностей, связанный с количеством обращений к узлам системы при кодировании данных, уменьшении производительности системы, повышении сетевого трафика между узлами, особенно при увеличении числа узлов, участвующих в кодировании.
[0007] Так, из уровня техники известен способ кодирования данных, раскрытый в заявке на патент США №US2022/0413710 А1. Указанное решение, в частности, раскрывает способ отказоустойчивого кодирования данных кодом стирания, дополненный хэшграфом для проверки целостности фрагментов данных, отслеживания версий, обеспечения возможности надежного восстановления фрагментов и шифрования. Для этого на системе хранения данных развернут распределенный реестр, в котором хранятся хэш-значения, содержащие однозначно идентифицирующие физический или виртуальный носитель данных метаданные, метку времени для управления версиями блоков данных. Благодаря применению указанного решения обеспечивается оптимальное сокращение сетевой нагрузки за счет оптимизации поиска/хранения/восстановления данных из хэшей.
[0008] К недостаткам указанного решения можно отнести большое количество обращений к узлам системы при кодировании данных, малую производительность системы. Кроме того, данное решение не обеспечивает возможность использования больших схем кодирования данных ввиду существенного роста нагрузки на вычислительные ресурсы узлы/кластера и роста сетевого трафика между узлами.
[0009] Общими недостатками существующих решений является отсутствие эффективного способа кодирования данных, обеспечивающего сокращение необходимых обращений к хранилищу данных для проведения кодирования, сокращение времени работы системы и увеличении производительности системы. Также, такого рода решение, должно обеспечивать снижение количества сетевых обращений к другим узлам системы и обращения к диску, снижая требования к вычислительным ресурсам узлов. Кроме того, такого рода решение должно обеспечивать возможность эффективной работы на любых размерах схем кодирования данных.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
[0010] В заявленном техническом решении предлагается новый подход к кодированию данных в распределенных системах хранения данных. В данном решении используется алгоритм кодирования данных, обеспечивающий высокую производительность системы, снижение количества обращений к памяти и снижение сетевого трафика системы хранения данных.
[0011] Таким образом, решается техническая проблема повышения эффективности кодирования данных.
[0012] Техническим результатом, достигающимся при решении данной проблемы, является повышение эффективности кодирования данных в распределенной системе хранения данных, за счет снижения количества обращений к узлам распределенной системы хранения данных при кодировании данных.
[0013] Еще одним техническим результатом, проявляющимся при решении вышеуказанной проблемы, является повышение производительности распределенной системы хранения данных.
[0014] Указанные технические результаты достигаются благодаря осуществлению способа кодирования данных в распределенной системе хранения данных, выполняющийся по меньшей мере одним вычислительным устройством, и содержащий этапы, на которых:
a) получают запрос на изменение по меньшей мере одного блока данных в структуре данных, расположенной в распределенной системе хранения данных;
b) записывают по меньшей мере один блок измененных данных, полученный на этапе а), в первое хранилище данных узла хранения данных в виде реплики;
c) определяют месторасположение блоков структуры данных во втором хранилище данных;
d) осуществляют перемещение по меньшей мере одного измененного блока данных во второе хранилище данных, причем в процессе перемещения выполняют кодирование измененного блока данных в ходе которого выполняют:
i. чтение измененного блока данных, записанного в первое хранилище данных узла хранения данных;
ii. чтение изменяемого блока данных из второго хранилища данных узла хранения данных;
iii. определение дельты изменений данных между блоками, полученными на шагах i-ii;
iv. определение дельт блоков исправления ошибок;
е) сохраняют по меньшей мере один закодированный измененный блок данных и по меньшей мере один блок исправления ошибок во второе хранилище данных;
[0015] В одном из частных вариантов реализации способа структура данных представляет собой последовательность блоков данных и/или последовательность блоков данных и блоков исправления ошибок.
[0016] В другом частном варианте реализации способа первое хранилище данных представляет собой виртуальный диск.
[0017] В другом частном варианте реализации способа виртуальный диск состоит из набора упорядоченных структур данных.
[0018] В другом частном варианте реализации способа данные виртуального диска физически размещены на разных серверах распределенной системы хранения данных.
[0019] В другом частном варианте реализации способа первое хранилище данных представляет собой горячее хранилище данных.
[0020] В другом частном варианте реализации способа второе хранилище данных узла хранения данных представляет собой долгосрочное хранилище данных.
[0021] В другом частном варианте реализации способа запись блока данных во второе хранилище данных осуществляется посредством перезаписи предыдущего блока данных.
[0022] В другом частном варианте реализации способа перемещение по меньшей мере одного измененного блока данных во второе хранилище данных выполняется на основе по меньшей мере одного события.
[0023] В другом частном варианте реализации способа событие представляет собой по меньшей мере одно из: заполненность журнала событий, достижение порогового размера изменяемых данных, изменение состояния определенной последовательности блоков данных и блоков исправления ошибок.
[0024] В другом частном варианте реализации способ дополнительно содержит этап записи месторасположения измененного блока данных.
[0025] Кроме того, заявленные технические результаты достигаются за счет распределенной системы хранения данных, содержащей:
- по меньшей мере один процессор;
- по меньшей мере одну память, соединенную с процессором, которая содержит машиночитаемые инструкции, которые при их выполнении по меньшей мере одним процессором обеспечивают выполнение способа кодирования данных.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0026] Признаки и преимущества настоящего изобретения станут очевидными из приводимого ниже подробного описания изобретения и прилагаемых чертежей.
[0027] Фиг. 1 иллюстрирует блок-схему общего вида заявленной системы.
[0028] Фиг. 2 иллюстрирует блок-схему выполнения заявленного способа.
[0029] Фиг. 3 иллюстрирует пример кодирования стиранием при появлении измененного блока данных.
[0030] Фиг. 4 иллюстрирует пример кодирования с использованием заявленного решения при появлении измененного блока данных.
[0031] Фиг. 5 иллюстрирует пример общего вида вычислительного устройства, которое обеспечивает реализацию заявленного решения.
[0032] Фиг. 6 иллюстрирует принцип работы сервера метаданных.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
[0033] Ниже будут описаны понятия и термины, необходимые для понимания данного технического решения.
[0034] Кодирование данных - процесс формирования на основе блоков данных - блоков исправления ошибок (error correction blocks) посредством алгоритма т.н. кодов стирания (кодирование стирания), в общем случае представляющих собой (включая, но не ограничиваясь) коды Рида-Соломона.
[0035] Код стирания (erasure code, кодирование стирания) - это процесс защиты и хранения данных, посредством которого объект данных разделяется на более мелкие компоненты / фрагменты, и каждый из этих фрагментов кодируется с избыточным заполнением данными для обеспечения возможности восстановления исходных данных в случае повреждения какой-либо части закодированных данных. Код стирания преобразует фрагменты объекта данных в более крупные фрагменты и использует первичный идентификатор объекта данных для восстановления каждого фрагмента.
[0036] Блок данных - единица хранения информации, но не конечный файл данных. Каждый блок имеет уникальный идентификатор (ID), который включает адрес, хранящийся в объекте для операций чтения/записи. Размер блоков данных определяется файловой системой.
[0037] Распределенная система хранения данных (Distributed Storage) - это комплекс аппаратных и программных структур, в котором файлы разбиваются на фрагменты (блоки) и распределяются по различным узлам (серверам), физически разнесенным в сети связи. Каждый сервер содержит только часть данных, и совместно все серверы создают единое хранилище. Это позволяет эффективно управлять большими объемами, обеспечивает отказоустойчивость и высокую скорость доступа. В одном частном варианте осуществления, распределенная система хранения данных может представлять программно-определяемую систему хранения данных (SDS), обеспечивающую распределение данных по нескольким узлам и управление хранилищем через программное обеспечение.
[0038] Тиринг данных (tiering data) - это технология, многоуровневого хранения данных с помощью, которой система хранения данных может самостоятельно перераспределять данные по накопителям на основе частоты их использования и значимости.
[0039] Заявленное техническое решение предлагает новый подход, обеспечивающий повышение эффективности кодирования данных в распределенной системе хранения данных, за счет сокращения количества обращений к хранилищу данных в процессе кодирования и отложенного его применения только к изменяемым и измененным блокам, что, как следствие повышает производительность системы и снижает объем сетевого трафика внутри указанной системы. Кроме того, заявленное решение обеспечивает возможность использования схем кодирования данных, при значительном увеличении числа узлов, участвующих в кодировании, с сохранением отказоустойчивости и высокой производительности систем.
[0040] Техническое решение также может быть реализовано в виде распределенной компьютерной системы или вычислительного устройства.
[0041] В данном решении под системой подразумевается компьютерная система, ЭВМ (электронно-вычислительная машина), ЧПУ (числовое программное управление), ПЛК (программируемый логический контроллер), компьютеризированные системы управления и любые другие устройства, способные выполнять заданную, четко определенную последовательность вычислительных операций (действий, инструкций).
[0042] Под устройством обработки команд подразумевается электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (программы)/
[0043] Устройство обработки команд считывает и выполняет машинные инструкции (программы) с одного или более устройства хранения данных, например, таких устройств, как оперативно запоминающие устройства (ОЗУ) и/или постоянные запоминающие устройства (ПЗУ). В качестве ПЗУ могут выступать, но, не ограничиваясь, жесткие диски (HDD), флэш-память, твердотельные накопители (SSD), оптические носители данных (CD, DVD, BD, MD и т.п.) и др.
[0044] Термин «инструкции», используемый в этой заявке, может относиться, в общем, к программным инструкциям или программным командам, которые написаны на заданном языке программирования для осуществления конкретной функции, такой как, например, кодирование данных, обращение к памяти узла хранения данных и т.п. Инструкции могут быть осуществлены множеством способов, включающих в себя, например, объектно-ориентированные методы. Например, инструкции могут быть реализованы, посредством языка программирования Python, С++, Java, Python, различных библиотек (например, MFC; Microsoft Foundation Classes) и т.д. Инструкции, осуществляющие процессы, описанные в этом решении, могут передаваться как по проводным, так и по беспроводным каналам передачи данных, например, Wi-Fi, Bluetooth, USB, WLAN, LAN и т.п.
[0045] На фиг. 1 приведен общий вид распределенной системы хранения данных 100. Система 100 включает в себя основные функциональные элементы, такие как: виртуальное блочное устройство 110, множество узлов хранения данных 1201-120N, множество первых хранилищ данных 130, множество вторых хранилищ данных 140.
[0046] Система 100 может представлять или являться системой хранения данных, содержащей по меньшей мере два узла хранения данных, таких как узлы 1201-120N, связанных между собой посредством сети связи, и обеспечивающей масштабируемое, отказоустойчивое и высокопроизводительное хранение данных за счет распределенной архитектуры, которая позволяет объединять несколько узлов (серверов) в кластер для обработки и хранения данных. Так, в одном частном варианте реализации, указанная система 100 может представлять собой аппаратно-программный комплекс, содержащий физический и логический слои для обеспечения высокой производительности системы и быстроты доступа к данным. Так, система 100 может обеспечивать создание сети хранения данных на неспециализированном оборудовании массового класса, как правило, группе серверных узлов под управлением операционных систем общего назначения. Управление инфраструктурой хранения может осуществляться посредством виртуализации функции хранения, отделяющей аппаратное обеспечение от программного. Кроме того, система 100 может представлять собой систему хранения данных (СХД) на базе комплекса аппаратных и программных средств, который предназначен для хранения и оперативной обработки данных. В качестве носителей данных используются жесткие диски, в основном SSD (системы All Flash Array), а также гибридные решения, сочетающие SSD- и HDD-накопители в одной СХД.
[0047] В еще одном частном варианте осуществления, размещение данных на системе 100 на физическом уровне выполняется с помощью разделения данных на т.н. горячее и холодное (долгосрочное хранение) хранилище (hot, cold), в зависимости от потребности в оперативном доступе к ним (tiering-a). Для данных с высоким спросом чтения-записи (hot-слой) предопределено высокоскоростное хранилище данных на базе дисков SSD. Для данных с низким спросом чтения-записи (cold-слой) может быть предопределено долгосрочное хранилище на базе дисков HDD и/или гибридное хранилище данных.
[0048] Система 100 может быть использована в качестве платформы облачных вычислений, обеспечивающей возможность использования удаленных серверов с получением высокой доступности и масштабируемости; системой хранения данных для массовых средств электронного обмена сообщениями (социальные сети, мессенджеры и т.д.) системой хранения данных для интернета вещей (IoT) и т.д.
[0049] Виртуальное блочное устройство 110 может представлять собой единую точку входа для пользователей/протоколов для взаимодействия с системой 100. Так, в одном частном варианте осуществления устройство 110 может являться экземпляром библиотеки, которая транслирует запросы с использованием RPC API к метадата-серверу, расположенному, например, на узле хранения данных 120 и хранилищам данных, размещенным на множестве узлов 1201, 120N. Соответственно, хранилища данных предназначены для обработки I/O от пользователя/протокола, репликации данных, кодированию данных, восстановлению данных блоков данных. По меньшей мере один сервер метаданных (метадата-сервер, MDS) выполнен с возможностью хранения метаданных хранилищ данных, в том числе месторасположения блоков данных в структуре данных, топологии конфигурации и состояния всего кластера хранения данных, образуемого из по меньшей мере двух узлов 1201, 120N.
[0050] В одном частном варианте осуществления, устройство 110 может содержать интерфейс ввода/вывода, например, GUI и т.д., для получения запроса на изменение блока данных. В еще одном частном варианте осуществления, запрос на изменение блока данных может быть получен автоматически, например, посредством протоколов межмашинного взаимодействия.
[0051] Множество узлов хранения данных 1201, 120N могут представлять собой сервера, каждый из которых содержит операционную систему и хранилища данных, такие как хранилища 130 и 140. Далее в настоящих материалах заявки, множество узлов хранения данных 1201-120N могут упоминаться как узлы хранения данных 120.
[0052] Как упоминалось выше, каждый узел 120 может представлять собой физический сервер, с программно-определяемой системой хранения данных (Software Defined Storage), представляющей собой набор микросервисов с разным ролевым участием, посредством которой образуется распределенный кластер. Т.е. множество узлов 120 образуют кластер данных, объединенный с помощью нескольких сетей через коммутаторы - внутреннюю высокоскоростную сеть (Internal) для обслуживания трафика репликации/синхронизации/кодирования данных и пользовательскую сеть (Public) для пользовательского трафика. Стоит отметить, что пропускная способность Internal сети выше пропускной сети Public для обслуживания дополнительного служебного трафика.
[0053] Далее рассмотрим структуру каждого из множества узлов 120, из которых формируется по меньшей мере один кластер данных. Каждый узел 120 выполнен с возможностью размещения данных на физическом уровне на разных уровнях хранилищ данных (первое хранилище данных 130 и второе хранилище данных 140). Так, в одном частном варианте осуществления разделение данных осуществляется на два уровня хранилищ данных (hot, cold), в зависимости от потребности в оперативном доступе к ним (tiering-a). Для данных с высоким спросом чтения-записи содержится первое хранилище данных 130, которое может представлять краткосрочное или горячее хранилище данных (hot storage). Горячее хранилище данных обеспечивает высокоскоростной доступ к данным на базе дисков SSD. Для данных с низким спросом чтения-записи содержится второе хранилище данных 140, такое как долгосрочное хранилище данных (cold storage) на базе дисков HDD и/или комбинации SSD и HDD.
[0054] Скорость доступа к данным и отказоустойчивость данных в хранилище 130 (горячее хранилище данных) обеспечивается за счет использования репликации, дающей большую скорость доступа и отказоустойчивость, в сравнении с закодированными данными, однако по мере падения спроса к данным на чтение-запись, данные могут проходить процедуру перемещения и кодирования во второе хранилище 140 (долгосрочное хранилище данных).
[0055] Хранение данных осуществляется посредством распределения поступающих на виртуальный диск блоков данных по структурам данных, физически размещаемых MDS-сервером на разных узлах 120 для повышения отказоустойчивости в случае отказа. Так, в одном частном варианте осуществления виртуальный диск размещен на устройстве 110 и является представлением единой структуры, которая посредством взаимодействия, например, посредством протоколов связи, с распределенной системой хранения 100, распределяется по указанной системе 100. В свою очередь, каждая структура данных состоит из полос кодирования (stripes), где одна полоса кодирования, например, состоит из трех блоков с данными и двух блоков исправления ошибок (erasure codes) и записывается обычно как схема кодирования 3+2. Для специалиста будет очевидно, что полоса кодирования может содержать иное количество блоков, определяемое в зависимости от применяемой схемы кодирования данных. Так, например, при использовании больших схем кодирования данных, полоса кодирования может содержать, например, двадцать блоков данных + два блока исправления ошибок и обозначаться как 20+2. Блоки исправления ошибок могут быть определены, например, по алгоритму Рида-Соломона на управляющем сервере, а затем сервер может распределять полосу кодирования по разным хранилищам 140 в соответствии со схемой отказоустойчивости.
[0056] В одном частном варианте осуществления, структура данных, расположенная на виртуальном диске, распределяется по множеству узлов 120, связанных с полосой кодирования указанной структуры данных. Указанное действие определяется посредством метадата серверов (MDS) при создании такой структуры данных. MDS отказоустойчиво хранит и обеспечивает консистентность метаданных между MDS-серверами. Внутри MDS хранятся данные о конкретных хранилищах данных на каждом узле, структуре данных и механизмах распределенных блокировок, работающий по таймауту, для назначения прав доступа на виртуальные диски.
[0057] Так, при запросе пользователем данных с виртуального диска в режиме чтения данных, происходит процесс последовательного запроса месторасположения структуры данных, составляющих конкретный виртуальный диск, на метадата сервер, который предоставляет системе 100 карты размещений и состояний блоков данных из структуры данных, составляющих конкретный виртуальный диск. Соответственно, при осуществлении записи данных выполняется кодирование данных (определение кода стирания) и распределение блоков данных по хранилищам данных.
[0058] На фиг. 2 представлена блок схема способа 200 кодирования данных в распределенной системе хранения данных, такой как система 100, который раскрыт поэтапно более подробно ниже. Указанный способ 200 заключается в выполнении этапов, направленных на обработку различных цифровых данных.
[0059] Заявленный способ 200 направлен на повышение эффективности кодирования данных при перемещении данных из горячих хранилищ данных, таких как хранилища 130 в долгосрочные хранилища данных, такие как хранилища 140. Как указывалось выше, для обеспечения доступности данных и сохранности отказоустойчивости системы 100, а также оптимального хранения/восстановления данных, в системе 100 реализованы механизмы многоуровневого хранения данных (хранилища 130 и 140). Так, как указывалось выше, высокая производительность операций I/O, достигается за счет временного хранения данных в репликах в горячего (краткосрочного) («hot») хранилища, преимущественно размещенном на быстром SSD-диске. Соответственно, после снижения в потребности к таким данным, (например, их перестали перезаписывать и читать длительное время), данные переносятся в долгосрочное хранилище, такое как хранилище 140.
[0060] При этом, при перемещении данных из одного хранилища в другое осуществляется процесс кодирования таких данных, например, посредством формирования и использования так называемых избыточных кодов стирания (erasure codes), вычисляемых, например, по алгоритму Рида-Соломона (или XOR-based и т.д.), вместо хранения реплик данных.
[0061] Существенной проблемой при кодировании данных становится увеличение процессорного времени на узлах и увеличении сетевого трафика между узлами, необходимыми для непосредственно выполнения кодирования, особенно на таких схемах кодирования данных, как схемы 20+2 и т.д, что, соответственно приводит к низкой производительности системы, такой как система 100. Так, при изменении одного блока данных в такой схеме, для кодирования измененного блока данных, требуется чтение 19 блоков данных и последующем перекодировании блоков данных для формирования новых блоков исправления ошибок, что может быть критичным ввиду кратного роста операций чтения недостающих блоков.
[0062] Соответственно, настоящее техническое решения направлено на устранение указанных недостатков за счет использования дельт при кодировании данных, которые будут более подробно раскрыты ниже.
[0063] Основной особенностью заявленного решения является сокращение необходимых обращений к узлам системы при кодировании данных с помощью определения дельт изменяемых блоков данных, которые, так же, как и кодирование стирания, работают по отложенному во времени алгоритму, что дает преимущество в сокращении времени работы и увеличивает производительность системы (производительность системы с применением дельт скалируется (масштабируется, увеличивается) кратно с увеличением схемы кодирования). Дельты формируются на основе версий блоков данных и имеют в свою очередь версии результирующих блоков исправления ошибок, что позволяет сохранять эффективность работы системы вне зависимости от размера схемы кодирования за счет разового чтения блоков данных требуемой версии и исключения, за счет этого, необходимости вычисления всех блоков исправления ошибок (erasure code) для всей полосы кодирования (блоки данных + блоки исправления ошибок).
[0064] Так, возвращаясь к этапам способа 200, на этапе 210 система 100 получает запрос на изменение по меньшей мере одного блока данных в структуре данных, расположенной в распределенной системе хранения данных.
[0065] Так, на указанном этапе 210, система 100, например, посредством устройства 110 получает запрос на изменение по меньшей мере одного блока данных в структуре данных. Запрос на изменение блока данных содержит в себе измененный блок данных. Как указывалось, выше, запрос на изменение блока данных может быть получен посредством RPC API. Указанный запрос поступает к метадата-серверу, расположенному, например, на одном из узлов хранения данных 120. В свою очередь, структура данных представляет собой последовательность блоков данных и/или последовательность блоков данных и блоков исправления ошибок, размещенную на разных физических хранилищах данных (горячее и долгосрочное хранилище данных) в соответствии со схемой распределения данных, описанной выше. Доступ к структуре данных осуществляется через виртуальный диск.
[0066] На этапе 220 записывают по меньшей мере один блок измененных данных, полученный на этапе 210, в первое хранилище данных узла хранения данных в виде реплики.
[0067] Так, на этапе 220 измененный блок данных записывается в первые хранилища данных 130 в виде реплик данных. Как указывалось выше, для обеспечения доступности данных с высоким спросом чтения-записи, измененный блок данных вначале поступает в горячее хранилище данных 130 (hot storage). Горячее хранилище данных обеспечивает высокоскоростной доступ к данным на базе дисков SSD. В одном частном варианте осуществления, блоки данных, в том числе измененный блок данных в структуре данных, размещаются в виде реплик в хранилище данных 130 для обеспечения доступности данных. В еще одном частном варианте осуществления, количество реплик каждого блока данных равно трем.
[0068] Далее, на этапе 230, определяют месторасположение блоков структуры данных во втором хранилище данных.
[0069] На указанном этапе 230, сервер метаданных определяет расположение всех блоков данных в полосе кодирования, которые связаны с измененным блоком данных. Указанный этап 230 необходим для подготовки данных для переноса в долгосрочное хранилище, а также осуществления дальнейшего кодирования данных.
[0070] Сервер метаданных хранит данные о хранилищах данных в каждом узле хранения данных, виртуальных дисках, управляющих серверах, механизмах блокировок. В одном частном варианте осуществления, сервер метаданных (MDS) представляет собой реплицируемую машину состояний (replicared state machine). Взаимодействие между MDS может происходить по RAFT-протоколу, который обеспечивает консистентность метаданных между серверами. Все изменения метаданных хранятся в персистентном слое хранения PebbleDB, основанном на LSM дереве (log structured merge tree). В еще одном частном варианте осуществления, взаимодействие с сервером метаданных происходит посредством API. При изменении данных в системе 100, указанные изменения, например, через RAFT, распределяются на резервные MDS, после успешной репликации, изменения применяются к реплицируемой машине состояния. В еще одном частном варианте осуществления сервер метаданных содержит несколько реплицируемых машин состояний - например данные о физических узлах (состояние, конфигурация и т.д.), количество серверов метаданных в кластере, количество управляющих серверов и их состояние и т.д.
[0071] При запросе клиентом данных с виртуального диска, расположенного на устройстве 110 в режиме чтения данных, происходит процесс последовательного запроса структуры данных, составляющей указанный диск, на сервере метаданных, который сверяет механизмы блокировок и получает чанк мапы (chunk maps) - карты размещений и состояний блоков данных, составляющих виртуальный диск.
[0072] Так, на фиг. 6 раскрывается более подробно принцип работы системы 100 посредством применения карты размещений и состояний блоков данных. Так, пользователь, при обращении к блочному устройству 110, взаимодействует с виртуальным диском. Для совершения действий (чтения блоков) система 100 должна определить список блоков данных, составляющих указанный диск. Стоит отметить, что виртуальный диск представляет собой определенную часть данных, хранящихся в системе 100, и в устройстве 110 может быть расположено множество виртуальных дисков, представляющих ту или иную часть данных, например, размером по 1 ГБ и т.д. Так, в представленном примере, структура данных 620 является частью виртуального диска. Для этого система 100 запрашивает у сервера метаданных 610 (MDS) посредством API карту размещений того или иного блока данных (в нашем случае блоков данных, составляющих структуру данных 620), принадлежащего диску. Так, сервер метаданных 610 опрашивает каждое хранилище данных, расположенное на одном из узлов 120, содержащее указанный блок данных и возвращает указанные блоки пользователю на последующее проведение IO-операций по актуальной карте размещений. После чего возможно проведение операций ввода-вывода (IO).
[0073] Далее способ 200 переходит к этапу 240.
[0074] На этапе 240 осуществляют перемещение по меньшей мере одного измененного блока данных во второе хранилище данных, причем в процессе перемещения выполняют кодирование измененного блока данных в ходе которого выполняют: чтение измененного блока данных, записанного в первое хранилище данных узла хранения данных; чтение изменяемого блока данных из второго хранилища данных узла хранения данных; определение дельты изменений данных между блоками; определение дельт блоков исправления ошибок.
[0075] Так, в одном частном варианте осуществления, на указанном этапе 240, при достижении определенного порогового события, система 100 осуществляет процесс кодирования и перемещения данных из первого хранилища данных 130 во второе хранилище данных 140. Так, событиями могут являться по меньшей мере следующие события: достижение порогового значения времени без перезаписи данных, достижение порогового значения времени без чтения данных, заполненность журнала событий, достижение порогового размера изменяемых данных, изменение состояния определенной последовательности блоков данных и блоков исправления ошибок и т.д. Так, изменение состояния блоков данных может представлять собой лог транзакций - запись всех изменений данных в журнал до того, как эти изменения будут применены непосредственно к данным. Очевидно, инициация переноса данных между хранилищами может выполняться в отложенном режиме в соответствии с наступлением определенного порогового события. Указанная особенность дополнительно обеспечивает повышение производительности системы 100.
[0076] Поскольку данные, в долгосрочном хранилище 140, хранятся вместе с блоками исправления ошибок для обеспечения отказоустойчивости системы 100, то для перемещения измененного блока данных в такое хранилище требуется перекодировать всю полосу кодирования, т.е. заново определить блоки исправления ошибок для всей структуры данных в которой появился измененный блок данных.
[0077] Рассмотрим более подробно процесс кодирования данных в соответствии заявленным техническим решением и стандартным стирающим кодированием.
[0078] Так, на фиг. 3 изображен пример стандартного стирающего кодирования данных одного измененного блока данных B1 в структуре данных A0B1C0.
[0079] Указанный пример отображает перемещение измененного блока данных Bi из первого хранилища данных 130 во второе хранилище данных 140 в разрезе одного узла хранения данных. Как упоминалось выше, структура данных делится на части, обычно кратные определенному блоку файловой системы, которые сохраняются последовательно на каждом долгосрочном хранилище данных (CS), при этом непрерывные последовательные части в пределах конкретного хранилища данных называются стрипами (strip), т.е. это последовательности блоков вида А0[1]-А0[m] в пределах выделенного хранилища. Несколько подряд идущих частей, составляющих логически последовательную цепочку блоков данных (и блоков кодов стирания) - составляют страйп (stripe) и сама структура 3+2 (в нашем примере 3 стрипа данных + 2 стрипа исправления ошибок) называется полосой кодирования (stripe), такая как полоса 430.
[0080] Так, при процессе кодирования стиранием, с учетом архитектурных особенностей системы 100, блок данных В1 появляется в общей структуре данных A0B1C0 на виртуальном диске в виде реплик на хранилищах 130. Для кодирования указанного блока данных и его перемещения в хранилище 140 выполняется вычитывание (получение) измененного блока операцией чтения R1, и вычитывание блоков данных А0В0С0 (где 0 - индексы старых версий данных) из хранилища 140 для последующего определения новых кодов стирания (блоков исправления ошибок) Р0,1,0 и Q0,1,0 (где наборные версии 0,1,0 - упорядоченно нумерованные версии целевых блоков исправления ошибок для соответственных блоков данных A0B1C0). После вычисления новых кодов стирания, система 100, записывает новую версию блока данных B1 в хранилище 140, заменяя блок версии В0, а также новые блоки исправления ошибок P0,1,0 и Q0,1,0.
[0081] На Фиг. 4 изображен пример кодирования данных при помощи заявленного технического решения.
[0082] При использовании заявленного способа 200, при появлении в репликах (горячих хранилищах 130) соответствующих измененных блоков данных B1[2] вместо вычитки полной структуры данных (всех недостающих неизменяемых блоков стрипов) из второго хранилища данных 140, т.е. всех блоков данных из всех хранилищ данных, составляющих указанную полосу кодирования 430 (stripe 3+2) блоков данных предыдущего состояния для пересчета Р и Q, происходит только вычитка измененной части конкретного стрипа предыдущей версии В0[2]с конкретного хранилища данных. Это достигается за счет свойств линейности кодирования стирания с последующим вычислением дельт измененного стрипа.
[0083] Для вычисления дельты изменения блоков данных (в нашем случае это изменяемый блок В0[2] и измененный блок B1 [2]) в настоящем техническом решении может применяться набор коэффициентов кодирования для кодирования блоков данных в блоки исправления ошибок - Yij. Указанный коэффициент выражает возможность каждого блока исправления ошибок быть закодированным путем вычисления линейной комбинации блоков данных. Соответственно, каждый блок исправления ошибок Pi может быть вычислен как сумма произведений коэффициента кодирования и количества блоков в структуре данных, где все арифметические операции выполняются в поле Галуа над единицами кодирования.
[0084] Свойство линейности кодирования со стиранием предоставляет альтернативу вычислению новых блоков исправления ошибок при обновлении некоторых блоков данных из структуры данных. Возвращаясь к настоящему примеру, при изменении блока данных В0[2], блок исправления ошибок Р может быть вычислен на основе предыдущего блока исправления ошибок и разности между измененным и старым блоком данных, помноженных на единый коэффициент кодирования. Таким образом, вместо суммирования по всем блокам данных мы вычисляем новые блоки исправления ошибок на основе изменений блоков данных.
[0085] Так, указанная операция, по сути, эквивалента алгоритму кодирования стирания, но применяемого для отдельных изменяемых данных, с хранением измененного состояния стрипа (включая, но не ограничиваясь) в журналах или, например, сразу накладываемого на изменяемый data-стрип.
[0086] Соответственно, для кодирования данных, на этапе 240, посредством данных, определенных с помощью карты размещений, осуществляется вычитка (получение доступа системой 100) измененного блока данных (B1[2]), записанного в первое хранилище данных узла хранения данных и чтение изменяемого блока данных (В0[2]) из второго хранилища данных узла хранения данных. Принцип чтения данных был подробно описан выше.
[0087] Далее, в соответствии со схемой кодирования, осуществляется кодирование данных, для которого определяются дельты изменений данных между блоками, вычитанными блоками и определение дельт блоков исправления ошибок на основе определенной дельты. Т.е. существенно сокращается количество обращений к узлам системы и повышается производительность системы 100.
[0088] Таким образом, на указанном этапе 240 осуществляется определение новых блоков исправления ошибок посредством вычисления дельт блоков исправления ошибок.
[0089] Далее, на этапе 250 сохраняют по меньшей мере один закодированный измененный блок данных и по меньшей мере один блок исправления ошибок во второе хранилище данных.
[0090] На указанном этапе 250 по меньшей мере один измененный блок данных и полученный по меньшей мере один блок исправления ошибок, определенный на основе дельты измененных блоков и блока исправления ошибок, сохраняются во второе хранилище данных. Кроме того, указанные изменения могут журналироваться, либо изменения данных могут накладываться сразу, а блоки исправления ошибок журналироваться с последующим удалением по меньшей мере одной реплики данных из первого хранилища данных. В еще одном частном варианте осуществления также осуществляют удаление измененного блока данных из первого хранилища данных.
[0091] Таким образом, в вышеприведенных материалах были описаны система хранения данных и способ кодирования данных в распределенной системе хранения данных, обеспечивающий высокую производительность системы, обеспечивающий снижение количества обращений к узлам системы и снижающий сетевой трафик внутри системы.
[0092] На Фиг. 5 представлен пример общего вида вычислительной системы 500, которая обеспечивает реализацию заявленного способа или является частью компьютерной системы, например, устройства ПО, вычислительным узлом 120, сервером, частью вычислительного кластера, обрабатывающим необходимые данные для осуществления заявленного технического решения.
[0093] В общем случае система 500 содержит такие компоненты, как: один или более процессоров 501, по меньшей мере одну память 502, средство хранения данных 503, интерфейсы ввода/вывода 504, средство В/В 505, средство сетевого взаимодействия 506, которые объединяются посредством универсальной шины.
[0094] Процессор 501 выполняет основные вычислительные операции, необходимые для обработки данных при выполнении способа 200. Процессор 501 исполняет необходимые машиночитаемые команды, содержащиеся в оперативной памяти 502.
[0095] Память 502, как правило, выполнена в виде ОЗУ и содержит необходимую программную логику, обеспечивающую требуемый функционал.
[0096] Средство хранения данных 503 может выполняться в виде HDD, SSD дисков, рейд массива, флэш-памяти, оптических накопителей информации (CD, DVD, MD, Blue-Ray дисков) и т.п. Средства 503 позволяют выполнять долгосрочное хранение различного вида информации, например, блоки данных, структура данных, метаданные и т.п.
[0097] Для организации работы компонентов системы 500 и организации работы внешних подключаемых устройств применяются различные виды интерфейсов В/В 504. Выбор соответствующих интерфейсов зависит от конкретного исполнения вычислительного устройства, которые могут представлять собой, не ограничиваясь: PCI, AGP, PS/2, IrDa, FireWire, LPT, COM, SATA, IDE, Lightning, USB (2.0, 3.0, 3.1, micro, mini, type C), TRS/Audio jack (2.5, 3.5, 6.35), HDMI, DVI, VGA, Display Port, RJ45, RS232 и т.п.
[0098] Выбор интерфейсов 504 зависит от конкретного исполнения системы 500, которая может быть реализована на базе широко класса устройств, например, персональный компьютер, мейнфрейм, ноутбук, серверный кластер, тонкий клиент, смартфон, сервер и т.п.
[0099] В качестве средств В/В данных 505 может использоваться: клавиатура, джойстик, дисплей (сенсорный дисплей), монитор, сенсорный дисплей, тачпад, манипулятор мышь, световое перо, стилус, сенсорная панель, трекбол, динамики, микрофон, средства дополненной реальности, оптические сенсоры, планшет, световые индикаторы, проектор, камера, средства биометрической идентификации (сканер сетчатки глаза, сканер отпечатков пальцев, модуль распознавания голоса) и т.п.
[0100] Средства сетевого взаимодействия 506 выбираются из устройств, обеспечивающий сетевой прием и передачу данных, например, Ethernet карту, WLAN/Wi-Fi модуль, Bluetooth модуль, BLE модуль, NFC модуль, IrDa, RFID модуль, GSM модем и т.п. С помощью средств 505 обеспечивается организация обмена данными между, например, системой 500, представленной в виде сервера и вычислительным устройством пользователя, на котором могут отображаться полученные данные по проводному или беспроводному каналу передачи данных, например, WAN, PAN, ЛВС (LAN), Интранет, Интернет, WLAN, WMAN или GSM.
[0101] Конкретный выбор элементов системы 500 для реализации различных программно-аппаратных архитектурных решений может варьироваться с сохранением обеспечиваемого требуемого функционала.
[0102] Представленные материалы заявки раскрывают предпочтительные примеры реализации технического решения и не должны трактоваться как ограничивающие иные, частные примеры его воплощения, не выходящие за пределы испрашиваемой правовой охраны, которые являются очевидными для специалистов соответствующей области техники. Таким образом, объем настоящего технического решения ограничен только объемом прилагаемой формулы.
название | год | авторы | номер документа |
---|---|---|---|
СИСТЕМА ХРАНЕНИЯ ДАННЫХ | 2023 |
|
RU2824327C1 |
СПОСОБ И СИСТЕМА РАСПРЕДЕЛЕННОГО ХРАНЕНИЯ ВОССТАНАВЛИВАЕМЫХ ДАННЫХ С ОБЕСПЕЧЕНИЕМ ЦЕЛОСТНОСТИ И КОНФИДЕНЦИАЛЬНОСТИ ИНФОРМАЦИИ | 2021 |
|
RU2777270C1 |
Интегрированный программно-аппаратный комплекс | 2016 |
|
RU2646312C1 |
СПОСОБ И УСТРОЙСТВО КЭШИРОВАНИЯ БЛОКОВ ДАННЫХ | 2023 |
|
RU2818670C1 |
СПОСОБ И СИСТЕМА ПЕРЕМЕЩЕНИЯ ДАННЫХ В ОБЛАЧНОЙ СРЕДЕ | 2023 |
|
RU2822554C1 |
НАДЕЖНОЕ ЭФФЕКТИВНОЕ ХРАНЕНИЕ В ОДНОРАНГОВЫХ УЗЛАХ | 2007 |
|
RU2435206C2 |
СПОСОБ ЗАЩИТЫ ДОСТУПНОСТИ И КОНФИДЕНЦИАЛЬНОСТИ ХРАНИМЫХ ДАННЫХ И СИСТЕМА НАСТРАИВАЕМОЙ ЗАЩИТЫ ХРАНИМЫХ ДАННЫХ | 2014 |
|
RU2584755C2 |
ГРАНУЛЯРНОЕ УПРАВЛЕНИЕ ПОЛНОМОЧИЯМИ ДУБЛИРУЕМОЙ ИНФОРМАЦИИ ПРИ ПОМОЩИ ОГРАНИЧЕНИЯ И СНЯТИЯ ОГРАНИЧЕНИЯ | 2004 |
|
RU2372649C2 |
СПОСОБ И СИСТЕМА УПРАВЛЕНИЯ ОБЪЕКТАМИ И ПРОЦЕССАМИ В ВЫЧИСЛИТЕЛЬНОЙ СРЕДЕ | 2023 |
|
RU2820753C1 |
СИСТЕМА И СПОСОБ УПРАВЛЕНИЯ ИНЖЕНЕРНЫМИ ДАННЫМИ | 2022 |
|
RU2787261C1 |
Изобретение относится к способу кодирования данных в распределенной системе хранения данных и системе хранения данных. Технический результат заключается в повышении эффективности кодирования данных в распределенной системе хранения данных за счет снижения количества обращений к узлам распределенной системы хранения данных при кодировании данных. Способ содержит этапы, на которых: a) получают запрос на изменение по меньшей мере одного блока данных в структуре данных, расположенной в распределенной системе хранения данных; b) записывают по меньшей мере один блок измененных данных, полученный на этапе а), в первое хранилище данных узла хранения данных в виде реплики; c) определяют месторасположение блоков структуры данных во втором хранилище данных; d) осуществляют перемещение по меньшей мере одного измененного блока данных во второе хранилище данных, причем в процессе перемещения выполняют кодирование измененного блока данных, в ходе которого выполняют: i) чтение измененного блока данных, записанного в первое хранилище данных узла хранения данных; ii) чтение изменяемого блока данных из второго хранилища данных узла хранения данных на основе данных, полученных на этапе с); iii) определение дельты изменений данных между блоками данных, полученными на шагах i-ii); iv) определение дельты изменений по меньшей мере одного блока исправления ошибок на основе дельты изменений данных, полученной на шаге iii); e) сохраняют по меньшей мере один закодированный измененный блок данных и по меньшей мере один блок исправления ошибок во второе хранилище данных. 2 н. и 11 з.п. ф-лы, 6 ил.
1. Способ кодирования данных в распределенной системе хранения данных, выполняющийся по меньшей мере одним вычислительным устройством и содержащий этапы, на которых:
a) получают запрос на изменение по меньшей мере одного блока данных в структуре данных, расположенной в распределенной системе хранения данных;
b) записывают по меньшей мере один блок измененных данных, полученный на этапе а), в первое хранилище данных узла хранения данных в виде реплики;
c) определяют месторасположение блоков структуры данных во втором хранилище данных;
d) осуществляют перемещение по меньшей мере одного измененного блока данных во второе хранилище данных, причем в процессе перемещения выполняют кодирование измененного блока данных, в ходе которого выполняют:
i) чтение измененного блока данных, записанного в первое хранилище данных узла хранения данных;
ii) чтение изменяемого блока данных из второго хранилища данных узла хранения данных на основе данных, полученных на этапе с);
iii) определение дельты изменений данных между блоками данных, полученными на шагах i-ii);
iv) определение дельты изменений по меньшей мере одного блока исправления ошибок на основе дельты изменений данных, полученной на шаге iii);
e) сохраняют по меньшей мере один закодированный измененный блок данных и по меньшей мере один блок исправления ошибок во второе хранилище данных.
2. Способ по п. 1, отличающийся тем, что структура данных представляет собой последовательность блоков данных и/или последовательность блоков данных и блоков исправления ошибок.
3. Способ по п. 1, отличающийся тем, что первое хранилище данных представляет собой виртуальный диск.
4. Способ по п. 3, отличающийся тем, что виртуальный диск состоит из набора упорядоченных структур данных.
5. Способ по пп. 3, 4, отличающийся тем, что данные виртуального диска физически размещены на разных серверах распределенной системы хранения данных.
6. Способ по п. 1, отличающийся тем, что первое хранилище данных представляет собой горячее хранилище данных.
7. Способ по п. 1, отличающийся тем, что второе хранилище данных узла хранения данных представляет собой долгосрочное хранилище данных.
8. Способ по п. 1, отличающийся тем, что запись блока данных во второе хранилище данных осуществляется посредством перезаписи предыдущего блока данных.
9. Способ по п. 1, отличающийся тем, что перемещение по меньшей мере одного измененного блока данных во второе хранилище данных выполняется на основе по меньшей мере одного порогового события.
10. Способ по п. 9, отличающийся тем, что пороговое событие представляет собой по меньшей мере одно из: заполненность журнала событий, достижение порогового размера изменяемых данных, изменение состояния определенной последовательности блоков данных и блоков исправления ошибок.
11. Способ по п. 1, отличающийся тем, что дополнительно содержит этап записи месторасположения измененного блока данных.
12. Способ по п. 1, отличающийся тем, что дополнительно содержит этап удаления измененного блока данных из первого хранилища данных.
13. Распределенная система хранения данных, содержащая:
- по меньшей мере один процессор;
- по меньшей мере одну память, соединенную с процессором, содержащую машиночитаемые инструкции, которые при их выполнении по меньшей мере одним процессором обеспечивают выполнение способа по любому из пп. 1-12.
EP 3961365 A1, 02.03.2022 | |||
Способ получения продуктов конденсации фенолов с формальдегидом | 1924 |
|
SU2022A1 |
Станок для придания концам круглых радиаторных трубок шестигранного сечения | 1924 |
|
SU2019A1 |
Способ регенерирования сульфо-кислот, употребленных при гидролизе жиров | 1924 |
|
SU2021A1 |
Станок для придания концам круглых радиаторных трубок шестигранного сечения | 1924 |
|
SU2019A1 |
Способ получения полировочной пасты для целлюлоида, пленок и поверхностей покрытых нитроцеллюлозным лаком | 1932 |
|
SU31078A1 |
Авторы
Даты
2024-05-21—Публикация
2023-11-01—Подача