53
Haystack Курс Базы данных Цесько Вадим Александрович http://incubos.org @incubos Computer Science Center 14 октября 2013 г. Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 1 / 53

Базы данных. Haystack

Embed Size (px)

DESCRIPTION

Обсуждаем здесь: http://incubos.org/posts/2013/10/14/db-haystack/

Citation preview

Page 1: Базы данных. Haystack

HaystackКурс «Базы данных»

Цесько Вадим Александровичhttp://incubos.org

@incubos

Computer Science Center

14 октября 2013 г.

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 1 / 53

Page 2: Базы данных. Haystack

Содержание

1 Введение

2 Background

3 Архитектура

4 Детали реализации

5 Заключение

6 Домашнее заданиеЦесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 2 / 53

Page 3: Базы данных. Haystack

Введение Материалы

Материалы

Doug Beaver, Sanjeev Kumar, Harry C. Li, JasonSobel, Peter Vajgel, Facebook Inc. Finding a needlein Haystack: Facebook’s photo storage. 2010

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 3 / 53

Page 4: Базы данных. Haystack

Введение Мотивация

Мотивация

Зачем мы это рассматриваем:Промышленная внедрённая технологияЛогика проектированияИнтересные проектные решенияПросто интересно, как делают взрослые дядьки

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 4 / 53

Page 5: Базы данных. Haystack

Введение Цифры

Цифры

На 2010 год:65 млрд. оригинальных фоток4х размера = 260 млрд. фоток = 20 ПБ+1 млрд. фоток (60 ТБ) каждую неделю1 Mrps в пикеВ проде 2 года

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 5 / 53

Page 6: Базы данных. Haystack

Введение Характер запросов

Характер запросов

Пишем — один разЧитаем — частоНикогда не перезаписываемУдаляем — редко

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 6 / 53

Page 7: Базы данных. Haystack

Введение Основные цели

Основные цели

High throughput and low latencyUGC, CDN, User Experience1 поиск по диску максимумМикрометаданные в памяти

Fault-tolerantUGCГеорепликация

Cost-effective$ / TB, read rps / TB$ / TB — на 28% меньше, read rps / TB — в 4раза больше vs NAS

Simple

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 7 / 53

Page 8: Базы данных. Haystack

Background Типичная архитектура

Путь запроса

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 8 / 53

Page 9: Базы данных. Haystack

Background Типичная архитектура

CDN

Клиент получает URL от Web ServerИдёт с URL’ом в CDNЕсли у CDN есть данные, то отдаётЕсли нет, то идёт в Photo Storage и кэшируетURL содержит необходимую CDN информацию

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 9 / 53

Page 10: Базы данных. Haystack

Background NFS

Главный урок

CDN не подходит для социальных фотосервисовЭффективно раздаёт «горячие» фотки (профилии свежие)Длинный хвост (непопулярные и/или старые)Длинный хвост невозможно кэшировать

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 10 / 53

Page 11: Базы данных. Haystack

Background NFS

Путь запроса

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 11 / 53

Page 12: Базы данных. Haystack

Background NFS

Хранение фоток

Каждая фотка в отдельном файле накоммерческом NASPhoto Store монтирует все разделы через NFSPhoto Store из URL вынимает путь, читает файлпо NFS и отдаёт CDN

ПроблемыТысячи файлов в каждом каталоге

Больше 10 дисковых операций на одну фоткуСотни файлов в каждом каталоге

Больше 3 дисковых операций на одну фотку(метаданные каталога, inode, содержимое файла)

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 12 / 53

Page 13: Базы данных. Haystack

Background NFS

Оптимизации

Кэш из имени файла в файловый дескрипторПропатчили ядро — системный вызовopen_by_filehandleНе сильно помогло на длинном хосте

ВыводКэш не всегда спасает

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 13 / 53

Page 14: Базы данных. Haystack

Background NFS

Альтернативы

Из используемого в Facebook:Аналог GFSMySQLHadoopФС (inode — сотни байт на файл)

ВыводВсё не очень подходит для длинного хвоста

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 14 / 53

Page 15: Базы данных. Haystack

Архитектура Новая версия

Новая версия

CDN для популярных фоток (пока что)Haystack для длинного хвоста

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 15 / 53

Page 16: Базы данных. Haystack

Архитектура Задача

Задача

Уменьшить нагрузку на дискТолько необходимые операцииУменьшить расход памяти на метаданныеДержать все метаданные в памяти

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 16 / 53

Page 17: Базы данных. Haystack

Архитектура Подход

Подход

HaystackОгромные файлы с кучей фоток в каждом

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 17 / 53

Page 18: Базы данных. Haystack

Архитектура Компоненты

Компоненты

StorePhysical volume (на каждой машине 100 х 100 ГБ =10 ТБ)Logical volume = Replica Set

DirectoryLogical volume → Physical volumeФотка → Logical volumeLogical volumes with free space

CacheПрикрывает StoreЗащищает при перезапуске CDNУменьшает зависимость от CDN

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 18 / 53

Page 19: Базы данных. Haystack

Архитектура Компоненты

Чтение фоток

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 19 / 53

Page 20: Базы данных. Haystack

Архитектура Компоненты

URL

CDN URLhttp://<CDN>/<Cache>/<Store>/<LV, Photo>

Браузер идёт на <CDN>CDN ищет у себя, используя <LV, Photo>Если не нашёл, отрезает <CDN> и идёт в <Cache>Cache ищет у себя, используя <LV, Photo>Если не нашёл, отрезает <CDN> и идёт в <Store>

Direct URLhttp://<Cache>/<Store>/<LV, Photo>

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 20 / 53

Page 21: Базы данных. Haystack

Архитектура Компоненты

Добавление фоток

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 21 / 53

Page 22: Базы данных. Haystack

Архитектура Directory

Функции Directory

Отображение из логических томов в физическиеПри добавлении фотокПри конструировании URL’ов фоток

Балансирует нагрузкуЗапись по логическим томамЧтение по физическим томам

Определяет, кто будет отдавать: CDN или CacheПомечает логические тома как read-only

Эксплуатационные причиныНет свободного места

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 22 / 53

Page 23: Базы данных. Haystack

Архитектура Directory

Write-enabling

Новые Store доступны на записьТолько на такие машины добавляются фоткиКогда место на машине кончается — помечаетсякак read-only

Внимание!Это влечёт определённые последствия

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 23 / 53

Page 24: Базы данных. Haystack

Архитектура Directory

Устройство Directory

Хранит данные в реплицированной БДПростой сервис на PHPИспользует memcachedЕсли теряем Store, то удаляем соответствующееотображение и добавляем после замены машины

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 24 / 53

Page 25: Базы данных. Haystack

Архитектура Cache

Функции Cache

Получает HTTP-запросы от CDN и браузеровDHT: ключ — id фоткиЕсли нет в кэше, то идёт на StoreКэширует фотку только при выполнении двухусловий:

Запрос пришёл от пользователя, а не от CDNCDN сам закэширует

Фотка загружена с write-enabled StoreСвежие фотки более популярны — прикрываемwrite-enabled StoreФС на Store лучше работает, когда либо чтение, либозапись, но не смесь

Планируется push свежих фоток в Cache

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 25 / 53

Page 26: Базы данных. Haystack

Архитектура Store

Функции Store

Простой интерфейс — get, add, delete по <LV,Photo>На каждом Store множество PVКаждый PV содержит миллионы фотокPV — большой файл (100 ГБ)/hay/haystack_<LV_id>Получение имени файла, смещению и размерадля фотки не требует дисковых операцийОткрытые файловые дескрипторы для каждогоPVОтображение в памяти из id фотки в метаданные(файл, смещение и размер)

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 26 / 53

Page 27: Базы данных. Haystack

Детали реализации Store-файл

Store-файл

SuperblockПоследовательность needleNeedle — фотка

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 27 / 53

Page 28: Базы данных. Haystack

Детали реализации Store-файл

Формат

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 28 / 53

Page 29: Базы данных. Haystack

Детали реализации Store-файл

Поля needle

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 29 / 53

Page 30: Базы данных. Haystack

Детали реализации Store-файл

Индекс

In-memory(key, alternate-key) -> (flags, size,offset)Store может перестроить индекс при сбое

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 30 / 53

Page 31: Базы данных. Haystack

Детали реализации Запросы

Запросы

ReadWrite (Append)Delete

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 31 / 53

Page 32: Базы данных. Haystack

Детали реализации Запросы

Read

Cache передаёт с запросом: LV_id, key,alternate_key, cookie

cookie генерируется и сохраняется в Directory призагрузке фоткиcookie защищает от атак с подбором URL’ов

Store извлекает метаданныеЕсли фотка не удалена, то читает needle с дискаПроверяет cookie и checksumВозвращает фотку Cache

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 32 / 53

Page 33: Базы данных. Haystack

Детали реализации Запросы

Write

Web server передаёт с запросом: LV_id, key,alternate_key, cookie и данныеКаждый Store синхронно дописывает фотку вPV и обновляет индексМодификация фотки:

Либо в тот же LV с теми же key и alternate_key:для Store больший offset — свежее версияЛибо в другой LV: Directory обновляет метаданные ибольше не читает старую фотку

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 33 / 53

Page 34: Базы данных. Haystack

Детали реализации Запросы

Delete

Store выставляет флаг в памяти и синхронно надискеЗапросы на чтение всегда проверяют флагФотка физически не удаляется

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 34 / 53

Page 35: Базы данных. Haystack

Детали реализации Index

Функции Index

Оптимизация при перезагрузке StoreИндекс для каждого томаИндекс содержит superblock и индексные записиПорядок индексных записей соответствует тому

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 35 / 53

Page 36: Базы данных. Haystack

Детали реализации Index

Формат

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 36 / 53

Page 37: Базы данных. Haystack

Детали реализации Index

Обновление

Write:Синхронное дописывание needle в томАсинхронное — в индекс

Delete:Синхронно выставляется флаг в томеИндекс не обновляется

Работает быстрее

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 37 / 53

Page 38: Базы данных. Haystack

Детали реализации Index

Проблемы

Needle есть, а индексной записи нет (orphan)«Лечится» при перезапускеПоследняя запись в индексе — последнийnon-orphan needle

Индексные записи не отражают факт удаленияПри чтении всегда проверяется флаг deletedОбновляется индекс в памятиCache уведомляется, что фотка удалена

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 38 / 53

Page 39: Базы данных. Haystack

Детали реализации Оптимизации

Compaction

Выбрасывание удалённых и дублирующихсяneedlesКопирование в новый файл с пропуском мусораВ это время удаления идут в оба файлаДошли до конца — блокируем исходный файл наизменение и атомарно переключаемся

Интересное наблюдениеСвежие фотки удаляются чаще25% фоток/год

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 39 / 53

Page 40: Базы данных. Haystack

Детали реализации Оптимизации

Оперативная память

20% экономии:Вместо флагов у удалённых фоток offset равен 0cookie не хранятся в памяти, а проверяютсякаждый раз после чтения needle

В итоге10 байт на фотку (в среднем) vs 536 байт наxfs_inode_t

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 40 / 53

Page 41: Базы данных. Haystack

Детали реализации Оптимизации

Batch

Диски любят последовательную записьЗагрузка альбомов — основной случай

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 41 / 53

Page 42: Базы данных. Haystack

Заключение Нагрузка

Нагрузка

98% чтений — лента новостей и альбомыВозраст 2 дня — резкий спад числа обращенийCDN и Cache довольно эффективны, но длинныйхвост80% — Cache hit rateHaystack отвечает на 10% нагрузки CDNЗагрузка каждой фотки — 12 needles (4 размера х3 реплики)См. стресс тесты в оригинальной статье1

1Doug Beaver, Sanjeev Kumar, Harry C. Li, Jason Sobel, Peter Vajgel,Facebook Inc. Finding a needle in Haystack: Facebook’s photo storage. 2010Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 42 / 53

Page 43: Базы данных. Haystack

Заключение Нагрузка

Распределение трафика

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 43 / 53

Page 44: Базы данных. Haystack

Заключение Нагрузка

Рассмотрели

Архитектура HaystackОсновные компоненты: Directory, Cache, StoreИнтересные решения

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 44 / 53

Page 45: Базы данных. Haystack

Заключение Нагрузка

Уроки

Особенности реальной нагрузкиВо что упираетесьKISS2

2http://en.wikipedia.org/wiki/KISS_principleЦесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 45 / 53

Page 46: Базы данных. Haystack

Домашнее задание Промежуточные итоги

Промежуточные итоги

Студент FR0 FR1 FR2Бакрадзе Л. XГрязнов С. ?Егоров Д. XЕршов В. X XX XКоролёв Д. ?Суворов Е. X XТолстопятов В. ?Фёдоров К. X X XХомутов В. ?Шашкова Е. X

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 46 / 53

Page 47: Базы данных. Haystack

Домашнее задание Feature Requests

Feature Requests

FR 14.10 21.10 28.10 04.11 11.11FR1 XFR2 XFR3 X XFR4 X X XFR5 X X XFR6 X X X XFR7 X X X X X

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 47 / 53

Page 48: Базы данных. Haystack

Домашнее задание Feature Requests

FR5: Compaction

Развитие FR1Размер на диске не больше чем 2хАвтоматический запускРучной запускЛогиТестыСгорает — 2013-10-28

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 48 / 53

Page 49: Базы данных. Haystack

Домашнее задание Feature Requests

FR6: Migration

Развитие FR4Автоматическая балансировка при добавленииузлаРучная балансировка при удалении узлаВозможность смотреть и редактировать кольцоЛогиТестыСгорает — 2013-11-04

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 49 / 53

Page 50: Базы данных. Haystack

Домашнее задание Feature Requests

FR7: Replication

Развитие FR4Репликация по кольцуКлиент задаёт количество нод при записи/чтенииТестыСгорает — 2013-11-11

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 50 / 53

Page 51: Базы данных. Haystack

Домашнее задание Общее

Общее

Внятные сообщения при коммитахУказывайте FR в коммитах, README и/или issueREADME3: форматы, API, структура и т. д.INSTALL: сборка клиента и сервера, конфигурацияи примеры, запуск и т. д.Добавьте пользователяhttps://github.com/GabolЗадавайте вопросы: в комментариях к FR4, вissues, в почте или личноПишите логи, например: slf4j-api + logback

3http://en.wikipedia.org/wiki/Markdown4http://incubos.org

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 51 / 53

Page 52: Базы данных. Haystack

Домашнее задание Тулзы

Тулзы

IntelliJ IDEA Community Edition5

.idea, *.ipr, *.iml, *.iws, *.dat в .gitignoreДля SBT есть плагин sbt-idea

5http://www.jetbrains.com/idea/free_java_ide.htmlЦесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 52 / 53

Page 53: Базы данных. Haystack

Вопросы?

Вопросы?

http://incubos.org/contacts/Общие вопросы — в Twitter: @incubosВопросы по лекциям — в комментариях:http://incubos.org/blog/Частные вопросы — в почту[email protected]

Цесько В. А. (CompSciCenter) Haystack 14 октября 2013 г. 53 / 53