История одного pet-project
                                   или
Как мы строили распределенное хранилище файлов для веба и что из этого вышло



                            Данила Штань, 66.ru
                              danila@shtan.ru
Было: инфраструктура

•   Много NFS

•   Разные проекты — разные решения, legacy

•   Проблемы с деплоем

•   Разработчики не всегда понимают, что можно, а чего нельзя

•   Резервные копии
Задача: инфраструктура

•   Унификация

•   Масштабирование

•   Резервные копии

•   Отказаться от NFS

•   Постараться не покупать новое оборудование
Было: разработка


•   У каждого свой подход

•   Много раз решаем одну и ту же задачу

•   Иногда очень странно решаем одну и ту же задачу
Задача: разработка


•   “Защита от дурака”

•   Унификация подходов

•   Избавление от рутины
О чем мы, собственно?

•   6.5 терабайт

•   Файлы от 10кб до 300мб

•   180rps, 200 мегабит — стандартный фон в рабочие часы

•   800rps, 700 мегабит — пиковые нагрузки
Пиковые нагрузки это...
... это полдень на ekabu.ru...
... или ссылка на 66 с lenta.ru
Подытожим требования


•   Больше одной копии файла

•   Горизонтально-масштабируемая

•   Основное предназначение — отдавать файлы по http
Подытожим желания

•   Прибрать рутинные операции

•   “Черный ящик”

•   Небольшое количество компонентов

•   Знакомый нам или широко используемый стек технологий
Не нужно изобретать велосипед
Ditributed File System

•   GlusterFS

•   CloudStore

•   Lustre

•   HDFS

•   MogileFS
Давайте писать своё?

•   GlusterFS — в новой версии есть Object Storage, но beta

•   MogileFS — похоже на правду, но Perl

•   HDFS — совсем не для наших целей и нет HA

•   CloudStore — HDFS на C

•   Lustre — энтерпрайз такой энтерпрайз
Итак, что делаем?
приложения   сервис   DFS   http-сервер пользователь
Сервис
•   Python+MongoDB

•   Ограничение доступа

•   Плюшки для разработчиков — r/o аккаунты к production данным

•   RESTful API:

    •   POST / — добавить файл

    •   GET /<id> — получить метаданные, ссылку и время жизни ссылки
DFS и http-сервер

•   nginx — нужны веские причины, чтобы отказаться

•   GlusterFS как наиболее вероятный кандидат

    •   не самая тривиальная настройка

    •   как делать off-site бэкап?
DFS и http-сервер

•   У нас уже есть MongoDB!

    •   replica set

    •   off-site replica

•   У MongoDB есть спецификация GridFS

•   Для nginx есть модуль nginx_gridfs
Тесты, попытки применить

•   Стандартный storage-сервер через nginx-gridfs — 600rps

    •   Проблема не в Mongo, C-драйвер не умеет работать асинхронно

•   nginx-gridfs — не очень активно развивается

•   nginx-gridfs — не поддерживает HTTP Range запросы

•   Мы не готовы использовать собственный C-код в production
И снова напишем сами

•   WSGI-приложение, 300 строк кода

•   Werkzeug

•   Берет ObjectID и отдает файл, умеет отвечать 200, 206, 404

•   Умеет работать с replica set

•   Тесты — 400 rps, двух только-только хватит на пиковые нагрузки
nginx наше все

•   proxy_pass, proxy_cache

•   требует отдельного железа, но у нас уже есть

•   тесты

    •   2.5 k rps при размере кэша в 20 gb

    •   2.5 k rps при размере кэша в 3 gb
nginx наше все
•   proxy_pass, proxy_cache

•   требует отдельного железа, но у нас уже есть

•   тесты (после “прогрева” кэша)

    •   2.5 k rps при размере кэша в 20 gb

    •   2.5 k rps при размере кэша в 3 gb

    •   2.5 k rps это гигабит на тестовых данных
Получилось хорошо

•   Знакомый стек технологий

•   Достаточно быстро

•   Достаточно гибко

•   Достаточно изолировано

•   Компонент раздающий файлы можно не трогать
Что дальше

•   Вынести рутинные операции — ресайз картинок, конвертацию

    •   GET /<id>?height=<newheight>

    •   GET /<id>?encode=png или даже GET /<id>?encode=flv

•   Главное вовремя остановиться
jobs.66.ru :)

More Related Content

PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PDF
Загрузка больших объемов данных для бизнес-аналитики
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PDF
Где живут Ваши объявления / Тюрин Михаил (Avito)
PPTX
Docker в работе: взгляд на использование в Badoo через год
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Загрузка больших объемов данных для бизнес-аналитики
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Где живут Ваши объявления / Тюрин Михаил (Avito)
Docker в работе: взгляд на использование в Badoo через год
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...

What's hot (20)

PPTX
Денис Иванов
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PPTX
Организация надежного резервного копирования веб-проекта. Практика и подводны...
PPTX
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
Сергей Аверин "Распространенные ошибки применения баз данных"
PPTX
опыт построения и эксплуатации большого файлового хранилища
PPTX
Спасение 6 миллионов файлов в условиях полного Хецнера
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PDF
Архитектура хранения фотографий в Badoo
PPTX
High Load
PPTX
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPTX
Тестируем производительность распределённых систем, Александр Киров (Parallels)
PPTX
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
PDF
Клиентские приложения под нагрузкой (HighLoad 2014)
Денис Иванов
Вадим Мадисон "Опыт разработки через микросервисы"
Организация надежного резервного копирования веб-проекта. Практика и подводны...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Сергей Аверин "Распространенные ошибки применения баз данных"
опыт построения и эксплуатации большого файлового хранилища
Спасение 6 миллионов файлов в условиях полного Хецнера
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Архитектура хранения фотографий в Badoo
High Load
HDD, SSD, RAM, RAID, и кого на ком кэшировать / Михаил Конюхов (Perfect Solut...
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Клиентские приложения под нагрузкой (HighLoad 2014)
Ad

Similar to ekbpy'2012 - Данила Штань - Распределенное хранилище (20)

PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
PPTX
Hosting for forbes.ru_
PPTX
Опыт эксплуатации большого проекта на Ruby
PPTX
Daemons In Web on #devrus
PDF
Frontera обход испанского интернета
PDF
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
PDF
PDF
Сергей Житинский, Александр Чистяков (Git in Sky)
PPTX
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
PDF
Карта граблей на поле сбора и доставки логов. Lazada-way.
PDF
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
PPT
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
PPT
Git in Sky presentation @ HighLoad++ 2013
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PDF
Isilapp — Extreme Cloud Storage on FreeBSD
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PDF
PPTX
Net core and linux in production
PDF
High load2007 scaling-web-applications-rus
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Hosting for forbes.ru_
Опыт эксплуатации большого проекта на Ruby
Daemons In Web on #devrus
Frontera обход испанского интернета
Frontera: распределенный робот для обхода интернета в больших объемах - Алекс...
Сергей Житинский, Александр Чистяков (Git in Sky)
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
Git in Sky presentation @ HighLoad++ 2013
Оптимизация производительности нагруженных веб-систем на Java
Isilapp — Extreme Cloud Storage on FreeBSD
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Net core and linux in production
High load2007 scaling-web-applications-rus
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ad

More from it-people (20)

PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
PDF
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
PDF
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
PDF
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
PDF
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
PDF
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
PDF
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
PDF
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
PDF
«(Без)опасный Python», Иван Цыганов, Positive Technologies
PDF
«Python of Things», Кирилл Борисов, Яндекс
PDF
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
PDF
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«Python of Things», Кирилл Борисов, Яндекс
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...

ekbpy'2012 - Данила Штань - Распределенное хранилище

  • 1. История одного pet-project или Как мы строили распределенное хранилище файлов для веба и что из этого вышло Данила Штань, 66.ru [email protected]
  • 2. Было: инфраструктура • Много NFS • Разные проекты — разные решения, legacy • Проблемы с деплоем • Разработчики не всегда понимают, что можно, а чего нельзя • Резервные копии
  • 3. Задача: инфраструктура • Унификация • Масштабирование • Резервные копии • Отказаться от NFS • Постараться не покупать новое оборудование
  • 4. Было: разработка • У каждого свой подход • Много раз решаем одну и ту же задачу • Иногда очень странно решаем одну и ту же задачу
  • 5. Задача: разработка • “Защита от дурака” • Унификация подходов • Избавление от рутины
  • 6. О чем мы, собственно? • 6.5 терабайт • Файлы от 10кб до 300мб • 180rps, 200 мегабит — стандартный фон в рабочие часы • 800rps, 700 мегабит — пиковые нагрузки
  • 8. ... это полдень на ekabu.ru...
  • 9. ... или ссылка на 66 с lenta.ru
  • 10. Подытожим требования • Больше одной копии файла • Горизонтально-масштабируемая • Основное предназначение — отдавать файлы по http
  • 11. Подытожим желания • Прибрать рутинные операции • “Черный ящик” • Небольшое количество компонентов • Знакомый нам или широко используемый стек технологий
  • 13. Ditributed File System • GlusterFS • CloudStore • Lustre • HDFS • MogileFS
  • 14. Давайте писать своё? • GlusterFS — в новой версии есть Object Storage, но beta • MogileFS — похоже на правду, но Perl • HDFS — совсем не для наших целей и нет HA • CloudStore — HDFS на C • Lustre — энтерпрайз такой энтерпрайз
  • 15. Итак, что делаем? приложения сервис DFS http-сервер пользователь
  • 16. Сервис • Python+MongoDB • Ограничение доступа • Плюшки для разработчиков — r/o аккаунты к production данным • RESTful API: • POST / — добавить файл • GET /<id> — получить метаданные, ссылку и время жизни ссылки
  • 17. DFS и http-сервер • nginx — нужны веские причины, чтобы отказаться • GlusterFS как наиболее вероятный кандидат • не самая тривиальная настройка • как делать off-site бэкап?
  • 18. DFS и http-сервер • У нас уже есть MongoDB! • replica set • off-site replica • У MongoDB есть спецификация GridFS • Для nginx есть модуль nginx_gridfs
  • 19. Тесты, попытки применить • Стандартный storage-сервер через nginx-gridfs — 600rps • Проблема не в Mongo, C-драйвер не умеет работать асинхронно • nginx-gridfs — не очень активно развивается • nginx-gridfs — не поддерживает HTTP Range запросы • Мы не готовы использовать собственный C-код в production
  • 20. И снова напишем сами • WSGI-приложение, 300 строк кода • Werkzeug • Берет ObjectID и отдает файл, умеет отвечать 200, 206, 404 • Умеет работать с replica set • Тесты — 400 rps, двух только-только хватит на пиковые нагрузки
  • 21. nginx наше все • proxy_pass, proxy_cache • требует отдельного железа, но у нас уже есть • тесты • 2.5 k rps при размере кэша в 20 gb • 2.5 k rps при размере кэша в 3 gb
  • 22. nginx наше все • proxy_pass, proxy_cache • требует отдельного железа, но у нас уже есть • тесты (после “прогрева” кэша) • 2.5 k rps при размере кэша в 20 gb • 2.5 k rps при размере кэша в 3 gb • 2.5 k rps это гигабит на тестовых данных
  • 23. Получилось хорошо • Знакомый стек технологий • Достаточно быстро • Достаточно гибко • Достаточно изолировано • Компонент раздающий файлы можно не трогать
  • 24. Что дальше • Вынести рутинные операции — ресайз картинок, конвертацию • GET /<id>?height=<newheight> • GET /<id>?encode=png или даже GET /<id>?encode=flv • Главное вовремя остановиться