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

Дешевле, надёжнее, проще. Хранение петабайтов в...

Дешевле, надёжнее, проще. Хранение петабайтов видео и фото в ОК. Александр Христофоров

Технический прогресс позволил нам снимать Full HD или даже 4К-видео на телефон, загружать их и делиться с друзьями в Одноклассниках или же вести прямые трансляции на весь мир. Для нас это означает необходимость хранить десятки петабайт данных и обеспечивать к ним доступ со скоростью сотни Гб/с, а это в свою очередь требует инфраструктуры, состоящей из многих тысяч дисков и сотен серверов.

Ранее для обеспечения требуемого уровня надежности хранения данных и и отказоустойчивости мы были вынуждены хранить 3 реплики данных - по 1 в каждом ДЦ. Взрывной рост объёмов загружаемого видео и полученный опыт эксплуатации заставил нас переосмыслить подход к хранению таких данных, как фотографии и видео. Было решено разработать новую систему хранения данных с целью хранить данные дешевле и надёжнее. Немаловажно было упростить эксплуатацию системы, так как даже замена дисков и восстановление данных при таких масштабах требует значительных ресурсов.

Мой доклад о том, как мы уменьшили избыточность хранения данных с 3 до 2.1 и при этом добились более высокой надёжности и доступности системы в целом. Поделюсь опытом эксплуатации системы с тысячами дисков. Расскажу о том, как мы сделали процесс замены дисков простым и безопасным, о неожиданных проблемах и нестандартных решениях.

Oleg Anastasyev

November 09, 2017
Tweet

More Decks by Oleg Anastasyev

Other Decks in Technology

Transcript

  1. До 2016 года 2 Музыка Подарки OBS 2011 Фотографии 250

    TB Видео 2013 1 ПБ https://www.slideshare.net/profyclub_ru/ss-9541712
  2. А в чём проблема? 9 Популярность + Загрузка 4K +

    Стриминг = Видео 1 ПБ 25 ПБ 2013 2017 15 ПБ 2016 1 ПБ в месяц
  3. Количество серверов в OBS + OCS ( Фото + Видео

    ) 10 0 200 400 600 800 2011 2012 2013 2014 2015 2016 2017 800
  4. OCS — Цели 13 Хранить дешевле Хранить ЕЩЁ надёжнее Упростить

    эксплуатацию Работа при отказе ДЦ + диска/сервера
  5. Коды Рида — Соломона 15 2 1 4 3 …

    Данные — D D Можно потерять любые K дисков 1 … ECC — K K 2
  6. Распределение по 3 ДЦ 16 1 3 4 2 …

    D 1 … K 2 1 … K 2 ДЦ 3 1 … K 2 ДЦ 2 1 … K 2 ДЦ 1 K >= 1/3 (D + K) Избыточность >= 50%
  7. Восстановление данных 10 + 5 17 ДЦ 1 ДЦ 2

    ДЦ 3 Декодирование Клиент
  8. Трафик / IOPS при отказе ДЦ 19 Рост нагрузки 0%

    100% 200% 300% 400% 500% Допустимая потеря дисков при избыточности 50% 2 3 4 5
  9. Коды Рида-Соломона 3 + 3 20 Допустима потеря 3 дисков

    Избыточность + 100% K2 K3 ДЦ 3 3 ДЦ 2 1 2 ДЦ 1 K1 Нагрузка при отказе ДЦ + 150% Работа при отказе ДЦ + диска
  10. Мы пошли другим путём 21 2 1 4 3 5

    7 6 9 8 10 Данные ДЦ 1 E1 E2 E3 E4 EvenOdd ДЦ 2 ДЦ 3 X2 X1 X4 X3 X5 XOR X6 X7 XOR Данные — 10 Коды — 11 Избыточность 110%
  11. Восстановление данных 23 ДЦ 1 ДЦ 2 ДЦ 3 2

    1 4 3 5 E1 E2 7 6 9 8 10 E3 E4 X2 X1 X4 X3 X5 X6 X7 EvenOdd XOR
  12. Отказ ДЦ 24 ДЦ 1 ДЦ 2 ДЦ 3 2

    1 4 3 5 E1 E2 XOR 1 1 Клиент +100% 7 6 9 8 10 E3 E4 X2 X1 X4 X3 X5 X6 X7
  13. ДЦ 1 ДЦ 2 ДЦ 3 2 1 4 3

    5 E1 E2 7 6 9 8 10 E3 E4 X2 X1 X4 X3 X5 X6 X7 Много отказов 25 6 1 XOR EvenOdd 5 любых дисков
  14. Как записать данные 26 2 1 3 4 5 6

    7 8 9 10 2 1 3 4 5 6 7 8 9 10 10 X 1 X Нагрузка /IOPS
  15. 1 2 3 4 5 6 7 8 9 10

    X1 X2 X3 X4 X5 X6 X7 E3 E4 E3 E4 Проблема с записью 27 ДЦ 1 ДЦ 2 ДЦ 3
  16. Как писать данные 28 2 1 3 4 5 6

    7 8 9 10 2 1 3 4 5 6 7 8 9 10 2 1 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 X1 X2 X3 X4 X5 X6 X7 E3 E4 E3 E4 ДЦ 1 ДЦ 2 ДЦ 3
  17. У нас же есть OBS 29 1 2 3 4

    5 6 7 8 9 10 X1 X2 X3 X4 X5 X6 X7 E3 E4 E3 E4 OBS
  18. Чего мы добились 30 OBS OCS 200 % 110 %

    Избыточность Допустимая потеря дисков 2 5
  19. Сегменты и блоки 32 4 ГБ 4 ГБ 4 ГБ

    4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ 4 ГБ Сегмент 84 ГБ Данные 40 ГБ
  20. Хранение блоков — сервер Данных 33 Записать блок Прочитать из

    блока Восстановить блок Удалить блок Мониторинг Целостность Восстановление RAID ?
  21. Отказы дисков 38 Пул обработчиков запросов Шедулер задач Ошибки чтения/записи

    Каждый диск изолирован: Единица кластера Диски могут потеряться Мониторинг Тормоза перед смертью
  22. А зачем нам файловая система? 40 Получаем список блочных устройств

    new RandomAccessFile(‘/dev/sdc’); MBR + GPT из Java ИД диска в GPT
  23. Что получилось? 41 Не надо монтировать, форматировать Заменить диск 1

    человек вместо 2-х Автоматический ввод в эксплуатацию
  24. Балансировка 46 Восстановить на B блок с A Одинаковый %

    заполнения Диск, заполненный > среднего A Диск, заполненный < среднего B
  25. Время чтения при восстановлении данных 47 0 5.5 11 16.5

    22 Скорость восстановления, % 0 5 100 x 3 + 30 % Время, мс
  26. Что можно сделать? 48 CFQ + ioprio_set (one.nio.os.Proc) Фоновые процессы:

    nice, idle Системные запросы: низкий приоритет Ограничение трафика Клиентские запросы: высокий приоритет
  27. Расширение кластера 49 Добавлено 2000 дисков Перемещено 6.75 ПБ Заняло

    14 дней 0 5.5 11 16.5 22 Скорость восстановления, % 0 5 100 + 7 % Время, мс
  28. Сегменты и блоки 50 Сегмент 84 ГБ Блок 4 ГБ

    1 2 3 4 5 6 7 8 9 10 X1 X2 X3 X4 X5 X6 X7 E3 E4 E3 E4 Данные 40 ГБ
  29. Устройство Индекса 56 Сегмент 1: Диск + Хост … X7:

    Диск + Хост Сервер Данных Список дисков Список блоков Сегмент Смещение Размер Ключ RAM
  30. Спекулятивное чтение из индекса 57 Клиент Индекс RAM one-nio Индекс

    RAM one-nio Сегмент Смещение Размер 1: Диск + Хост … X7: Диск + Хост
  31. Управление кластером 60 Сервер Данных Список дисков Список блоков Сервер

    Управления Удалить блок Восстановить блок Сервер Управления Мастер Слейв
  32. Принятие решений 62 Нет блока Восстановить блок Пустой диск Восстановить

    блок Лишний блок Удалить блок Сбой диска Удалить все блоки
  33. Что в OCS сегодня 64 Старше 140 дней Старше 1.5

    лет Видео Фото 80% данных 40% данных 60% запросов 40% запросов
  34. Оборудование 65 240 серверов данных 8400 дисков 12 индексов 150

    заменённых дисков 4 расширения кластера
  35. Количество серверов в OBS + OCS ( Фото + Видео

    ) 67 0 250 500 750 1000 2011 2012 2013 2014 2015 2016 2017 2018 800 625