Upgrade to Pro — share decks privately, control downloads, hide ads and more …

node.js for millions of images

Ivan Babrou
October 25, 2012

node.js for millions of images

Ivan Babrou

October 25, 2012
Tweet

More Decks by Ivan Babrou

Other Decks in Programming

Transcript

  1. Что есть 40+ миллионов пользователей 1.5 миллиона уников в сутки

    15 пользовательских фоток на главной 60 пользовательских фоток в ленте 60 килобайт на фото в среднем 10 терабайт данных Wednesday, October 24, 12
  2. Особенности 99% времени серверов с данными - IO “Long tail”

    problem Невозможно выровнять чтения Попасть в кеш в 3Тб данных непросто Wednesday, October 24, 12
  3. Диски тормозят Память в 100 000 раз быстрее диска, но

    диски надёжнее и вместительнее. Wednesday, October 24, 12
  4. Yeah, well, I'm gonna go build my own theme park,

    with blackjack and hookers. In fact, forget the park! Wednesday, October 24, 12
  5. Как это изнутри node.js redis disk: - data_XXX (4Gb) -

    metadata_XXX Метаданные всегда в памяти. Для чтения всегда только 1 вызов pread Wednesday, October 24, 12
  6. Redis Очень быстрый (даже слишком) Информация в бинарном виде Было:

    /u124/z1dg23.jpg Будет:{file:1}{offset:4}{length:4} Минимальная нагрузка на диск (AOF) Wednesday, October 24, 12
  7. Потоки (streams) Http запросы и ответы: req, res Data Writer:

    req.pipe(writer) Data Reader: reader.pipe(res) Wednesday, October 24, 12
  8. Только ультахардкор Выравнивание чтений (O_DIRECT) Посчитать дешевле +50% к пропускной

    способности Более ровный график использования IO Модуль для node.js (aligned-buffer) Wednesday, October 24, 12
  9. Грабли O_DIRECT Записи должны быть выровнены Линус не одобряет (fadvice/madvice)

    Повторное чтение не идёт в кеш Wednesday, October 24, 12
  10. Графики: backpack 0 225 450 675 900 backpack-a backpack-a-dc3 backpack

    -a: выровненные чтения -dc3: каждые 5 секунд echo 3 > /proc/sys/vm/drop-cache Wednesday, October 24, 12
  11. Графики: nginx 0 225 450 675 900 nginx nginx-dс nginx-dc3

    -a: выровненные чтения -dc: каждые 5 секунд echo 1 > /proc/sys/vm/drop-cache -dc3: каждые 5 секунд echo 3 > /proc/sys/vm/drop-cache Wednesday, October 24, 12
  12. Графики: вместе 0 225 450 675 900 backpack-a-dc3 nginx-dс nginx-dc3

    -a: выровненные чтения -dc: каждые 5 секунд echo 1 > /proc/sys/vm/drop-cache -dc3: каждые 5 секунд echo 3 > /proc/sys/vm/drop-cache Wednesday, October 24, 12
  13. Шардинг Фронтенды: dns round-robin Кеши: upstream hash + хаки Ресайзеры:

    выбирай любой Данные: (D)HT - почти как в торрентах Wednesday, October 24, 12
  14. Hash map Хеш: (md5(соль + user_id))[0:2] Начальный хеш: [read], [write]

    00: [1,2,3], [1,2,3] (от 00 до 39) 40: [5,6,7], [5,6,7] (от 40 до 80) 80: [8,9,10], [8,9,10] (от 80 до ff) Wednesday, October 24, 12
  15. Почему не уникальный hash на картинку Так вышло К тому

    же, мы не хостинг скриншотов Сложнее вычислить все урлы картинок Неравномерное использование ресурсов Wednesday, October 24, 12
  16. Как переживать падения Падения будут всегда Убрать точки отказа Спокойно

    падать Иметь возможность восстановиться Wednesday, October 24, 12