Как мы сделали собственное S3-совместимое объектное хранилище

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем привет! На связи Виктор Стародуб — технический лидер команды S3, один из авторов и создателей объектного СХД в Cloud.ru. Недавно вышла статья, в которой мой коллега Сергей Лысанов @LysanovSergey рассказал, как мы сделали собственный Software-Defined Storage для дисков виртуальных машин в публичном облаке Cloud.ru Evolution. А в этой статье я расскажу о том, как мы написали свое объектное хранение, имея отказоустойчивое блочное хранилище в качестве базового слоя, с какими сложностями столкнулись, как их решили и какие сделали выводы.

Что такое объектное хранение

Не существует строгого определения объектного хранения. Под объектным хранилищем обычно подразумевается сервис, который обладает типичным набором характеристик:

1. Immutable-данные — объект можно перезаписать только целиком, поменять пару байт в середине объекта нельзя.

2. Key-value — данные доступны только по пользовательскому ключу без каких-либо дополнительных индексов.

3. Универсальность — данные не имеют никакой семантики с точки зрения хранилища. Это не ограничивает сферу применимости, но часто требует дополнительной application-логики.

4. Отказоустойчивость — есть конкретный уровень (или уровни) отказоустойчивости.

5. AWS S3 — де-факто стандарт. Есть базовый набор операций: put, get, list, delete. Есть типичная схема организации хранилища в бакеты и определенные подходы к аутентификации и авторизации.  

Зачем мы создали свое объектное хранилище

Зачем мы решили написать свое объектное хранилище? Во-первых, пользователи нашей платформы Cloud.ru Evolution хотят напрямую использовать такое хранилище для своих данных. Во-вторых, данные нужно хранить самим сервисам платформы — как пользовательские, так и дополнительные, которые нужны для их работы.   

Конечно, для этого есть уже готовые решения, но с ними не все так гладко, как может показаться. Зачастую они плохо масштабируются, когда речь идет о размере даже до десятков, не говоря уже о сотнях петабайт. Возможно, вы и сами слышали истории про то, как разваливаются кластеры CEPH, про разные сложности с его настройкой и поддержанием работоспособности. В случае с коммерческими решениями от различных вендоров многое тоже не идеально — мы уже сталкивались с проблемами совместимости, масштабирования и утилизации оборудования.  

Кажется, что можно просто доработать какое-то из имеющихся open source решений. Но с большой вероятностью это выльется в необходимость поддерживать свой форк, который в том числе включает и ненужный функционал. И наверняка тот, кто пытался коммитить в какие-то большие open source проекты, знает, что зачастую maintainer-ов нужно долго уговаривать, чтобы они приняли большие изменения.

Писать систему хранения совсем с нуля — сложная и долгая задача. Однако низкоуровневая часть такого хранения у нас уже была написана. Была готова наша собственная SDS и мы не могли этим не воспользоваться

Источник: https://habr.com/ru/companies/cloud_ru/articles/850526/


Интересные статьи

Интересные статьи

Привет! Меня зовут Настя Николаева, лид цифровой трансформации в компании Bimeister. И я хочу рассказать, как мы собирали единый роадмап компании с помощью плагина Structure Jira.
Мой CNC-роутер служил верой и правдой два года, но что-то пошло не так слетела прошивка, а был это woodpecker 0.9. Сначала я хотел ее просто перезалить, и, с этой целью раздобыл и...
Предыстория Когда-то у меня возникла необходимость проверять наличие неотправленных сообщений в «1С-Битрикс: Управление сайтом» (далее Битрикс) и получать уведомления об этом. Пробле...
Компании переполнили рынок товаров и услуг предложениями. Разнообразие наблюдается не только в офлайне, но и в интернете. Достаточно вбить в поисковик любой запрос, чтобы получить подтверждение насыще...
Несмотря на то, что “в коробке” с Битриксом уже идут модули как для SOAP (модуль “Веб сервисы” в редакции “Бизнес” и старше), так и для REST (модуль “Rest API” во всех редакциях, начиная с...