Архитектура хранения и отдачи фотографий в badoo

101
Архитектура хранения и отдачи фотографий в Badoo Артем Денисов, Badoo

Upload: badoo-development

Post on 19-Jan-2017

106 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Архитектура хранения и отдачи фотографий в Badoo

Архитектура хранения и отдачи фотографий в Badoo

Артем Денисов, Badoo

Page 2: Архитектура хранения и отдачи фотографий в Badoo

330 млн. пользователей3 Pb фотографий3,5 млн. новых фотографий в день80 тыс. запросов в секунду за фото

Page 3: Архитектура хранения и отдачи фотографий в Badoo

Тривиальный пример

Page 4: Архитектура хранения и отдачи фотографий в Badoo

Тривиальный пример

photos1

photos2

photosN

Page 5: Архитектура хранения и отдачи фотографий в Badoo

Тривиальный пример

place_id

place_id: 1..5

place_id: 6..11

place_id: m..n

photos1

photos2

photosN

Page 6: Архитектура хранения и отдачи фотографий в Badoo

Тривиальный пример: проблемы

Page 7: Архитектура хранения и отдачи фотографий в Badoo

Тривиальный пример: проблемы

Page 8: Архитектура хранения и отдачи фотографий в Badoo

! Ограниченная вместимость

Тривиальный пример: проблемы

Page 9: Архитектура хранения и отдачи фотографий в Badoo

! Ограниченная вместимость! Нетипичная конфигурация машин

Тривиальный пример: проблемы

Page 10: Архитектура хранения и отдачи фотографий в Badoo

! Ограниченная вместимость! Нетипичная конфигурация машин! Цена

Тривиальный пример: проблемы

Page 11: Архитектура хранения и отдачи фотографий в Badoo

Используем систему хранения данных

bphotos1

bphotos2

bphotosN Storage Area Network (SAN)

Page 12: Архитектура хранения и отдачи фотографий в Badoo

! Меньше $/Gb

bphotos1

bphotos2

bphotosN Storage Area Network (SAN)

Используем систему хранения данных

Page 13: Архитектура хранения и отдачи фотографий в Badoo

! Меньше $/Gb! Больше плотность размещения

bphotos2

bphotosN Storage Area Network (SAN)

bphotos1

Используем систему хранения данных

Page 14: Архитектура хранения и отдачи фотографий в Badoo

! Меньше $/Gb! Больше плотность размещения! Быстрая деградация чтения (>500 rps per host)

bphotos2

bphotosN Storage Area Network (SAN)

bphotos1

Используем систему хранения данных

Page 15: Архитектура хранения и отдачи фотографий в Badoo

Характер нагрузки

Чтение преобладает над записью:

7*109 reads / 3.5*106 writes per day

Page 16: Архитектура хранения и отдачи фотографий в Badoo

Характер нагрузки

Горячий dataset небольшой

Чтение преобладает над записью:

7*109 reads / 3.5*106 writes per day

Page 17: Архитектура хранения и отдачи фотографий в Badoo

Характер нагрузки

Горячий dataset небольшойКажется, нам нужен кэш с LRU

Чтение преобладает над записью:

7*109 reads / 3.5*106 writes per day

Page 18: Архитектура хранения и отдачи фотографий в Badoo

Кэшированиеbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

Page 19: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

bphotos

Page 20: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

bphotosLocal cache

Page 21: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

proxy_pass

proxy_store bphotos

Page 22: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

proxy_pass

proxy_store bphotos

Page 23: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Page 24: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Cache manager daemon

Page 25: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Cache manager daemonХранит статистику запросов по файлам

Page 26: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Cache manager daemonХранит статистику запросов по файламЧасто запрашиваемые -> Hot cache

Page 27: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Cache manager daemonХранит статистику запросов по файламЧасто запрашиваемые -> Hot cacheРедко запрашиваемые -> Cold cache

Page 28: Архитектура хранения и отдачи фотографий в Badoo

Структура фотокэша

Local cache

BufferHot cacheCold cache

Access log

<photo_path> <served_by>

proxy_pass

proxy_store bphotos

Cache manager daemonХранит статистику запросов по файламЧасто запрашиваемые -> Hot cacheРедко запрашиваемые -> Cold cacheПостепенно удаляет из Cold cache

Page 29: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

photoscache2

photoscache1

photoscache3

Page 30: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

Round-robin?

photoscache2

photoscache1

photoscache3

Page 31: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

Round-robin?Hash % count?

photoscache2

photoscache1

photoscache3

Page 32: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

Round-robin?Hash % count?hash(“example_url”) = 5server_idx0 = 5 % 3 = 2photoscache2

photoscache1

photoscache3

Page 33: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

Round-robin?Hash % count?hash(“example_url”) = 5server_idx0 = 5 % 3 = 2server_idx1 = 5 % 4 = 1

Page 34: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

photoscache2

photoscache1

photoscache3

Round-robin?Hash % count?

Page 35: Архитектура хранения и отдачи фотографий в Badoo

Как распределять запросы?

Round-robin?Hash % count?Consistent hashing?photoscache2

photoscache1

photoscache3

Page 36: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

Page 37: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

Page 38: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

A

Page 39: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

BA

Page 40: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

BA

C

Page 41: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

BA

C

Page 42: Архитектура хранения и отдачи фотографий в Badoo

Consistent hashing0

hash(sharding_key)

BA

C

BA

C

Page 43: Архитектура хранения и отдачи фотографий в Badoo

Резервный фотокэшphotoscache1

bphotos

photoscache2

photoscache3

photoscache4(reserve)

Load balancer

Page 44: Архитектура хранения и отдачи фотографий в Badoo

Резервный фотокэшphotoscache1

Load balancer

photoscache2

photoscache3

photoscache4(reserve)

bphotos

Page 45: Архитектура хранения и отдачи фотографий в Badoo

Кэширование. Результаты- Hitrate (количество попаданий в кэш) 98%- Из 80k только 1600 rps доходят до bphotos

Page 46: Архитектура хранения и отдачи фотографий в Badoo

Кэширование. Результаты- Hitrate (количество попаданий в кэш) 98%- Из 80k только 1600 rps доходят до bphotos- 3 точки присутствия (Прага, Майами, Гонконг)

Page 47: Архитектура хранения и отдачи фотографий в Badoo

Кэширование. Результаты- Hitrate (количество попаданий в кэш) 98%- Из 80k только 1600 rps доходят до bphotos- 3 точки присутствия (Прага, Майами, Гонконг)

+

- Поддержка webp, progressive jpeg- Динамический resize/crop- Динамические вотермарки, фильтры (blur, pixelize)

Page 48: Архитектура хранения и отдачи фотографий в Badoo

Почему не CDN?- Хочется больше контроля и предсказуемости

Page 49: Архитектура хранения и отдачи фотографий в Badoo

Почему не CDN?- Хочется больше контроля и предсказуемости- Система развивалась постепенно

Page 50: Архитектура хранения и отдачи фотографий в Badoo

Почему не CDN?- Хочется больше контроля и предсказуемости- Система развивалась постепенно- Много специфической логики на фотокэшах

Page 51: Архитектура хранения и отдачи фотографий в Badoo

Почему не CDN?- Хочется больше контроля и предсказуемости- Система развивалась постепенно- Много специфической логики на фотокэшах- Невысокая сложность поддержки итогового решения

Page 52: Архитектура хранения и отдачи фотографий в Badoo

Почему не CDN?- Хочется больше контроля и предсказуемости- Система развивалась постепенно- Много специфической логики на фотокэшах- Невысокая сложность поддержки итогового решения

Современный CDN — хорошая альтернатива в условиях дефицита ресурсов и времени

Page 53: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

Page 54: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

80 x bphotos = ~560Tb данных40 x photoscache

X 2 ДЦ

Page 55: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

1 x POINT OF FAILURE

Page 56: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

2 x POINT OF FAILURE

Page 57: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

3 x POINT OF FAILURE

Page 58: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

3 x POINT OF FAILURE! MAINTENANCE

Page 59: Архитектура хранения и отдачи фотографий в Badoo

Хранение. 2013 годbphotos1

bphotos2

bphotosN Storage Area Network (SAN)

photoscache1

photoscacheN

3 x POINT OF FAILURE ! DATA LOSS! MAINTENANCE

Page 60: Архитектура хранения и отдачи фотографий в Badoo

Резервирование v.1

bphotos

Main partitionLocal FS Fiber

Storage Area Network

Page 61: Архитектура хранения и отдачи фотографий в Badoo

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area Network

Резервирование v.1

Page 62: Архитектура хранения и отдачи фотографий в Badoo

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area Network

Резервирование v.1

Page 63: Архитектура хранения и отдачи фотографий в Badoo

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area NetworkBuffer partition

Резервирование v.1

Page 64: Архитектура хранения и отдачи фотографий в Badoo

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area NetworkBuffer partition

! NO DATA LOSS

Резервирование v.1

Page 65: Архитектура хранения и отдачи фотографий в Badoo

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area NetworkBuffer partition

! NO DATA LOSS! POINT OF FAILURE

Резервирование v.1

Page 66: Архитектура хранения и отдачи фотографий в Badoo

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area NetworkBuffer partition

! NO DATA LOSS! POINT OF FAILURE! MAINTENANCE

Резервирование v.1

Page 67: Архитектура хранения и отдачи фотографий в Badoo

Dphotos

Async queue

bphotos

Local FS

Main partition

Backup partitionFiber

Storage Area Network

Fiber

Storage Area NetworkBuffer partition

Page 68: Архитектура хранения и отдачи фотографий в Badoo

Dphotos

Async queue

bphotos

Local FS

Main partition

Backup partition

Buffer partition

Page 69: Архитектура хранения и отдачи фотографий в Badoo

Dphotos

Async queue

bphotos

Local FS

Main partition

Backup partition

Buffer partition

Page 70: Архитектура хранения и отдачи фотографий в Badoo

Dphotos

dphotosN

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 71: Архитектура хранения и отдачи фотографий в Badoo

Dphotos

dphotosN

Async queue

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 72: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Upload

Async queue

dphotosN

dphotosN+1Round robin + health checks

Load balancer

Page 73: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отдача

photoscache

Async queue

dphotosN

dphotosN+1Round robin + health checks

Page 74: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отдача

photoscache

Async queue

dphotosN

dphotosN+1

HIT

Round robin + health checks

Page 75: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отдача

Async queue

dphotosN

dphotosN+1

MISS

Round robin + health checks

photoscache

Page 76: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отдача

Async queue

dphotosN

dphotosN+1

MISS

Round robin + health checks

photoscache

Page 77: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отказоустойчивость

dphotosN

Async queue

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 78: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отказоустойчивость

dphotosN

Async queue

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 79: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отказоустойчивость

dphotosN

Async queue

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 80: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Отказоустойчивость

dphotosN

Async queue

Buffer partition

Main partition

dphotosN+1

Buffer partition

Main partition

Page 81: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость

Page 82: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация

Page 83: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация- Двойной запас по чтению

Page 84: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация- Двойной запас по чтению- Сложность разработки

Page 85: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация- Двойной запас по чтению- Сложность разработки

Так хранить локально — это хорошо или плохо?- Проще в эксплуатации

Page 86: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация- Двойной запас по чтению- Сложность разработки

Так хранить локально — это хорошо или плохо?- Проще в эксплуатации- Производительнее

Page 87: Архитектура хранения и отдачи фотографий в Badoo

Dphotos. Результаты- Отказоустойчивость- Простая эксплуатация- Двойной запас по чтению- Сложность разработки

Так хранить локально — это хорошо или плохо?- Проще в эксплуатации- Производительнее- В 1.5 раза дороже, чем SAN

Page 88: Архитектура хранения и отдачи фотографий в Badoo

Итоги

Page 89: Архитектура хранения и отдачи фотографий в Badoo

Итоги

Page 90: Архитектура хранения и отдачи фотографий в Badoo

Итоги

photoscache

Page 91: Архитектура хранения и отдачи фотографий в Badoo

Итоги

photoscache

CDN

Page 92: Архитектура хранения и отдачи фотографий в Badoo

Итоги

photoscache dphotos

CDN Storage layer

Page 93: Архитектура хранения и отдачи фотографий в Badoo

Итоги

photoscache dphotos

CDN Storage layer

Local drives

Page 94: Архитектура хранения и отдачи фотографий в Badoo

Итоги

photoscache dphotos

Storage Area Network

CDN Storage layer

Local drives

Page 95: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь

Page 96: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org

Page 97: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org- Чтение -> кэш- Запись -> шардинг

Page 98: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org- Чтение -> кэш- Запись -> шардинг- Immutable фотки

Page 99: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org- Чтение -> кэш- Запись -> шардинг- Immutable фотки- Resize на лету

Page 100: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org- Чтение -> кэш- Запись -> шардинг- Immutable фотки- Resize на лету- Инкрементальные асинхронные бэкапы - это хорошо

Page 101: Архитектура хранения и отдачи фотографий в Badoo

Итоги

- А надо ли улучшать? Сначала измерь http://pinba.org- Чтение -> кэш- Запись -> шардинг- Immutable фотки- Resize на лету- Инкрементальные асинхронные бэкапы - это хорошо- Если что-то может сломаться - оно сломается