Введение
Тип механизма хранения данных
Адресованное хранилище содержимого (CAS), также известное как хранилище, адресуемое по содержимому, или хранилище с фиксированным содержимым, – это способ хранения информации, позволяющий извлекать её по её содержимому, а не по имени или местоположению. Оно использовалось для высокоскоростного хранения и извлечения фиксированного контента, например, документов, хранящихся для соответствия нормативным требованиям. Адресованное хранилище содержимого аналогично памяти, адресуемой по содержимому. Системы CAS работают, пропуская содержимое файла через криптографическую хеш-функцию для генерации уникального ключа, называемого "адресом содержимого". В каталоге файловой системы хранятся эти адреса и указатель на физическое хранилище содержимого. Поскольку попытка сохранить один и тот же файл будет генерировать один и тот же ключ, системы CAS гарантируют уникальность файлов в хранилище, и поскольку изменение файла приведет к генерации нового ключа, системы CAS обеспечивают уверенность в неизменности файла. CAS стал значимым рынком в 2000-х годах, особенно после принятия в 2002 году закона Сарбейнса-Оксли в США, который требовал хранения огромного количества документов в течение длительного времени с редким обращением к ним. Постоянно растущая производительность традиционных файловых систем и новых программных решений снизила ценность устаревших систем CAS, которые стали все более редкими после примерно 2018 года. Однако принципы адресности контента по-прежнему представляют большой интерес для специалистов в области компьютерных наук и лежат в основе множества новых технологий, таких как файлообмен между узлами сети, криптовалюты и распределенные вычисления.
Подходы, основанные на местоположении
Традиционные файловые системы обычно отслеживают файлы по их имени. На устройствах произвольного доступа, таких как дискеты, это достигается с помощью каталога, состоящего из списка имен файлов и указателей на данные. Указатели ссылаются на физическое местоположение на диске, как правило, используя секторы диска. В более современных системах и для больших форматов, таких как жесткие диски, сам каталог разделен на множество подкаталогов, каждый из которых отслеживает часть общего набора файлов. Подкаталоги сами по себе представлены как файлы в родительском каталоге, формируя иерархическую или древовидную структуру. Последовательность каталогов, ведущая к конкретному файлу, называется "путем". В контексте CAS эти традиционные подходы называют "адресацией по местоположению", поскольку каждый файл представлен списком из одного или нескольких местоположений – путем и именем файла – на физическом носителе. В таких системах один и тот же файл с двумя разными именами будет храниться как два отдельных файла на диске и, следовательно, иметь два адреса. То же самое справедливо, если один и тот же файл, даже с одним и тем же именем, хранится в нескольких местах в иерархии каталогов. Это делает их не совсем подходящими для цифрового архива, где любая уникальная информация должна храниться только один раз.
CAS и FCS
Хотя хранение на основе местоположения широко используется во многих областях, так было не всегда. Ранее наиболее распространенным способом извлечения данных из большой коллекции было использование некоторого идентификатора, основанного на содержании документа. Например, система ISBN используется для генерации уникального номера для каждой книги. Если выполнить веб-поиск по запросу "ISBN 0465048994", будет предоставлен список местоположений, где можно найти книгу "Почему растет информация" по теме хранения информации. Хотя будет возвращено много местоположений, все они относятся к одному и тому же произведению, и пользователь может выбрать наиболее подходящее. Кроме того, если какое-либо из этих местоположений изменится или исчезнет, контент можно будет найти в любом из других местоположений. Поскольку ключи не предназначены для чтения человеком, системы CAS реализуют второй тип каталога, который хранит метаданные, помогающие пользователям найти документ. Они почти всегда включают имя файла, позволяя использовать классический поиск по имени. Но каталог также будет содержать поля для общих систем идентификации, таких как коды ISBN или ISSN, ключевые слова, предоставленные пользователем, временные метки и индексы полнотекстового поиска. Пользователи могут искать в этих каталогах и получать ключ, который затем можно использовать для извлечения фактического документа. Время было подходящим: введение закона Сарбейнса-Оксли в 2002 году потребовало от компаний хранить огромные объемы документации в течение длительного периода времени и обеспечивать ее неизменность. Вскоре появилось несколько аналогичных продуктов от других крупных системных поставщиков. В середине 2004 года отраслевая группа SNIA начала сотрудничество с рядом поставщиков CAS для разработки стандартных правил поведения и взаимодействия для систем CAS. Помимо CAS, появилось несколько аналогичных продуктов, которые добавляли возможности CAS к существующим продуктам; одним из них был IBM Tivoli Storage Manager. Развитие облачных вычислений и связанных с ними эластичных систем облачного хранения, таких как Amazon S3, еще больше снизило ценность выделенных систем CAS. Dell приобрела EMC в 2016 году и прекратила продажи оригинальной Centera в 2018 году в пользу своего продукта эластичного хранения. CAS не использовался в одноранговых приложениях до 2000-х годов, когда быстрое распространение доступа в Интернет в домах и офисах привело к большому количеству пользователей компьютеров, желающих обмениваться файлами, изначально используя централизованные сервисы, такие как Napster. Однако судебный запрет в отношении Napster стимулировал независимую разработку сервисов обмена файлами, таких как BitTorrent, которые нельзя было централизованно закрыть. Для функционирования без центрального федеративного сервера эти сервисы в значительной степени полагаются на CAS для обеспечения точного копирования и простого поиска уникальных файлов. Одновременно с этим, рост движения за открытое программное обеспечение в 2000-х годах привел к быстрому распространению сервисов на основе CAS, таких как Git, система контроля версий, использующая многочисленные криптографические функции, такие как деревья Меркла, для обеспечения целостности данных между пользователями и позволяющая создавать несколько версий файлов с минимальным использованием дискового пространства и сетевого трафика. Примерно в это же время отдельные пользователи криптографии с открытым ключом использовали CAS для хранения своих открытых ключей в системах, таких как серверы ключей. Распространение мобильных вычислений и высокоскоростных мобильных широкополосных сетей в 2010-х годах, в сочетании с растущей зависимостью от веб-приложений для повседневных задач, создало нагрузку на существующую клиент-серверную модель, ориентированную на местоположение, широко распространенную среди интернет-сервисов, что привело к ускорению устаревания ссылок и увеличению зависимости от централизованного облачного хостинга. Кроме того, растущая обеспокоенность по поводу централизации вычислительной мощности в руках крупных технологических компаний, потенциального злоупотребления монопольной властью и проблем конфиденциальности привела к созданию ряда проектов, направленных на создание более децентрализованных систем. Биткойн использует CAS и пары открытых/закрытых ключей для управления адресами кошельков, как и большинство других криптовалют. IPFS использует CAS для идентификации и адресации общедоступных файлов в своей сети. Множество других одноранговых систем, предназначенных для работы на смартфонах, которые часто получают доступ в Интернет из разных мест, используют CAS для хранения и доступа к пользовательским данным как для удобства, так и для обеспечения конфиденциальности данных, например, для безопасного обмена мгновенными сообщениями.
Собственный
Система Centera CAS состоит из серии сетевых узлов (обычно больших серверов, работающих под управлением Linux), разделенных на узлы хранения и узлы доступа. Узлы доступа поддерживают синхронизированный каталог адресов контента и соответствующий узел хранения, где можно найти каждый адрес. Когда добавляется новый элемент данных, или блоб, устройство вычисляет хеш содержимого и возвращает этот хеш в качестве адреса контента блоба. Как упоминалось выше, выполняется поиск по хешу для проверки отсутствия идентичного содержимого. Если контент уже существует, устройству не требуется выполнять дополнительных действий; адрес контента уже указывает на соответствующий контент. В противном случае данные передаются в узел хранения и записываются на физический носитель. Когда устройству предоставляется адрес контента, оно сначала запрашивает в каталоге физическое местоположение указанного адреса контента. Затем информация извлекается из узла хранения, а фактический хеш данных пересчитывается и проверяется. После завершения этого устройство может предоставить запрошенные данные клиенту. В системе Centera каждый адрес контента фактически представляет собой набор отдельных блоков данных, а также необязательные метаданные. Всякий раз, когда клиент добавляет дополнительный блоб к существующему блоку контента, система пересчитывает адрес контента. Для обеспечения дополнительной безопасности данных узлы доступа Centera, когда не выполняется операция чтения или записи, постоянно обмениваются данными с узлами хранения, проверяя наличие как минимум двух копий каждого блоба, а также их целостность. Кроме того, они могут быть настроены для обмена данными с другой системой Centera, например, расположенной на удаленной площадке, тем самым усиливая меры предосторожности против случайной потери данных. IBM предлагает другую реализацию CAS, которая может быть программной (Tivoli Storage Manager 5.3) или аппаратной (IBM DR550). Ее архитектура отличается тем, что основана на иерархическом управлении хранилищем (HSM), что обеспечивает дополнительную гибкость, например, поддержку не только дисков WORM, но и лент WORM, а также миграцию данных с дисков WORM на ленты WORM и наоборот. Это обеспечивает дополнительную гибкость в ситуациях аварийного восстановления и позволяет снизить затраты на хранение за счет переноса данных с дисков на ленты. Другая типичная реализация – iCAS от iTernity. Концепция iCAS основана на контейнерах. Каждый контейнер адресуется по своему хеш-значению. Контейнер содержит различное количество документов с фиксированным содержимым. Контейнер неизменяем, а хеш-значение фиксируется после завершения процесса записи.
Открытый исходный код
Venti: один из первых серверов хранения, адресуемого по содержимому, первоначально разработанный для Plan 9 от Bell Labs и теперь также доступный для Unix-подобных систем в рамках Plan 9 from User Space. Первым шагом к реализации CAS+ с открытым исходным кодом является Twisted Storage. Tahoe Least Authority File Store: реализация CAS с открытым исходным кодом. Git: файловая система CAS, работающая в пользовательском пространстве. Git в основном используется как система контроля версий исходного кода. git annex: распределенная система синхронизации файлов, использующая хранилище, адресуемое по содержимому, для файлов, которыми она управляет. Она полагается на Git и символические ссылки для индексации их местоположения в файловой системе. Проект Honeycomb: API с открытым исходным кодом для систем CAS. XAM: интерфейс, разработанный под эгидой Ассоциации индустрии сетей хранения. Он предоставляет стандартный интерфейс для архивирования продуктов и проектов CAS (и подобных CAS). Perkeep: проект 2011 года, направленный на то, чтобы сделать преимущества хранения, адресуемого по содержимому, доступными широкой публике. Он предназначен для широкого спектра задач, включая распределенное резервное копирование, создание снимков по умолчанию, файловую систему с контролем версий и децентрализованный обмен файлами с контролем разрешений. Irmin: OCaml-библиотека для постоянных хранилищ со встроенными механизмами создания снимков, ветвления и отката; основана на тех же принципах проектирования, что и Git. Cassette: реализация CAS с открытым исходным кодом для C#/.NET. Arvados Keep: система распределенного хранения контента с открытым исходным кодом. Она предназначена для крупномасштабных, вычислительно-интенсивных задач в области науки о данных, таких как хранение и обработка геномных данных. Infinit: платформа хранения контента, адресуемая по содержимому и децентрализованная (peer-to-peer), приобретенная компанией Docker Inc. Межпланетная файловая система (IPFS): протокол распределения гипермедиа, адресуемый по содержимому и работающий по принципу peer-to-peer. casync: утилита для Linux, разработанная Леннартом Поеттерингом для распространения часто обновляемых образов файловой системы через Интернет.
InterPlanetary File System (IPFS): a content addressable, peer to peer hypermedia distribution protocol. casync: a Linux software utility by Lennart Poettering to distribute frequently updated file system images over the Internet.