avatar

OVH Hubic: хранилище данных по приемлемой цене и как его готовить

Опубликовал в блог Интернет
Интернет: OVH Hubic: хранилище данных по приемлемой цене и как его готовитьHubic — это облачный проект французского провайдера OVH, который предоставляет большие объёмы хранения данных (10+Tb) за очень маленькие деньги (50 евро/год). По сравнению с Yandex/Google и прочими мейлами стоимость терабайта ниже во много раз. Я выбрал Hubic после того, как посыпался мой домашний ftp-сервер с перспективой дорогостоящей замены HDD.
Сайт: hubic.com



Преимущества:

  • 10Tb за 50 евро/год. Можно расширить приглашая друзей (2.5Tb за друга). Бесплатный объём составляет 25Gb, приглашение друзей также позволяет его расширить
  • Многочисленные клиенты и даже удаленное монтирование через fuse
  • Openstack ACL — возможность управлять видимостью содержимого для всего интернета

Недостатки:
  • Невысокая скорость файловых операций из-за репликации
  • Переименование/перемещение реализовано через копирование + удаление. Это очень медленно
  • Медленная служба техподдержки, которую сильно ругают на форумах

Особенности
Hubic представляет собой Openstack хранилище больших объемов данных. Внутри хранилище разделяется на контейнеры, уровень доступа к которым можно изменять чтобы открыть данные для всех.

Веб-страница hubic и дефолтный клиент работают только с контейнером default, который создаётся по умолчанию при создании аккаунта. Ссылки, которые они создают для пользователей в интернете, ограничены по времени действия (до 30 дней). Также, официальные клиенты работают с контейнером backup, куда валяется бекапы с устройств пользователя при включении этой функции.

Клиенты и контейнеры hubic
Клиенты hubic делятся на 3 основные категории:
  1. Официальные
  2. Неофициальные, одобренные командой hubic (их список можно найти здесь: hubic.com/fr/apps.xml (фр))
  3. Неофициальные, без одобрения (для их подключения понадобятся дополнительные шаги, описанные ниже в этой статье).

Итак, по пунктам:

Официальные клиенты
Официальный клиент. Доступен для основных платформ, в т.ч. под linux и android. Умеют работать только с контейнерами default и backup (пользователь вообще не видит контейнеров, только файлы в default и список бэкапов). Хорош для массовой загрузки данных в backup/default. Клиент для linux написан на mono и не имеет GUI (на момент написания статьи).

Сайт hubic. Имеет те же ограничения, что и основной клиент. Временные ссылки, которые в нем создаются для показа контента клиентам снаружи, имеют срок действия до 30 дней. Этот же интерфейс используется для показа содержимого созданных ссылок.
Интернет: OVH Hubic: хранилище данных по приемлемой цене и как его готовить

Неофициальные одобренные клиенты.

Их несколько, я использую Swift Explorer. www.619.io/swift-explorer
Интернет: OVH Hubic: хранилище данных по приемлемой цене и как его готовить

Весьма удобный клиент, который, в отличие от официального клиента, позволяет создавать/удалять контейнеры. В нем можно загружать/удалять файлы и директории, переименовывать он не умеет (в отличие от сайта, например). Еще иногда во время массового копирования файлов на сервер бывают ошибки, но это не страшно — копирование можно начать заново. Практически все клиенты проверяют хэш и пропускают те файлы, которые уже загружены.

Кстати, о контейнерах.
Контейнеры в Hubic бывают двух основных типов: public, private.
private — только вы и ваши приложения имеют доступ к содержимому контейнера (исключение — default, там можно делать временные ссылки)
public — это private, с возможностью получить read-only ссылки на файл для всего интернета

Еще могут быть различные вспомогательные типы контейнеров для бэкапов и хранения сегментов.

Если вы в Swift Explorer создали public контейнер (по умолчанию), на его файлы можно давать ссылки внешним пользователям, и их срок действия не ограничен (незадокументированная возможность, ту-ду-ду-ду :)). Для того, чтобы получить эту ссылку, нужно кликнуть на файле в публичном контейнере в Swift Explorer и нажать Open in browser (в приватном контейнере будет неактивна). Swift explorer не умеет менять тип контейнеров, но это можно сделать вручную (будет описано ниже).

Не поддерживаемые неофициальные клиенты.
Их много, к их числу относится, например, hubicfuse. Это плагин к fuse, позволяющий монтировать hubic как файловую систему на linux. У Ubuntu в репозиториях доступен соответствующий пакет, ешё его можно собрать из исходников:
github.com/TurboGit/hubicfuse
Про то, как настроить и смонтировать хранилище есть статья, но она немного устарела:
webdevil.ru/post/2015/208-nubic-on-linux-server

Мне понадобились примерно следующие шаги для подключения hubicfuse

1) Создать запись в разделе developers для нашей программы
hubic.com/home/browser/developers/
Там потребуется указать имя разработчика и сайт, например Vasily Pupkin, somesite.com. В случае успеха это выдаст необходимые client_id и client_sercret для hubicfuse (см. документацию на git).

2) Получаем refresh token. Его можно получить, например, через этот скрипт github.com/TurboGit/hubicfuse/blob/master/hubic_token

3) Получив все данные, настраиваете описанный в git-е файл конфигурации .hubicfuse и вуаля, по команде всё монтируется.

Особенности hubicfuse

1) Все операции происходят через локальный временный файл. Это создает rw нагрузку на локальный диск и замедляет выдачу больших файлов (сначала скачивается в temp, потом отдается). С отправкой — та же история.

2) Дерево файлов хранится в памяти (может кому-то представлять неудобство)

3) Внезапно становятся видны служебные контейнеры segments, например default_segments, создаваемые Swift Explorer. Туда лазить не надо — это способ размещения больших файлов в соответствующих контейнерах по частям. Удалив сегменты, потеряются файлы в основном котнейнере

Приятный бонус — консоль hubic и недокументированный ACL


Часть внешенего API hubic описана на следующей странице: api.hubic.com/
Залогиненным пользователям можно даже попробовать делать запросы к API через api.hubic.com/console/
Что мы можем сделать через API? Ну например получить токены, которые нам необходимы для управления видимостью контейнеров, что не умеет swift explorer.
Переходим на api.hubic.com/console/#/account/credentials#GET, логинимся, делаем запрос, получаем ответ вида

{
token: «токен»
endpoint: https://lb1040.hubic.ovh.net/v1/AUTH_код_эндпоинта
expires: дата, до которой живет токен
}

Теперь почитаем, как задать ACL контейнеру для изменения прав доступа. Hubic молчит, но есть документация openstack. Например как работать с контейнером описано тут:
www.swiftstack.com/docs/cookbooks/swift_usage/container_acl.html
Или, вот, например, пример.
ask.openstack.org/en/question/80609/how-to-make-a-container-public-in-swift-rest-api/
Т.е. например, чтобы сделать приватный контейнер публичным (доступным всем только на чтение) нужно сделать что-то вроде:

curl -X POST -i -H "X-Auth-Token: наш токен" -H "X-Container-Read: .r:*" https://lb1040.hubic.ovh.net/v1/AUTH_код_эндпоинта/имя_контейнера

Чтобы отобрать у всех права на чтение и сделать снова приватным:

curl -X POST -i -H "X-Auth-Token: наш токен" -H "X-Remove-Container-Read: 1" https://lb1040.hubic.ovh.net/v1/AUTH_код_эндпоинта/имя_контейнера

Еще полезные команды можно найти, например, здесь www.tiernanotoole.ie/2015/03/31/HubiC_SWIFT_CURL.html
Или поискать описания OpenStack API

От себя добавлю следующую полезную команду: создать контейнер
curl -i -X PUT -H "X-Auth-Token: токен" \
https://lb1040.hubic.ovh.net/v1/AUTH_код_эндпоинта/имя_контейнера

PS Адрес lb1040.hubic.ovh.net может у вас быть другим.

Еще заметки
1) Удаление файлов — достаточно медленное
2) Работа с маленьким количеством больших файлов существенно быстрее чем с большим количеством маленьких (накладные расходы создания/удаления)

Спасибо за внимание. Надеюсь, вы сможете смириться с медлительностью некоторых операций в hubic за его небольшую стоимость :)
1 комментарий RSS
avatar
Кстати, если кто рещится копировать большие объемы данных — рекомендую утилиту rclone. Перегонял 3TB в hubic — полёт отличный
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.