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