распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 22. NAS, SAN or custom? SAN: FC/iSCSI NAS: NFS/CIFS/... Custom: * 5. Что нам нужно? User -> nginx -> SAN ? User -> nginx -> NAS ? User -> nginx -> nginx ? 7. Наше хранилище 8 U, 24Tb 4 x ( 2U, 6Tb ( 2+10 Tb raw ) 4 x redundancy for each file 8. Что нам нужно от хранилища? CRUD! ( C reate, R ead, U pdate, D elete ) 11. WebDAV – Простой – Прозрачный – Поддерживаемый в nginx* – Легко реализуемый 12. * WebDAV + ACL Patch: – X-ACL: 0644 – X-Time: 1234567890 23. Resizer hash Low CPU storage storage storage image_filter() storage image_filter() 25. Hashing ? Hash storage storage storage storage Resize Resize Resize 29. Hashing TimeHash(Time) { 0x0000 - 0x00FF -> [ a, b ] 0x00FF - 0x02FF -> [ a, c, d ] 0x02FF - 0x0FFF -> [ c, d ] 0x0FFF - 0xFFFF -> [ f ] } -> groups 32. Access Control DB Perl: - AnyEvent::HTTPD - AnyEvent::HTTP - AnyEvent::DBI storage storage group 34. 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 39. /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 46. No file? Ask a friend! GET GET 404 fallback proxy_pass storage storage 57. Традиционная работа с диском Имя <=> объект (inode) объект <=> LBA тома LBA тома <=> LBA RAID LBA RAID <=> LBA диска Файловая система Файловая система Менеджер томов RAID контроллер Дисковые устройства 59. stripe / mirror / raidz / ? stripe – быстро , дешево , ненадежно mirror – быстро , надежно , дорого raidz – относительно надежно , недорого , медленно :( 60. Универсального решения нет :( Конфигурация Объем, 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 61. Наше хранилище — 6TB / 2U mirror raidz1 raidz1 raidz1 stripe spare 2U: 2 x 500MB + 10 x 1TB, SATA-2 62. Будущее уже наступило! snapshot – мгновенный снимок ( cow - быстро, дешево ) rollback – откат файловой системы на заданный снимок clone – “альтернативная реальность” ( ветка из снимка ) send – дамп снимка ( полный или разностный) receive – воссоздание снимка из дампа 76. © 2011 Mons Anderson <mons@cpan.org> Олег Мамонтов <lonerr@cpan.org> Рамблер Интернет Холдинг