Одним из способов оптимизации скорости и качества работы вашего сайта является кеширование. В рамках презентации я хочу поделиться практическим опытом по созданию, настройке и тюнингу распределенной системы кеширования. Особое внимание будет уделено особенностям работы такой системы в условиях изменчивости сетевой среды и нестабильности железа. Так же речь пойдет об обмене сообщениями через такую систему. Ее преимуществах и недостатках. Презентация ориентирована на архитекторов и разработчиков систем, работающих с "тяжелыми" данными.
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
Илья Биин: Построение распределенной системы кеширования и обмена сообщениями
1. Кеширование
Обмен сообщениями
ostrovok.ru
Построение распределенной системы кеширования и обмена сообщениями
среда, 20 февраля 13 г. 1
2. На заре развития
Длительное время запроса данных у провайдера отелей
Зависимость от работоспособности провайдеров
Отсутствие инструментов для сбора и анализа цен о
доступности номеров
Плохо маштабируемая архитектура
Выход из строя оборудования приводил к падению сервисов
поиска и бронирования
ostrovok.ru
среда, 20 февраля 13 г. 2
3. Redis
Полезные типы данных (hashes, sorted sets, lists, ...)
Большое количество команд для работы с этими данными
Управление консистентностью
Транзакции
Подписки
Lua-скриптинг
Производительность
ostrovok.ru
среда, 20 февраля 13 г. 3
4. Клиенты Redis в python
Redis-py
Рекомендуемый и активно развиваемый клиент
Txredisapi
Реализация клиента на базе Twisted
Redisco
Реализация ORM подхода
ostrovok.ru
среда, 20 февраля 13 г. 4
5. Redis-py
Поддерживает pipelining и транзакции
Интеграция с парсером Redis-протокола hiredis
Пул соединений
Не умеет таймаутов исполнения команд
Не умеет шардинга или динамического переключения
серверов
ostrovok.ru
среда, 20 февраля 13 г. 5
6. Сериализация данных
Базовый тип хранения данных строка
cPickle
pickle protocol?
json, ujson, ...
marshal
msgpack
ostrovok.ru
среда, 20 февраля 13 г. 6
7. Сценарии использования Redis
Хранение данных в контексте ключ-значение
Хранение данных с использование встроенных типов
Анализ и статистика ( счетчики, sorted sets )
Использование в качестве сервера очередей
Подписки
ostrovok.ru
среда, 20 февраля 13 г. 7
8. Кеширование
в Redis
ostrovok.ru
Построение распределенной системы кеширования и обмена сообщениями
среда, 20 февраля 13 г. 8
9. Кеширование в Redis
50’000 операций чтения/записи в секунду
MGET, MSET
Pipelining vs транзакции
Expiration
Soft-timeout
ostrovok.ru
среда, 20 февраля 13 г. 9
10. Кеширование в Redis
Длинные ключи это плохая идея
Короткие тоже
Небольшие хеши ( как структура данных редиса ) занимают
гораздо меньше памяти, чем такое количество ключей и
значений
ostrovok.ru
среда, 20 февраля 13 г. 10
11. Большой объем данных
Шардинг
Random
Клиент 1 Кеш 1
Random with seed
Хеш +
Кеш 2
Modula алгоритм
Ketama Клиент 2 Кеш 3
ostrovok.ru
среда, 20 февраля 13 г. 11
12. Шардинг на стороне клиента
Практически полное отсутствие оверхеда на запрос
Необходимость синхронизации алгоритма шардинга
Плохая переносимость между клиентами/языками
ostrovok.ru
среда, 20 февраля 13 г. 12
13. Twemproxy
Автоматический pipelining
Автоматический шардинг
Иногда встречаются проблемы с его кодом
Поддерживает не все команды редиса
ostrovok.ru
среда, 20 февраля 13 г. 13
14. Схема шардинга с twemproxy
tw - tmemproxy daemon
tw Кеш 1
tw запущен на каждом
клиентском хосте tw конфиг
Кеш 2
шардинг
tw каждого конкретного хоста
самостоятельно управляет tw Кеш 3
соединениями до кеш-
серверов
ostrovok.ru
среда, 20 февраля 13 г. 14
15. Обмен
сообщениями
ostrovok.ru
Построение распределенной системы кеширования и обмена сообщениями
среда, 20 февраля 13 г. 15
16. Redis для обмена сообщениями
Для реализации one-to-one используются списки
BLPOP, BLPOPRPUSH
Для реализации many-to-many используются подписки
PUBLISH, SUBSCRIBE
Twemproxy непригоден для шардинга обмена сообщениями
ostrovok.ru
среда, 20 февраля 13 г. 16
17. Redis guard
Отдельно запущенный сервис мониторит доступность
подконтрольных ему серверов Redis и, на основе собранных
данных, открывает или закрывает tcp-туннель до
определенных серверов
Плюсы - прозрачность для клиентских библиотек
Минусы - дополнительная точка отказа (от оверхеда на
проксирование данный подход позволяет избавиться)
ostrovok.ru
среда, 20 февраля 13 г. 17
18. Master-Slave репликация
Основной инструмент обеспечения отказоустойчивости
Redis как сервера очередей
Идемпотентность установки роли
Интеграция с redis_guard
ostrovok.ru
среда, 20 февраля 13 г. 18
19. Схема работы redis_guard
Три типа Ping Ping
взаимодействия Save
Redis 1 Save
Load Load
rg Ping Ping rg
Пингование подконтрольных Save Save
серверов Load Redis 2 Load
Сохранение полученного
состояние системы
Получение состояние
системы с других хостов
ostrovok.ru
среда, 20 февраля 13 г. 19
20. Итоги
ostrovok.ru
Построение распределенной системы кеширования и обмена сообщениями
среда, 20 февраля 13 г. 20
27. Что в итоге
Очень высокий хит-рейт в кеш без запросов к провайдеру
В случае временных сбоев поставщиков мы используем кеш
Благодаря большому объему собранных данных, аналитики
могут прогнозировать спрос и цены
Архитектура горизонально машcтабируется
Необходим отказ половины машин для сбоя в работе сервиса
ostrovok.ru
среда, 20 февраля 13 г. 22
28. Немного цифр
100гб данных в кеше
30’000 операций с кешом в секунду
0.5 мс на отель - скорость отдачи данных из кеша
6 месяцев прогнозирования цен и доступности отелей
ostrovok.ru
среда, 20 февраля 13 г. 23
29. Немного цифр
100гб данных в кеше
30’000 операций с кешом в секунду
0.5 мс на отель - скорость отдачи данных из кеша
6 месяцев прогнозирования цен и доступности отелей
Ваши вопросы
ostrovok.ru
среда, 20 февраля 13 г. 23
30. Спасибо за внимание
Доклад читал
Илья Биин,
архитектор в компании Островок.ру
Занимаюсь развитием поискового
сервиса.
Пишите: me@ilyabiin.com
ostrovok.ru
среда, 20 февраля 13 г. 24