3. Текущая нагрузка и объёмы
Пользовательские фотографии
1.6 Млрд. x 4 размера
200 ТБ
3.5 М загрузок в день
150 К чтений/сек
Полноразмерные фотографии ???
Груповые фотографии
Музыка
...
4. Существующие решения
one-db — Berkeley + Remote Interface
Невысокая производительность
Низкая отказоустойчивость
Сложное обслуживание
Высокая стоимость оборудования
Мастер + Слэйв + Бэкапы = 6 копий
Бэкап – 17 часов
10. Сегменты данных
Файлы одного размера (256МБ)
Резервирование с помощью xfs_io
Один активный сегмент на запись
Уплотнение сегментов вместо отслеживания свободных
фрагментов
11. Индекс
Хеш таблица на десятки миллионов элементов
увеличение размера без паузы
1 примитивный массив + direct memory
данные в памяти = данные на диске
Лог транзакций
Изменения индекса → логи на отдельном диске
Синхронизация и чистка логов
Проверка целостности данных при старте
12. Кластер и Резервирование
Уникальный ИД диска
Фактор репликации - 3
Равномерное распределение реплик
Нет 2 реплик на одном сервере
Кворум записи — 2
Чтение — 1 + 1
13. Маршрутизация
Партиция
hash(ID) % N
Таблица маршрутизации
Партиция —> Диск 1, Диск 2, Диск 3, ...
15. Преимущества Регионов
Расширение не требует передвижения данных
Не надо хранить местоположения для каждого объекта
Каждый клиент имеет реплику всех версий таблицы
маршрутизации в памяти
16. Zookeeper Для Координации
Что такое Zookeeper?
Сервис для координации распределенных приложений
Дерево + Бинарные данные в узлах
Особенности Zookeeper
Распределенный
Память + лог
Кворум записи
Гарантированная последовательность
Временные вершины
Нотификации
Почему Zookeeper?
Надежный >= 3 серверов
Быстрый
17. Данные в Zookeeper
Доступные сервера и их адреса
Местоположения и статусы дисков
Таблицы маршрутизации
Распределенная блокировка
18. Обработка Ошибок
Тип проблемы Обнаружение Обработка
Вылет диска IOException Выключение диска
Вылет сервера Таймаут сессии в Zookeeper Вывод из кластера
Потеря соединения к Ошибки выполнения Блокировка сервера и
серверу запроса мониторинг
19. Hinted Handoff и востановление
Hinted Handoff
Недоступность 1 реплики → 2 реплики хинта
Чтение хинтов при старте, диск доступен на запись
Периодическая проверка хинтов
Полное восстановление данных
Диск доступен на запись
Восстановление параллельно с разных дисков