2014.12.06 03 Александр Чистяков — Устройство object storage на...

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

Upload: happydev

Post on 12-Jul-2015

115 views

Category:

Education


2 download

TRANSCRIPT

Page 1: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

На примере LeoFSAlexander Chistyakov, Git in Sky

Page 2: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 3: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 4: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 5: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 6: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 7: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 8: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 9: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 10: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

интегрированное кэширование *не лучше

Page 11: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 12: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 13: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 14: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

* не всем

Page 15: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 16: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 17: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 18: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 19: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

Page 20: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 21: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 22: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 23: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 24: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

Page 25: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

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

Page 26: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

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

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

Page 27: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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

RDBMS (FS, whatever) на NoSQL

Page 28: 2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS

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