SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
Распределенное
файловое
хранилище
(Nginx, Perl, ZFS)

  Mons Anderson
  Олег Мамонтов
NAS, SAN or custom?

SAN: FC/iSCSI
NAS: NFS/CIFS/...
Custom: *
                      Mons Anderson
                      Олег Мамонтов
Что нам нужно?


– отдавать данные
– по протоколу HTTP

                      Mons Anderson
                      Олег Мамонтов
HTTP это nginx ;)


                    Mons Anderson
                    Олег Мамонтов
Что нам нужно?

       User → nginx → SAN ?
       User → nginx → NAS ?
       User → nginx → nginx ?

                                Mons Anderson
                                Олег Мамонтов
Стоимость решений

Nginx: $
NAS: $$
SAN: $$$$$$$

                    Mons Anderson
                    Олег Мамонтов
Наше хранилище

           8 U, 24Tb
     4 x ( 2U, 6Tb ( 2+10 Tb raw )
       4 x redundancy
             for each file
                                     Mons Anderson
                                     Олег Мамонтов
Что нам нужно от хранилища?


            CRUD!
(Create, Read, Update, Delete )

                              Mons Anderson
                              Олег Мамонтов
Что нам нужно от хранилища?


        Read → HTTP
         C, U, D → ?

                              Mons Anderson
                              Олег Мамонтов
Что нам нужно от хранилища?


        Read → HTTP
       C, U, D → HTTP!

                              Mons Anderson
                              Олег Мамонтов
WebDAV

 – Простой
 – Прозрачный
 – Поддерживаемый в nginx*
 – Легко реализуемый
                             Mons Anderson
                             Олег Мамонтов
* WebDAV + ACL

Patch:
– X-ACL: 0644
– X-Time: 1234567890
                       Mons Anderson
                       Олег Мамонтов
Step by step: Front


                  nginx




                          Mons Anderson
                          Олег Мамонтов
Front


        nginx




                Mons Anderson
                Олег Мамонтов
Front

               nginx




        CARP   nginx



                       Mons Anderson
                       Олег Мамонтов
Front

               nginx




        CARP   nginx



                       Mons Anderson
                       Олег Мамонтов
Storage

               storage
                 N/2

      N Tb =
               storage
                 N/2


                         Mons Anderson
                         Олег Мамонтов
Storage
                     N Tb


                    storage

     Front   hash

                    storage



                              Mons Anderson
                              Олег Мамонтов
Storage
                     N Tb


                    storage

     Front   hash

                    storage



                              Mons Anderson
                              Олег Мамонтов
Storage

                       storage
                    storage

     Front   hash
                        storage
                    storage



                                  Mons Anderson
                                  Олег Мамонтов
Storage

                       storage
                    storage

     Front   hash
                        storage
                    storage



                                  Mons Anderson
                                  Олег Мамонтов
Resizer

                           storage
                       storage
                    image_filter()
     Front   hash
                           storage
                       storage
                    image_filter()


                                     Mons Anderson
                                     Олег Мамонтов
Resizer

                           storage
                       storage

     Front   hash
                    image_filter()
                                     Low
                           storage
                       storage       CPU
                    image_filter()


                                     Mons Anderson
                                     Олег Мамонтов
Resizer

                         storage
                      storage
             Resize
 Front     Resize
          Resize          storage
                      storage



                            Mons Anderson
                            Олег Мамонтов
Hashing

                                   storage
                                storage
                   Resize
 Front   Hash    Resize
                Resize      ?       storage
                                storage



                                      Mons Anderson
                                      Олег Мамонтов
Hashing

                                     storage
                                  storage
    Resize
  Resize
 Resize
             ScaleHash(time,id)
                                      storage
                                  storage



                                        Mons Anderson
                                        Олег Мамонтов
Hashing

           URL: http://…/ObjectID
          ObjectID = (xxx)-(xxx)-…


                    ID     Time
                                     Mons Anderson
                                     Олег Мамонтов
Hashing
                          a
                    b                 c
                                      d
                                                       e
past      start         upgrade over        future
                                                       Timeline




                                              0x0FFF
                          0x00FF




                                   0x02FF
 0x0000




           0x0010




                                                           Mons Anderson
                                                           Олег Мамонтов
Hashing
TimeHash(Time) {
  0x0000 - 0x00FF   [   a, b ]
  0x00FF - 0x02FF   [   a, c, d ]
  0x02FF - 0x0FFF   [   c, d ]
  0x0FFF - 0xFFFF   [   f ]
}    groups
                                Mons Anderson
                                Олег Мамонтов
Hashing


IDHash(ID, groups)   group



                             Mons Anderson
                             Олег Мамонтов
Hashing


TimeHash(const Time) = const
IDHash(const ID, groups) = const


                              Mons Anderson
                              Олег Мамонтов
Access Control
                               ID

   storage
                        ACLD
 storage
  group             ACLD

                Perl:          DB
        - AnyEvent::HTTPD
         - AnyEvent::HTTP
           - AnyEvent::DBI          Mons Anderson
                                    Олег Мамонтов
Access Control: Public object

→ GET /XXX
 Perl handler (check perms)
← 200 OK

                                Mons Anderson
                                Олег Мамонтов
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                       Mons Anderson
                                   Олег Мамонтов
Result?


  Front
Front     Resize   Storage   ACL




                             Mons Anderson
                             Олег Мамонтов
2+2=4, 2+2=4, 2+2=4, …


  Front
Front       !
          Resize       Storage   ACL
          CPU


                   Cache?
                                 Mons Anderson
                                 Олег Мамонтов
Cache…


  Front
Front     Cache   Resize   Storage   ACL




                                     Mons Anderson
                                     Олег Мамонтов
Cache is a problem :(


   Front
 Front     Cache   Resize   Storage   ACL



                                      Mons Anderson
                                      Олег Мамонтов
Front               Cache                Resize            Storage          ACLD
                                 /i            /source/           /source   /source/
/i/AxB             /i/AxB
                              proxy:          ?q=/i/AxB          handler() ?q=/i/AxB
                            //storage                 XAccel: /cache/i/AxB+
                                                       (mtime:ctime:status)


200 OK       /i                                             /source/           /source/
                   HIT                  /i/AxB+
          proxy:                                           ?q=/i/AxB+         ?q=/i/AxB+
         //cache                                                   /source
                                                                  handler()   XAccel: /int
                             /cache               /i
                             proxy:          proxy://store
                            //resize           resize()

                             cache
200 OK             200 OK               200 OK             200 OK /internal
                             store                                              Mons Anderson
                                                                                Олег Мамонтов
Combine?


 Front
Front    Cache   Resize   Storage   ACL

         MEM      CPU      HDD

                                    Mons Anderson
                                    Олег Мамонтов
Combined! Money are saved :)
            Deployed on same hosts


 Front
Front    Cache      Resize     Storage   ACL


           Full resource consumption

                                         Mons Anderson
                                         Олег Мамонтов
Combined, but scalable!
         Cache     Resize    Storage
         cluster   cluster   cluster

 Front
Front    Cache     Resize    Storage   ACL


         Cache     Resize    Storage
          +          +         +
         MEM        CPU       HDD      Mons Anderson
                                       Олег Мамонтов
Create, Update, Delete?
             Storage group



    GET         storage

                             PUT
    GET         storage      DELETE
                             OPTIONS
                                 Mons Anderson
                                 Олег Мамонтов
Temporary loss
             Storage group



    GET          storage

                             PUT
    GET          storage     DELETE
                             OPTIONS
                                 Mons Anderson
                                 Олег Мамонтов
Flashing error
                 Storage group



     GET            storage



    GET             storage



                                 Mons Anderson
                                 Олег Мамонтов
No file? Ask a friend!
               Storage group



     GET          storage

                               404
     GET          storage
                               fallback
                               proxy_pass
                                      Mons Anderson
                                      Олег Мамонтов
404 Fallback: avoiding recursion
              Storage group


   GET           storage      ask
                              next…
   unless        storage
   asked
                                      Mons Anderson
                                      Олег Мамонтов
404 Fallback
  Storage group
                  Just...
     storage
                  proxy_next_upstream
                    http_404
     storage



                                   Mons Anderson
                                   Олег Мамонтов
Again about PUT
            Storage group


               storage

                            PUT
               storage



                                  Mons Anderson
                                  Олег Мамонтов
How about single PUT?
                Storage group


                   storage

                                PUT
ZFS
                   storage      DELETE
«replication»
                                OPTIONS
                                    Mons Anderson
                                    Олег Мамонтов
Приоритеты выбора решения
●   Надежность / избыточность хранения
●   Производительность чтения и записи
●   Возможность распределения нагрузки
●   Потенциальная масштабируемость
●   Стандартные аппаратные компоненты
●   Простота в настройке и обслуживании
                                          Mons Anderson
                                          Олег Мамонтов
Традиционная работа с диском
      Файловая система
                           Имя <=> объект (inode)
      Файловая система
                           объект <=> LBA тома
      Менеджер томов
                           LBA тома <=> LBA RAID
      RAID контроллер
                           LBA RAID <=> LBA диска
     Дисковые устройства
                                                 Mons Anderson
                                                 Олег Мамонтов
Rampant layering violation ;)

           Файловая система (zfs)

          Модель агрегации (zpool)


            Дисковые устройства

                                     Mons Anderson
                                     Олег Мамонтов
stripe / mirror / raidz / ?
stripe – быстро, дешево, ненадежно

mirror – быстро, надежно, дорого

raidz – относительно надежно, недорого, медленно :(


                                                      Mons Anderson
                                                      Олег Мамонтов
Универсального решения нет :(
           Дано: 100 дисков по 100GB, 200 IOPS
Конфигурация           Объем, 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
                                                   Mons Anderson
                                                   Олег Мамонтов
Наше хранилище — 6TB / 2U
2U: 2 x 500MB + 10 x 1TB, SATA-2




mirror      raidz1        raidz1   raidz1   spare

                          stripe

                                            Mons Anderson
                                            Олег Мамонтов
Будущее уже наступило!

           snapshot
     мгновенный снимок
   (cow - быстро, дешево)
                            Mons Anderson
                            Олег Мамонтов
Будущее уже наступило!

           rollback
   откат файловой системы
     на заданный снимок
                            Mons Anderson
                            Олег Мамонтов
Будущее уже наступило!

            clone
 “альтернативная реальность”
      (ветка из снимка)
                               Mons Anderson
                               Олег Мамонтов
Будущее уже наступило!

            send
         дамп снимка
   (полный или разностный)
                             Mons Anderson
                             Олег Мамонтов
Будущее уже наступило!

           receive
        воссоздание
      снимка из дампа
                         Mons Anderson
                         Олег Мамонтов
“Почти” репликация
1.   Создание мгновенного снимка (snapshot)
2.   Получение инкрементального дампа (send)
3.   Пересылка дампа на целевую машину (socketpipe)
4.   Восстановление дампа на целевой машине (receive)
5.   Создание клона файловой системы (clone)
6.   Переустановка символической ссылки (link -fhs)
7.   sleep && goto п.1;


                                                 Mons Anderson
                                                 Олег Мамонтов
Неочевидные нюансы


      Зачем нужны клоны и
     символические ссылки?

                             Mons Anderson
                             Олег Мамонтов
Неочевидные нюансы


       Удаление старых
       снимков и клонов

                          Mons Anderson
                          Олег Мамонтов
Неочевидные нюансы
●   Минимизация лага репликации
●   Мониторинг актуальности
●   Уникальные имена файлов при обновлениях
●   Двухуровневое кеширование

                                        Mons Anderson
                                        Олег Мамонтов
© 2011
Mons Anderson <mons@cpan.org>
Олег Мамонтов <lonerr@cpan.org>
   Рамблер Интернет Холдинг


                                  Mons Anderson
                                  Олег Мамонтов
?
    Mons Anderson
    Олег Мамонтов

Weitere ähnliche Inhalte

Mehr von rit2011

ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
I pv6   малоизвестные подробности. андрей пантюхин. зал 2I pv6   малоизвестные подробности. андрей пантюхин. зал 2
I pv6 малоизвестные подробности. андрей пантюхин. зал 2rit2011
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4rit2011
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4rit2011
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3rit2011
 
от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4rit2011
 
Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2rit2011
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...rit2011
 
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2rit2011
 
круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2rit2011
 
бэм! в.харисов, с. бережной. зал 2
бэм! в.харисов, с. бережной. зал 2бэм! в.харисов, с. бережной. зал 2
бэм! в.харисов, с. бережной. зал 2rit2011
 
круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2rit2011
 
менеджмент в стиле коучинг. с. панкратов. зал 2
менеджмент в стиле коучинг. с. панкратов. зал 2менеджмент в стиле коучинг. с. панкратов. зал 2
менеджмент в стиле коучинг. с. панкратов. зал 2rit2011
 
как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3rit2011
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...rit2011
 
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...rit2011
 

Mehr von rit2011 (20)

ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
I pv6   малоизвестные подробности. андрей пантюхин. зал 2I pv6   малоизвестные подробности. андрей пантюхин. зал 2
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3
 
от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4
 
Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
 
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
 
круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2
 
бэм! в.харисов, с. бережной. зал 2
бэм! в.харисов, с. бережной. зал 2бэм! в.харисов, с. бережной. зал 2
бэм! в.харисов, с. бережной. зал 2
 
круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2круглый стол по найму. александр зиза. зал 2
круглый стол по найму. александр зиза. зал 2
 
менеджмент в стиле коучинг. с. панкратов. зал 2
менеджмент в стиле коучинг. с. панкратов. зал 2менеджмент в стиле коучинг. с. панкратов. зал 2
менеджмент в стиле коучинг. с. панкратов. зал 2
 
как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
 
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...
способы защиты медиа контента. возможен ли Drm в вебе. денис елданди, алексан...
 

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

  • 2. NAS, SAN or custom? SAN: FC/iSCSI NAS: NFS/CIFS/... Custom: * Mons Anderson Олег Мамонтов
  • 3. Что нам нужно? – отдавать данные – по протоколу HTTP Mons Anderson Олег Мамонтов
  • 4. HTTP это nginx ;) Mons Anderson Олег Мамонтов
  • 5. Что нам нужно? User → nginx → SAN ? User → nginx → NAS ? User → nginx → nginx ? Mons Anderson Олег Мамонтов
  • 6. Стоимость решений Nginx: $ NAS: $$ SAN: $$$$$$$ Mons Anderson Олег Мамонтов
  • 7. Наше хранилище 8 U, 24Tb 4 x ( 2U, 6Tb ( 2+10 Tb raw ) 4 x redundancy for each file Mons Anderson Олег Мамонтов
  • 8. Что нам нужно от хранилища? CRUD! (Create, Read, Update, Delete ) Mons Anderson Олег Мамонтов
  • 9. Что нам нужно от хранилища? Read → HTTP C, U, D → ? Mons Anderson Олег Мамонтов
  • 10. Что нам нужно от хранилища? Read → HTTP C, U, D → HTTP! Mons Anderson Олег Мамонтов
  • 11. WebDAV – Простой – Прозрачный – Поддерживаемый в nginx* – Легко реализуемый Mons Anderson Олег Мамонтов
  • 12. * WebDAV + ACL Patch: – X-ACL: 0644 – X-Time: 1234567890 Mons Anderson Олег Мамонтов
  • 13. Step by step: Front nginx Mons Anderson Олег Мамонтов
  • 14. Front nginx Mons Anderson Олег Мамонтов
  • 15. Front nginx CARP nginx Mons Anderson Олег Мамонтов
  • 16. Front nginx CARP nginx Mons Anderson Олег Мамонтов
  • 17. Storage storage N/2 N Tb = storage N/2 Mons Anderson Олег Мамонтов
  • 18. Storage N Tb storage Front hash storage Mons Anderson Олег Мамонтов
  • 19. Storage N Tb storage Front hash storage Mons Anderson Олег Мамонтов
  • 20. Storage storage storage Front hash storage storage Mons Anderson Олег Мамонтов
  • 21. Storage storage storage Front hash storage storage Mons Anderson Олег Мамонтов
  • 22. Resizer storage storage image_filter() Front hash storage storage image_filter() Mons Anderson Олег Мамонтов
  • 23. Resizer storage storage Front hash image_filter() Low storage storage CPU image_filter() Mons Anderson Олег Мамонтов
  • 24. Resizer storage storage Resize Front Resize Resize storage storage Mons Anderson Олег Мамонтов
  • 25. Hashing storage storage Resize Front Hash Resize Resize ? storage storage Mons Anderson Олег Мамонтов
  • 26. Hashing storage storage Resize Resize Resize ScaleHash(time,id) storage storage Mons Anderson Олег Мамонтов
  • 27. Hashing URL: http://…/ObjectID ObjectID = (xxx)-(xxx)-… ID Time Mons Anderson Олег Мамонтов
  • 28. Hashing a b c d e past start upgrade over future Timeline 0x0FFF 0x00FF 0x02FF 0x0000 0x0010 Mons Anderson Олег Мамонтов
  • 29. Hashing TimeHash(Time) { 0x0000 - 0x00FF [ a, b ] 0x00FF - 0x02FF [ a, c, d ] 0x02FF - 0x0FFF [ c, d ] 0x0FFF - 0xFFFF [ f ] } groups Mons Anderson Олег Мамонтов
  • 30. Hashing IDHash(ID, groups) group Mons Anderson Олег Мамонтов
  • 31. Hashing TimeHash(const Time) = const IDHash(const ID, groups) = const Mons Anderson Олег Мамонтов
  • 32. Access Control ID storage ACLD storage group ACLD Perl: DB - AnyEvent::HTTPD - AnyEvent::HTTP - AnyEvent::DBI Mons Anderson Олег Мамонтов
  • 33. Access Control: Public object → GET /XXX Perl handler (check perms) ← 200 OK Mons Anderson Олег Мамонтов
  • 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 Mons Anderson Олег Мамонтов
  • 35. Result? Front Front Resize Storage ACL Mons Anderson Олег Мамонтов
  • 36. 2+2=4, 2+2=4, 2+2=4, … Front Front ! Resize Storage ACL CPU Cache? Mons Anderson Олег Мамонтов
  • 37. Cache… Front Front Cache Resize Storage ACL Mons Anderson Олег Мамонтов
  • 38. Cache is a problem :( Front Front Cache Resize Storage ACL Mons Anderson Олег Мамонтов
  • 39. Front Cache Resize Storage ACLD /i /source/ /source /source/ /i/AxB /i/AxB proxy: ?q=/i/AxB handler() ?q=/i/AxB //storage XAccel: /cache/i/AxB+ (mtime:ctime:status) 200 OK /i /source/ /source/ HIT /i/AxB+ proxy: ?q=/i/AxB+ ?q=/i/AxB+ //cache /source handler() XAccel: /int /cache /i proxy: proxy://store //resize resize() cache 200 OK 200 OK 200 OK 200 OK /internal store Mons Anderson Олег Мамонтов
  • 40. Combine? Front Front Cache Resize Storage ACL MEM CPU HDD Mons Anderson Олег Мамонтов
  • 41. Combined! Money are saved :) Deployed on same hosts Front Front Cache Resize Storage ACL Full resource consumption Mons Anderson Олег Мамонтов
  • 42. Combined, but scalable! Cache Resize Storage cluster cluster cluster Front Front Cache Resize Storage ACL Cache Resize Storage + + + MEM CPU HDD Mons Anderson Олег Мамонтов
  • 43. Create, Update, Delete? Storage group GET storage PUT GET storage DELETE OPTIONS Mons Anderson Олег Мамонтов
  • 44. Temporary loss Storage group GET storage PUT GET storage DELETE OPTIONS Mons Anderson Олег Мамонтов
  • 45. Flashing error Storage group GET storage GET storage Mons Anderson Олег Мамонтов
  • 46. No file? Ask a friend! Storage group GET storage 404 GET storage fallback proxy_pass Mons Anderson Олег Мамонтов
  • 47. 404 Fallback: avoiding recursion Storage group GET storage ask next… unless storage asked Mons Anderson Олег Мамонтов
  • 48. 404 Fallback Storage group Just... storage proxy_next_upstream http_404 storage Mons Anderson Олег Мамонтов
  • 49. Again about PUT Storage group storage PUT storage Mons Anderson Олег Мамонтов
  • 50. How about single PUT? Storage group storage PUT ZFS storage DELETE «replication» OPTIONS Mons Anderson Олег Мамонтов
  • 51. Приоритеты выбора решения ● Надежность / избыточность хранения ● Производительность чтения и записи ● Возможность распределения нагрузки ● Потенциальная масштабируемость ● Стандартные аппаратные компоненты ● Простота в настройке и обслуживании Mons Anderson Олег Мамонтов
  • 52. Традиционная работа с диском Файловая система Имя <=> объект (inode) Файловая система объект <=> LBA тома Менеджер томов LBA тома <=> LBA RAID RAID контроллер LBA RAID <=> LBA диска Дисковые устройства Mons Anderson Олег Мамонтов
  • 53. Rampant layering violation ;) Файловая система (zfs) Модель агрегации (zpool) Дисковые устройства Mons Anderson Олег Мамонтов
  • 54. stripe / mirror / raidz / ? stripe – быстро, дешево, ненадежно mirror – быстро, надежно, дорого raidz – относительно надежно, недорого, медленно :( Mons Anderson Олег Мамонтов
  • 55. Универсального решения нет :( Дано: 100 дисков по 100GB, 200 IOPS Конфигурация Объем, 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 Mons Anderson Олег Мамонтов
  • 56. Наше хранилище — 6TB / 2U 2U: 2 x 500MB + 10 x 1TB, SATA-2 mirror raidz1 raidz1 raidz1 spare stripe Mons Anderson Олег Мамонтов
  • 57. Будущее уже наступило! snapshot мгновенный снимок (cow - быстро, дешево) Mons Anderson Олег Мамонтов
  • 58. Будущее уже наступило! rollback откат файловой системы на заданный снимок Mons Anderson Олег Мамонтов
  • 59. Будущее уже наступило! clone “альтернативная реальность” (ветка из снимка) Mons Anderson Олег Мамонтов
  • 60. Будущее уже наступило! send дамп снимка (полный или разностный) Mons Anderson Олег Мамонтов
  • 61. Будущее уже наступило! receive воссоздание снимка из дампа Mons Anderson Олег Мамонтов
  • 62. “Почти” репликация 1. Создание мгновенного снимка (snapshot) 2. Получение инкрементального дампа (send) 3. Пересылка дампа на целевую машину (socketpipe) 4. Восстановление дампа на целевой машине (receive) 5. Создание клона файловой системы (clone) 6. Переустановка символической ссылки (link -fhs) 7. sleep && goto п.1; Mons Anderson Олег Мамонтов
  • 63. Неочевидные нюансы Зачем нужны клоны и символические ссылки? Mons Anderson Олег Мамонтов
  • 64. Неочевидные нюансы Удаление старых снимков и клонов Mons Anderson Олег Мамонтов
  • 65. Неочевидные нюансы ● Минимизация лага репликации ● Мониторинг актуальности ● Уникальные имена файлов при обновлениях ● Двухуровневое кеширование Mons Anderson Олег Мамонтов
  • 66. © 2011 Mons Anderson <mons@cpan.org> Олег Мамонтов <lonerr@cpan.org> Рамблер Интернет Холдинг Mons Anderson Олег Мамонтов
  • 67. ? Mons Anderson Олег Мамонтов