My talk on LeoFS, HappyDev 2014

28
Устройство object storage На примере LeoFS Alexander Chistyakov, Git in Sky

description

My talk on LeoFS, HappyDev 2014

Transcript of My talk on LeoFS, HappyDev 2014

Page 1: My talk on LeoFS, HappyDev 2014

Устройство object storage

На примере LeoFS

Alexander Chistyakov, Git in Sky

Page 2: My talk on LeoFS, HappyDev 2014

Привет, HappyDev!● Меня зовут Саша● И я – performance engineer● Работаю на должности главного инженера

в компании Git in Sky

Page 3: My talk on LeoFS, HappyDev 2014

Привет, Саша!● Мы – веб разработчики!● Мы – системные администраторы!● Мы – архитекторы!● Мы еще пока не определились!

Page 4: My talk on LeoFS, HappyDev 2014

О чем пойдет речь● “Я вообще думаю, может БД поменять на

что-нибудь NoSQL” © типичный разработчик

● Если не БД – то файловую систему, хотя бы

Page 5: My talk on LeoFS, HappyDev 2014

Предыстория● HighLoad 2012 – https://clck.ru/9Lutd (не я)● DevConf 2014 – https://clck.ru/9Lutw (уже я)● Клиент – Setup.ru (конструктор сайтов)● 100+ млн. пользовательских файлов● Метаинформация в PostgreSQL● Сами файлы – в PostgreSQL через LO API

Page 6: My talk on LeoFS, HappyDev 2014

Наше время● Проект на Perl (был когда-то такой язык)● Хостинг – Hetzner (лучше уж Perl)● Текущая конфигурация машин в Hetzner не

имеет дисков достаточного объема (8 терабайт - максимум)

● Мы должны были уметь хранить больше чем 8Тб файлов уже вот прямо вчера

Page 7: My talk on LeoFS, HappyDev 2014

Как быть?● Делегировать эту задачу Amazon● Построить свой Amazon:● Elliptics● OpenStack Swift● Ceph Object Gateway● Riak CS● LeoFS

Page 8: My talk on LeoFS, HappyDev 2014

Общее для всех● HTTP REST или Amazon S3 интерфейс● Автоматическая репликация● Автоматическая отказоустойчивость● Легкое добавление новых узлов

Page 9: My talk on LeoFS, HappyDev 2014

Устройство любого object storage● Узлы, на которых хранятся данные● Узлы, на которых хранятся метаданные● Маршрутизаторы запросов к первым двум● Background workers● Как я уже говорил однажды в Омске:

Любой* NoSQL – несколько локальных хранилищ + роутер запросов к ним

*не любой

Page 10: My talk on LeoFS, HappyDev 2014

Надо сделать выбор● Erlang – как Python, только лучше*● Mnesia и LevelDB – как SQLite, только лучше*● DuckDuckGo – как Yandex, только лучше*● Интегрированный механизм кэширования

лучше*, чем его отсутствие● LeoFS: Erlang, Mnesia, LevelDB, не Yandex,

интегрированное кэширование

*не лучше

Page 11: My talk on LeoFS, HappyDev 2014

Последствия выбора● Примерно как у свадьбы, только

развестись гораздо сложнее● Помехи при выборе:● Эффект Даннинга-Крюгера● Ошибка выживших● Недостаточность и плохое качество

информации о решении в Интернете

Page 12: My talk on LeoFS, HappyDev 2014

Устройство LeoFS● LeoFS manager – хранит метаданные● LeoFS storage – хранит данные● LeoFS gateway – маршрутизирует запросы и

кэширует контент локально● LeoFS manager – единая точка отказа● Поэтому их делают два: master и slave

Page 13: My talk on LeoFS, HappyDev 2014

Устройство LeoFS● LeoFS manager использует Mnesia● LeoFS storage использует LevelDB● Mnesia – распределенная СУБД из

стандартной поставки Erlang● LevelDB – key-value storage, разработана в

Google, представляет собой LSM-tree

Page 14: My talk on LeoFS, HappyDev 2014

Устройство LeoFS● Внутренние процессы:● LevelDB нужно компактить*● При добавлении/удалении нод нужно

перестраивать кольцо маршрутизации● Можно временно включать/выключать

узел● К счастью, все это делается вручную

* не всем

Page 15: My talk on LeoFS, HappyDev 2014

Развертывание LeoFS● Для развертывания чего угодно я

использую Ansible● Playbooks для LeoFS: https://clck.ru/9Lx73● (По ссылке старая версия, сейчас все

переделано на установку через роли)

Page 16: My talk on LeoFS, HappyDev 2014

То, ради чего все затевалось● Отказоустойчивость:● В конфигурационном файле задается

количество реплик и● Количество успешных операций● Чтения● Записи● Удаления

Page 17: My talk on LeoFS, HappyDev 2014

Как это выглядит у нас● Данные хранятся на 5 узлах, 8

потребителей●

Page 18: My talk on LeoFS, HappyDev 2014

Что мы храним● Все хранимые объекты больше 64

килобайт● Всего хранится 7 терабайт таких объектов● Только 15-20% запросов идет в LeoFS,

объекты размером менее 64К по-прежнему отдаются из PostgreSQL

Page 19: My talk on LeoFS, HappyDev 2014

Домашняя работа● Найдите на графике момент отказа*:

* я и сам не найду

Page 20: My talk on LeoFS, HappyDev 2014

Ура, графики!● Количество запросов к хранилищу:

Page 21: My talk on LeoFS, HappyDev 2014

Еще графики!● Нагрузка на сеть:

Page 22: My talk on LeoFS, HappyDev 2014

И еще графики!● Нагрузка на диск:

Page 23: My talk on LeoFS, HappyDev 2014

Плюсы● 12 июня – начало выбора технологии● Через пару дней – начало внедрения● К августу развернут параллельный

“старому” новый сторадж на LeoFS● В сентябре переезд полностью состоялся● В августе умер один из пяти узлов –

заменили целиком, юзеры не заметили

Page 24: My talk on LeoFS, HappyDev 2014

Минусы● График latency (достаточно неторопливо):

Page 25: My talk on LeoFS, HappyDev 2014

Подводные камни● Клиентские библиотеки S3 все плохого

качества● При отказе узла latency еще возрастает● Если на gateways включено кэширование

на диск, и на диске кончается место – latency возрастает неимоверно

● Балансировка контента не автоматически (и это плюс)

Page 26: My talk on LeoFS, HappyDev 2014

Границы применимости● Мы храним статический контент● Мы никогда не модифицируем, всегда –

новый URL● Мы никогда не удаляем контент● Наши пользователи лояльно относятся к

latency (это обусловлено тем, что существует два типа контента)

Page 27: My talk on LeoFS, HappyDev 2014

Выводы● Нельзя просто так взять и заменить

RDBMS (FS, whatever) на NoSQL

Page 28: My talk on LeoFS, HappyDev 2014

Спасибо за внимание!● С вами был Александр Чистяков● Из компании Git in Sky● http://gitinsky.com● [email protected]● http://twitter.com/noatbaksap● http://meetup.com/DevOps-40