Хабр, привет! Сегодня у нас подборка перспективных open source решений, которые могут упростить хранение данных и работу с ними в облаке. Говорим про Garage, LinDB, LitData и Triplit.

Если вам нужно надежное решение для работы со структурированными данными с возможностью практически неограниченного масштабирования, сервисы MWS помогут организовать полный цикл работы с данными. Вы сможете создать собственную DWH-платформу с масштабированием по клику.

Garage

Self-hosting хранилище, построенное на базе API S3. Проект был запущен некоммерческой организацией Deuxfleurs в 2020 году. Компания развивает высокодоступную геораспределенную облачную инфраструктуру. Поэтому неудивительно, что Garage позволяет хранить изображения, видео и документы в многоузловой среде и ориентирован на гиперконвергентные системы.

Запросы на извлечение данных через S3 API разрешаются в конкретный объект в бакете. Объекты распределены по нескольким узлам, и чтобы обеспечить согласованность Garage объединяет ноды в кворум. Среди преимуществ инструмента выделяют простоту и производительность, так как он нетребователен к железу. Легкие файлы Garage обрабатывает куда быстрее решений-конкурентов вроде Minio.

Однако есть и недостатки — например, некоторые пользователи отмечают неудобства, связанные с протоколом аутентификации AWS sigv4, который применяет Garage. По их мнению, он добавляет сложность проектам. Плюс решение не обеспечивает совместимость с POSIX, а синхронизация реализована через сетевые сообщения, что серьезно ограничивает возможности для развертывания сервера.

Также стоит отметить особенность работы Garage при удалении данных. Удаление таблиц и блоков происходит с задержкой. Ограничения по времени предотвращают повторное появление удаленных данных после ребалансировки. Для совершенствования данного подхода необходим более сложный механизм, отключающий сборщик мусора во время передачи данных, но он пока не реализован.

Разработчики Garage предоставили подробную документацию и руководства по быстрому старту, которые помогут с установкой и настройкой. Например, там можно найти инструкции по генерации первого конфиг-файла. Там же выложены инструкции по установке на различные ОС: Alpine Linux, Arch Linux, FreeBSD и NixOS.

LinDB

Распределенная система управления базами данных временных рядов, написанная на Go. Проект запущен в 2016 году компанией ELEME в качестве замены Graphite. С тех пор решение было переписано трижды. Версия с открытым исходным кодом появилась только в 2019 году.

LinDB позволяет обрабатывать более миллиона операций записи в секунду на одном сервере благодаря методу сжатия данных и параллельной обработке запросов. При этом данные разбиваются на части и размещаются на разных шардах. Каждый шард может иметь несколько реплик, минимизирующих несогласованность данных. Что касается хранилища «ключ — значение», то его структура похожа на LSM-дерево с некоторыми отличиями. Например, в качестве типа для ключей выбран uint32, поскольку строки преобразуются в него на основе временных характеристик.

В целом LinDB легко масштабируема и подходит для развертки в облачной инфраструктуре с несколькими дата-центрами. Решение распространяется бесплатно под лицензией Apache License 2.0. Подробные инструкции по установке и настройке системы можно найти в официальной документации в GitHub-репозитории проекта.

Triplit

Система управления базами данных, также работающая на стороне клиента и ориентированная на веб-разработчиков, которые могут задавать схемы в TypeScript. Все запросы обновляются в реальном времени как при изменениях на сервере, так и локально. Triplit также обеспечивает инкрементальные обновления и разрешение конфликтов на уровне свойств объекта, а благодаря CRDT, клиенты могут работать в офлайн-режиме и актуализировать данные при подключении к сети.

Решение легко интегрировать с существующими проектами: Triplit Server можно хостить самостоятельно, или использовать управляемый инстанс в облаке, который предлагают разработчики. Они планируют добавить API для аутентификации, загрузки файлов и мониторинга пользователей, схожий с Supabase или Firebase.

Однако есть и недостатки, среди которых выделяют отсутствие агрегирующих функций в языке запросов Triplit. Также пользователи отмечают недостатки сопроводительной документации, в которой сложно разобраться. Например, найти информацию о генерации токена для аутентификации при самостоятельном размещении сервера. В любом случае оценить качество документации вы можете самостоятельно. Она доступна на сайте решения и включает инструкции по настройке и работе с ним.

Кстати, в тематических тредах в качестве альтернативы Triplit, упоминается Evolu, который предлагает более знакомый многим специалистам подход к запросам.

LitData

Библиотека LitData предназначена для масштабирования задач, связанных с обработкой данных (скрейпинга данных, масштабирования изображений, формирования эмбеддингов) в машинном обучении. Проект распространяется под лицензией MIT. 

LitData поддерживает работу с данными, хранящимися в облаке, без необходимости загружать их локально. Данные транслируются во время обучения ML-модели, а функция optimize на лету преобразует их в оптимальный формат. Отдельно стоит выделить функцию параллельной обработки:

map(
    download,
    inputs=metadata,
    output_dir="/teamspace/datasets/segment-anything/raw",
    num_workers=os.cpu_count(),
    machine=Machine.DATA_PREP,
    num_nodes=8,
)

Именно она позволяет выполнять различные операции с данными: менять размеры изображений и формировать векторные представления на нескольких машинах одновременно. Одной из ключевых особенностей решения также можно считать возможность приостановить потоковую передачу данных во время длительного обучения и возобновить ее без потерь ровно с того места, где она была прервана.

Больше open source подборок у нас в блоге:

Комментарии (1)


  1. Zore_pinge
    19.09.2024 18:50

    Про Garage совсем инфы мало на просторах