SlideShare a Scribd company logo
Распределенное файловое хранилище (Nginx, Perl, ZFS) Mons Anderson Олег Мамонтов
NAS, SAN or custom? SAN: FC/iSCSI NAS: NFS/CIFS/... Custom: *
Что нам нужно? –  отдавать данные –  по протоколу HTTP
HTTP это  nginx  ;)
Что нам нужно? User -> nginx -> SAN ? User -> nginx -> NAS ? User -> nginx -> nginx ?
Стоимость решений Nginx: $ NAS: $$ SAN: $$$$$$$
Наше хранилище 8 U, 24Tb 4 x ( 2U, 6Tb ( 2+10 Tb raw ) 4 x redundancy for each file
Что нам нужно от хранилища? CRUD! ( C reate,  R ead,  U pdate,  D elete )
Что нам нужно от хранилища? Read -> HTTP C, U, D -> ?
Что нам нужно от хранилища? Read -> HTTP C, U, D ->  HTTP!
WebDAV –  Простой –  Прозрачный –  Поддерживаемый в  nginx* –  Легко реализуемый
* WebDAV + ACL Patch: –  X-ACL: 0644 –  X-Time: 1234567890
Step by step: Front
Front
Front
Front
Storage N Tb =  storage N/2 storage N/2
Storage N Tb hash storage storage
Storage N Tb hash storage storage
Storage hash storage storage storage storage
Storage hash storage storage storage storage
Resizer hash storage storage storage image_filter() storage image_filter()
Resizer hash Low CPU storage storage storage image_filter() storage image_filter()
Resizer storage storage storage storage Resize Resize Resize
Hashing ? Hash storage storage storage storage Resize Resize Resize
Hashing ScaleHash(time,id) storage storage storage storage Resize Resize Resize
Hashing URL: http://…/ObjectID ObjectID = (xxx)-(xxx)-… ID Time
Hashing Timeline past upgrade over future start a b d c 0x0010 0x00FF 0x02FF 0x0FFF e 0x0000
Hashing TimeHash(Time) { 0x0000 - 0x00FF -> [ a, b ] 0x00FF - 0x02FF -> [ a, c, d ] 0x02FF - 0x0FFF -> [ c, d ] 0x0FFF - 0xFFFF -> [ f ] } -> groups
Hashing IDHash(ID, groups) -> group
Hashing TimeHash(const Time) = const IDHash(const ID, groups) = const
Access Control DB Perl: - AnyEvent::HTTPD - AnyEvent::HTTP - AnyEvent::DBI storage storage group
Access Control: Public object -> GET /XXX Perl handler (check perms) ← 200 OK
Access Control: Protected object ->  GET /XXX ->  Perl handler ←  X-Accel-Redirect: /access/... ->  GET /access/... ->  proxy_pass http://ACLD  ←  X-Accel-Redirect: /int/.. ->  GET /int/.. ←  ←  200 OK
Result?
2+2=4, 2+2=4, 2+2=4, … ! CPU Cache?
Cache…
Cache is a problem :(
/cache proxy: //resize /source/ ?q=/i/AxB /i proxy://store resize() /internal 200 OK /i proxy: //storage /i/AxB /i proxy: //cache /i/AxB /source handler() XAccel: /cache/i/AxB+ (mtime:ctime:status) /i/AxB+ /source/ ?q=/i/AxB cache store 200 OK HIT /source handler() /source/ ?q=/i/AxB+ /source/ ?q=/i/AxB+ XAccel: /int 200 OK 200 OK 200 OK
Combine? MEM CPU HDD
Combined! Money are saved :) Deployed on same hosts Full resource consumption
Combined, but scalable! Cache cluster Resize cluster Storage cluster + MEM + CPU + HDD
Create, Update, Delete? PUT DELETE OPTIONS GET GET storage storage
Temporary loss PUT DELETE OPTIONS GET GET storage storage
Flashing error GET GET storage storage
No file? Ask a friend! GET GET 404 fallback  proxy_pass storage storage
404 Fallback: avoiding recursion GET ask  next… unless asked storage storage
404 Fallback Just... proxy_next_upstream  http_404 storage storage
Again about PUT PUT storage storage
How about single PUT? PUT DELETE OPTIONS ZFS «replication» storage storage
Приоритеты выбора решения Надежность / избыточность хранения
Производительность чтения и записи
Возможность распределения нагрузки
Потенциальная масштабируемость
Стандартные аппаратные компоненты
Простота в настройке и обслуживании
Традиционная работа с диском Имя <=> объект (inode) объект <=> LBA тома LBA тома <=> LBA RAID LBA RAID <=> LBA диска Файловая система Файловая система Менеджер томов RAID контроллер Дисковые устройства
Rampant layering violation  ;) Файловая система (zfs) Модель агрегации (zpool) Дисковые устройства
stripe / mirror / raidz / ? stripe  –  быстро ,  дешево ,  ненадежно mirror  –  быстро ,  надежно ,  дорого raidz  –  относительно  надежно ,  недорого ,  медленно :(
Универсального решения нет :( Конфигурация Объем, GB IOPS stripe 1 x 100 10000 20000 mirror 2 x 50 5000 20000 raidz 1 x ( 99 + 1 ) 9900 200 raidz 5 x ( 19 + 1 ) 9500 1000 raidz 33 x ( 2 + 1 ) 6600 6600 Дано:  100 дисков по 100GB, 200 IOPS
Наше хранилище — 6TB / 2U mirror raidz1 raidz1 raidz1 stripe spare 2U:  2 x 500MB + 10 x 1TB, SATA-2

More Related Content

PPTX
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
PPTX
SOA: строим свой service mesh / Иван Круглов (Booking.com)
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PPT
Работа с большими файлами под перлом‎
PPTX
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Архитектура хранения фотографий в Badoo
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
SOA: строим свой service mesh / Иван Круглов (Booking.com)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Работа с большими файлами под перлом‎
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Современная операционная система: что надо знать разработчику / Александр Кри...
Архитектура хранения фотографий в Badoo

What's hot (19)

PDF
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
PDF
Механика DDoS (Александр Крижановский)
PPTX
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
PPT
введение в Gpu
PDF
Анатомия веб сервиса (HighLoad-2014)
PPTX
Docker & Badoo: 
никогда не останавливайся на достигнутом
PPTX
Антон Турецкий
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Марина Широчкина: Верстка. Вид снизу
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PDF
My talk on monitoring systems at RootConf 2016
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PPTX
DataCore case studies
PDF
03 - Hadoop. HDFS Shell-команды
PDF
Александр Крижановский, NatSys Lab
PPTX
Mysql vs postgresql
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Механика DDoS (Александр Крижановский)
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
введение в Gpu
Анатомия веб сервиса (HighLoad-2014)
Docker & Badoo: 
никогда не останавливайся на достигнутом
Антон Турецкий
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Марина Широчкина: Верстка. Вид снизу
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
My talk on monitoring systems at RootConf 2016
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
DataCore case studies
03 - Hadoop. HDFS Shell-команды
Александр Крижановский, NatSys Lab
Mysql vs postgresql
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ad

Similar to распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2 (20)

PDF
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
PDF
Гиперконвергентное решение Cisco HyperFlex
PPT
Видеохостинг своими руками
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PDF
Isilapp — Extreme Cloud Storage on FreeBSD
PDF
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PPTX
High Load
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PPTX
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
PPTX
Developing highload servers with Java
PDF
Максим Дунин, Nginx, Inc.
PPT
CUDA Course 2010 at MSU
PDF
Реактивный раздатчик ok.ru/music
DOCX
HP 3PAR StoreServ 7200
PPTX
VMUG Moscow 2014 Проблемы с дисками?
PDF
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
PDF
мои модули и патчи для Nginx. максим дунин. зал 1
PDF
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
PDF
Extreme cloud storage on free bsd (Андрей Пантюхин)
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Гиперконвергентное решение Cisco HyperFlex
Видеохостинг своими руками
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Isilapp — Extreme Cloud Storage on FreeBSD
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
High Load
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Developing highload servers with Java
Максим Дунин, Nginx, Inc.
CUDA Course 2010 at MSU
Реактивный раздатчик ok.ru/music
HP 3PAR StoreServ 7200
VMUG Moscow 2014 Проблемы с дисками?
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
мои модули и патчи для Nginx. максим дунин. зал 1
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme cloud storage on free bsd (Андрей Пантюхин)
Ad

More from rit2011 (20)

PPT
классификация Ddos. александр лямин, артем гавриченков. зал 2
PDF
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
PPT
как объяснить заказчику, что он не прав. денис тучин. зал 3
PDF
классификация Ddos. александр лямин, артем гавриченков. зал 2
PPTX
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PPT
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
PDF
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
PPT
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
PDF
как стать хорошим веб технологом. нарек мкртчян. зал 4
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PPT
выращиваем интерфейс своими руками. ольга павлова. зал 3
PDF
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
PPT
от Flash к html5. александр бацуев. зал 4
PPTX
Ie9 и ie10. алекс могилевский. зал 2
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
POTX
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
PPTX
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
как объяснить заказчику, что он не прав. денис тучин. зал 3
классификация Ddos. александр лямин, артем гавриченков. зал 2
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
выращиваем интерфейс своими руками. ольга павлова. зал 3
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
от Flash к html5. александр бацуев. зал 4
Ie9 и ie10. алекс могилевский. зал 2
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2

распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2