Компания
33,57
рейтинг
14 октября 2011 в 15:19

Разное → Облачное хранилище Clodo

Мы рады представить сообществу «Хабрахабра» наш новый сервис — Облачное Хранилище. Как и все решения подобного класса, оно предназначено для хранения и быстрой раздачи статического контента — в том числе контента веб-сайтов.

Те, кто посетил прекрасную конференцию Highload++, имели возможность, в числе прочего, услышать наш доклад про то, как устроено хранилище. Краткое изложение того, о чем мы говорили, мы предлагаем уважаемой аудитории «Хабрахабра».

Суть любого облака заключается в возможности оперативно получить требуемое количество ресурсов заданного типа по запросу. Есть привычные благодаря десктопам — дисковое пространство, процессорные мощности, оперативная память. Взяв понемногу того, другого и третьего (например, приобретя виртуальную машину с 256 мегабайтами памяти и диском на пару сотен гигабайт), пользователь надеется раздать эти гигабайты в виде тысяч маленьких файлов — причем раздать быстро и любому количеству клиентов: очевидно при помощи какой-то специальной «облачной магии», про которую ему напели недалёкие маркетологи. На самом деле, есть и другие, не такие привычные типы ресурсов, которые следует иметь в виду, проектируя свой сервис — например, ресурс раздачи контента или балансировки нагрузки.

Удачная архитектура облачного веб-проекта

Используя упомянутые выше типы сущностей, можно построить архитектуру решения, которая, используя традиционный LAMP-стек, будет предназначена как раз для реализации той самой «облачной магии» и легкости масштабирования при увеличении нагрузки. Мы планомерно реализуем то, что необходимо для реализации такой схемы.

Так, например, серверы баз данных при использовании привычного MySQL, как известно плохо поддаются горизонтальному масштабированию, поэтому их имеет смысл масштабировать вертикально — для этого у нас работаю Scale Server. Обращающиеся к ним application-серверы, в идеале стоящие за балансировщиком нагрузки, можно масштабировать горизонтально, плодя при помощи API копии-клоны. Для того, чтобы можно было использовать точные клоны, статическую информацию имеет смысл распространять через специально для этого созданное хранилище — это позволяет не заниматься синхронизацией, которая часто не поспевает за обновлениями контента.

Итак, мы поставили перед собой задачу создать хранилище:
  • Надёжно хранящее данные;
  • С простым управлением данными — в том числе посредством API,
    поскольку его нужно использовать из программного кода;
  • Умеющее быстро раздавать по HTTP «горячий» контент;
  • Предоставляющее привычное для не самых опытных пользователей интерфейс взаимодействия (FTP, FUSE). На хранилище должен иметь возможность загрузить файл любой контент-менеджер сайта провинциального дома культуры (да, у нас есть и такие клиенты);


Решив не изобретать велосипедов, в качестве хранилища мы выбрали Openstack Swift — то же хранилище, которое используют наши западные коллеги из Rackspace. Картинка достаточно хорошо поясняет его устройство.

Архитектура OpenStack Swift

Клиент из интернета приходит на авторизационный узел, предъявляет там свой токен, и в зависимости от токена ему дается доступ к тому или иному участку хранилища. Хранилище плоское: структура директорий задается при помощи мета-атрибутов файлов (мета-атрибуты в Swift дают вообще достаточно богатый инструментарий — об этом мы можем рассказать подробнее, если будет такой интерес).

Для начала мы попробовали решение, целиком и полностью основанное на Swift со Swift Proxy на фронтендах под управлением Pacemaker.

Первая попытка сделать CloudStorage

Решение рабочее, но начало проседать по процессору уже при 400 запросах в секунду на фронтенд, что в наших условиях совсем никуда не годится. Поэтому мы решили добавить NGINX в качестве кеширующего прокси. Кеш мы разместили на SAS-дисках. Так как nginx по умолчанию не умеет хранить кеш на нескольких томах, а тратить дорогие SAS-диски на overhead RAID 6 нам не хотелось, мы обратились к catap и уже вскоре у нас был nginx с мультизонным кешем. Эта конфигурация позволила нашим фронтендам легко выдерживать по 12000 запросов, упираясь при этом не в процессор, а в гигабитный канал на фронтенде.

Вторая попытка сделать CloudStorage

После этого началась доработка сервиса согласно пожеланиям клиентов. Для начала, никому не понравились публичные ссылки вида
http://cs1.clodo.ru/v1/CLODO_0563290e28e0d6f79a83ab6a84b42b7d/public/logo.gif — все хотели что-нибудь в духе http://st.clodo.ru/logo.gif. Помимо возможности подключения доменов, требовалось убрать из URL адрес публичного контейнера по умолчанию public. Это решилось небольшим «программированием на конфигах nginx».

Следующая проблема — существенно более основательная. После удаления с бэкенда файл остается в кэше и может быть доступен еще некоторое время. Наши коллеги из Rackspace считают, что эту проблему решать необязательно (да и вообще по всем вопросам публичной раздачи отсылают к CDN-партнерам). Мы решили попробовать решить эту проблему — и в этом нам помог демон Кеша.

Как работает Демон Кеша

Обаятельный демон, написанный на Perl и взаимодействующий с nginx посредством FastCGI, при каждом удалении данных инвалидирует кэш. При этом он пытается проявить интеллект, и, например, при удалении файла из директории удаляет из кэша не только сам файл, но и листинг директории.

Мы уже наметили несколько направлений развития хранилища:
  • Возможность получения клиентом логов своего хранилища;
  • Раздача медийного контента, стриминг;
  • Репликация между ЦОДами;
  • Авторизация по pubcookies;
  • Включение всей функциональности Swift-proxy в качестве модуля nginx;
  • Полная поддержка HTTP 1.1;

Наше нынешнее решение позволяет в одном сегменте хранилища иметь до 840 Тб дискового пространства, 7 Тб кеша и 512 Гб кеша в оперативной памяти. Все это влезает в 30 юнитов в ЦОДе. Все это автоматически разворачивается при помощи Chef на Debian Live, управляется Pacemaker и панелью Clodo (операции, реализованные за пределом Openstack — например, подцепление своего домена). В принципе, аналогичное решение можно построить и для себя с заметно меньшим количеством железа и развернуть в своем маленьком частном облачке.

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

P.S. Картинки в этом посте размещены на нашем Cloud Storage.
Автор: @realloc
clodo.ru
рейтинг 33,57
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

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

  • +9
    А лежать оно будет так же, как Ваш облачный хостинг?
    • +4
      Да, коммент резкий. Но разве он не правдивый?

      Смотрим:
      habrahabr.ru/tag/clodo.ru/

      Не многовато ли «хороших» отзывов?

      Если в гугле порыть, то тоже не мало:
      saiter.ru/otzyvy/site/clodo.ru/?id=37743
      hostertest.ru/hosters/info/426

      Кому больше надо — найдете без проблем. Так за что минусы?
    • +10
      Да, мы помним, что у нас были проблемы в конце весны-начале лета.
      Проблемы стабильности мы с тех пор решили.
      Кстати, этот комментарий не может бы не правдивым, ни неправдивым. Потому что он — вопрос.
      Кстати, ответ на него — «да, и хранилище и хостинг сейчас работают стабильно и стабильно примерно в одинаковой степени».
      • –1
        Сервер лежит больше суток, техподдержка «работает над этой проблемой», естественно, безуспешно.
        Проблемы не были, они есть и, судя по всему, никуда не денутся.
        • +1
          А вы можете сказать номер тикета?
          • –1
            Тикет № 337822. Скажите что случилось? Или можете только минусы тыкать и в карму срать?!
            • 0
              ну так как, что тех.поддержка ответила, вопрос решили?
              • 0
                Техподдержка ответила, что у них что-то поломалось и все мои данные и коммерческие сайты удалены без возможности восстановления! До сих пор в шоке.
  • 0
    А так и задумано, что включен листинг дирректорий?
    st.realloc.clodo.ru/ — смотрим папки, вашу презентацию, лого линукса и прочее.
    • +3
      Да, листинг директорий эта одна из опций хранилища. Фича включается по умолчанию чрез панельку если задать контейнер как публичный.

      Я тоже люблю смотреть на лого линукса. Это умиротворяет.
    • +1
      Обновил презентацию.
    • 0
      Я его ухитрился отключить, кинув в корень index.html пустой
    • +1
      Это отключается галочкой в файл-менеждере в панели.
  • 0
    Планируется ли в облачном хранилище функционал CDN? Просто хочется, чтобы не только российские пользователи получали статику на максимальной скорости.
    • +1
      Некий функционал CDN и так есть в виде быстрой раздачи с фронтэндов. Когда у нас появится больше таких кластеров в разных ЦОДах страны, то можно будет синхронизировать контейнеры и раздавать контент из разных точек.

      Что касается выгрузки данных в какой-то сторонний CDN, то на текущий момент этого нет. Однако мы не отрицаем возможности появления такого функционала в ближайшем будущем.
  • +10
    И ни слова о том, что существует какое то ограничение на размер файла, ни здесь ни на сайте не сказано (наоборот сказано «Вы можете хранить столько данных, сколько захотите») и только когда я внес деньги и попытался загрузить мне об этом сообщают, причем без указания какой размер дозволен. Это обман, я считаю.
    • 0
      Вы пытались загрузить через веб-интерфейс? Скорее всего, вы уперлись в ограничение интерфейса, а не стораджа. Сторадж технически ограничивает размер файла 4 Гб, но если файл нарезать на чанки до 4 Гб размером, можно потом загрузить их на сторадж и склеить при помощи мета-атрибутов.
      • 0
        интересно зачем на веб-интерфейсе такое ограничение? и залить другим способом у меня не вышло, грустно все это.
        • 0
          А каким именно способом не получилось?
          Через уточку (http://cyberduck.ch/) пробовали? Или через CloudFuse?
          • 0
            да пробовал через cyberduck вчера подключалось но файлы не заливались, сегодня не подключается вообще (unexpected return code)
            • 0
              Напишите, пожалуйста, если несложно, тикет или опишите проблему на почту info@clodo.ru. Разберемся, в чем дело.
  • 0
    Пользуюсь облачным хранилищем файлов от Rackspace. Для меня важно чтобы операции по отдаче файлов были бесплатными. Именно по этому не выбрал Amazon S3.

    Сравниваю цены:
    Хранение 1Гб: Вы-7,2 рубля/месяц; Они-4,65 рублей/месяц.
    Отдача: Вы-1 рубль/Гб; Они-5,58 рублей/Гб.

    В нашей стране всегда цены выше чем у западных хостеров. У Вас наоборот. И как-то в такую щедрость не верится. И она внушает опасение — будет ли все работать как часы?
    • +1
      Ну, во-первых, все-таки не совсем щедрость. Во-вторых, у нас разная раздача. У Rackspace за эти деньги раздается через очень большой CDN. Когда и если мы договоримся с каким-нибудь CDN, подключение к нему будет стоить других денег. Так что цены и у нас, и у Rackspace по-своему справедливые.
  • 0
    «С простым управлением данными — в том числе посредством API,
    поскольку его нужно использовать из программного кода;»
    А где можно почитать про планируемый/реализованный API?
    • 0
      Полностью поддерживается API OpenStack Swift: docs.openstack.org/cactus/openstack-object-storage/developer/content/

      • 0
        Вот если бы ваша техническая поддержка об этом знала и смогла внятно ответить на это — я бы давно вас попробовал. На вашем сайте, к сожалению, про API почти ничего нет, и по телефону не смогли внятно ответить :(

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное