Архитектура хранилища бинарных данных на...
TRANSCRIPT
27.09.2011
Архитектура хранилища бинарных данных на Одноклассниках
Масштабность проекта, цели и задачиАрхитектура нового хранилищаЭксплуатация
Текущая нагрузка и объёмы
Пользовательские фотографии1.6 Млрд. x 4 размера200 ТБ3.5 М загрузок в день150 К чтений/секПолноразмерные фотографии ???
Груповые фотографииМузыка...
Существующие решения
one-db — Berkeley + Remote InterfaceНевысокая производительностьНизкая отказоустойчивостьСложное обслуживаниеВысокая стоимость оборудованияМастер + Слэйв + Бэкапы = 6 копийБэкап – 17 часов
Цели
Максимальная производительность на чтениеОтсутствие SPOFРезервирование вместо бэкаповБыстрое и гибкое расширение кластераДешёвое железоJAVA
На что мы смотрели
Распределенные файловые системыHDFSCassandra, Voldemort, Krati
Масштабность проекта, цели и задачиАрхитектура нового хранилищаЭксплуатация
Обзор Архитектуры
Устройство сервера
Независимые дискиДанные в сегментахИндекс в памятиNIO Socket server (Mina)
Сегменты данных
Файлы одного размера (256МБ)Резервирование с помощью xfs_io Один активный сегмент на записьУплотнение сегментов вместо отслеживания свободных фрагментов
Индекс
Хеш таблица на десятки миллионов элементовувеличение размера без паузы1 примитивный массив + direct memoryданные в памяти = данные на диске
Лог транзакцийИзменения индекса → логи на отдельном дискеСинхронизация и чистка логовПроверка целостности данных при старте
Кластер и Резервирование
Уникальный ИД дискаФактор репликации - 3Равномерное распределение реплик Нет 2 реплик на одном сервереКворум записи — 2Чтение — 1 + 1
Маршрутизация
Партицияhash(ID) % N
Таблица маршрутизацииПартиция —> Диск 1, Диск 2, Диск 3, ...
Расширение Кластера
Преимущества Регионов
Расширение не требует передвижения данныхНе надо хранить местоположения для каждого объектаКаждый клиент имеет реплику всех версий таблицы маршрутизации в памяти
Zookeeper Для КоординацииЧто такое Zookeeper?
Сервис для координации распределенных приложений
Дерево + Бинарные данные в узлах
Особенности Zookeeper
Распределенный
Память + лог
Кворум записи
Гарантированная последовательность
Временные вершины
Нотификации
Почему Zookeeper?
Надежный >= 3 серверов
Быстрый
Данные в Zookeeper
Доступные сервера и их адресаМестоположения и статусы дисковТаблицы маршрутизацииРаспределенная блокировка
Обработка Ошибок
Тип проблемы
Вылет диска
Вылет сервера
Потеря соединения к серверу
Обнаружение
IOException
Таймаут сессии в Zookeeper
Ошибки выполнения запроса
Обработка
Выключение диска
Вывод из кластера
Блокировка сервера и мониторинг
Hinted Handoff и востановление
Hinted HandoffНедоступность 1 реплики → 2 реплики хинтаЧтение хинтов при старте, диск доступен на записьПериодическая проверка хинтов
Полное восстановление данных Диск доступен на записьВосстановление параллельно с разных дисков
Масштабность проекта, цели и задачиАрхитектура нового хранилищаЭксплуатация
Развертывание
24 сервераSuperMicro16 GB RAM1TB HDD x 24
20 — хранилища2 — резервные2 — система и логи (RAID 1)
Статистика
Синтетические тесты 2000 чтений/сек 900 Мб/сек
Номинальная нагрузка 600 чтений/сек 350 Мб/сек
Характеристики 1 сервера :
Мониторинг
Мониторинг каждого Zookeeper сервераМониторинг каждого сервера хранилищ:
Доступность дисковСоединение с ZookeeperХранилище хинтовОшибки
Мониторинг кластера:Недоступные сервераНедоступные диски