30
ostrovok.ru Кеширование Обмен сообщениями Построение распределенной системы кеширования и обмена сообщениями 1 среда, 20 февраля 13 г.

Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

Embed Size (px)

DESCRIPTION

Одним из способов оптимизации скорости и качества работы вашего сайта является кеширование. В рамках презентации я хочу поделиться практическим опытом по созданию, настройке и тюнингу распределенной системы кеширования. Особое внимание будет уделено особенностям работы такой системы в условиях изменчивости сетевой среды и нестабильности железа. Так же речь пойдет об обмене сообщениями через такую систему. Ее преимуществах и недостатках. Презентация ориентирована на архитекторов и разработчиков систем, работающих с "тяжелыми" данными.

Citation preview

Page 1: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

КешированиеОбмен сообщениями

Построение распределенной системы кеширования и обмена сообщениями1среда, 20 февраля 13 г.

Page 2: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

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

Зависимость от работоспособности провайдеров

Отсутствие инструментов для сбора и анализа цен о доступности номеров

Плохо маштабируемая архитектура

Выход из строя оборудования приводил к падению сервисов поиска и бронирования

На заре развития

2среда, 20 февраля 13 г.

Page 3: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Полезные типы данных (hashes, sorted sets, lists, ...)

Большое количество команд для работы с этими данными

Управление консистентностью

Транзакции

Подписки

Lua-скриптинг

Производительность

Redis

3среда, 20 февраля 13 г.

Page 4: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Redis-pyРекомендуемый и активно развиваемый клиент

TxredisapiРеализация клиента на базе Twisted

RediscoРеализация ORM подхода

Клиенты Redis в python

4среда, 20 февраля 13 г.

Page 5: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Поддерживает pipelining и транзакции

Интеграция с парсером Redis-протокола hiredis

Пул соединений

Не умеет таймаутов исполнения команд

Не умеет шардинга или динамического переключения серверов

Redis-py

5среда, 20 февраля 13 г.

Page 6: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Сериализация данных

Базовый тип хранения данных строка

cPickle

pickle protocol?

json, ujson, ...

marshal

msgpack

6среда, 20 февраля 13 г.

Page 7: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Хранение данных в контексте ключ-значение

Хранение данных с использование встроенных типов

Анализ и статистика ( счетчики, sorted sets )

Использование в качестве сервера очередей

Подписки

Сценарии использования Redis

7среда, 20 февраля 13 г.

Page 8: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Кешированиев Redis

Построение распределенной системы кеширования и обмена сообщениями8среда, 20 февраля 13 г.

Page 9: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

50’000 операций чтения/записи в секунду

MGET, MSET

Pipelining vs транзакции

Expiration

Soft-timeout

Кеширование в Redis

9среда, 20 февраля 13 г.

Page 10: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Длинные ключи это плохая идея

Короткие тоже

Небольшие хеши ( как структура данных редиса ) занимают гораздо меньше памяти, чем такое количество ключей и значений

Кеширование в Redis

10среда, 20 февраля 13 г.

Page 11: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Random

Random with seed

Modula

Ketama

Большой объем данных

Шардинг

Хеш +алгоритм

Кеш 1

Кеш 2

Кеш 3

Клиент 1

 Клиент 2

11среда, 20 февраля 13 г.

Page 12: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Практически полное отсутствие оверхеда на запрос

Необходимость синхронизации алгоритма шардинга

Плохая переносимость между клиентами/языками

Шардинг на стороне клиента

12среда, 20 февраля 13 г.

Page 13: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Автоматический pipelining

Автоматический шардинг

Иногда встречаются проблемы с его кодом

Поддерживает не все команды редиса

Twemproxy

13среда, 20 февраля 13 г.

Page 14: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Схема шардинга с twemproxy

tw конфигшардинг

Кеш 1

Кеш 2

Кеш 3

tw

tw

tw - tmemproxy daemon

tw запущен на каждом клиентском хосте

tw каждого конкретного хоста самостоятельно управляет соединениями до кеш-серверов

14среда, 20 февраля 13 г.

Page 15: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Обмен сообщениями

Построение распределенной системы кеширования и обмена сообщениями15среда, 20 февраля 13 г.

Page 16: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Redis для обмена сообщениями

Для реализации one-to-one используются списки

BLPOP, BLPOPRPUSH

Для реализации many-to-many используются подписки

PUBLISH, SUBSCRIBE

Twemproxy непригоден для шардинга обмена сообщениями

16среда, 20 февраля 13 г.

Page 17: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Отдельно запущенный сервис мониторит доступность подконтрольных ему серверов Redis и, на основе собранных данных, открывает или закрывает tcp-туннель до определенных серверов

Плюсы - прозрачность для клиентских библиотек

Минусы - дополнительная точка отказа (от оверхеда на проксирование данный подход позволяет избавиться)

Redis guard

17среда, 20 февраля 13 г.

Page 18: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Master-Slave репликация

Основной инструмент обеспечения отказоустойчивости Redis как сервера очередей

Идемпотентность установки роли

Интеграция с redis_guard

18среда, 20 февраля 13 г.

Page 19: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Схема работы redis_guard

Пингование подконтрольных серверов

Сохранение полученного состояние системы

Получение состояние системы с других хостов

rgRedis 2

Redis 1PingSave

Load

Три типа взаимодействия

PingSave

Load

rg

PingSave

Load

PingSave

Load

19среда, 20 февраля 13 г.

Page 20: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоги

Построение распределенной системы кеширования и обмена сообщениями20среда, 20 февраля 13 г.

Page 21: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

21среда, 20 февраля 13 г.

Page 22: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

rgRedis 2

Redis 2

rg

21среда, 20 февраля 13 г.

Page 23: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

rgR

edis

2

Red

is 2

rg

21среда, 20 февраля 13 г.

Page 24: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

rgR

edis

2

Red

is 2

rg

tw конфигшардинг

Кеш 1

Кеш 2

Кеш 3

tw

tw

21среда, 20 февраля 13 г.

Page 25: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

rgR

edis

2

Red

is 2

rg

tw конфигшардинг

Кеш 1

Кеш 2

Кеш 3

tw

tw

21среда, 20 февраля 13 г.

Page 26: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Итоговая схема

rgR

edis

2

Red

is 2

rg

tw конфигшардинг

Кеш 1

Кеш 2

Кеш 3

tw

tw

хост 1

хост 2

21среда, 20 февраля 13 г.

Page 27: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Что в итоге

Очень высокий хит-рейт в кеш без запросов к провайдеру

В случае временных сбоев поставщиков мы используем кеш

Благодаря большому объему собранных данных, аналитики могут прогнозировать спрос и цены

Архитектура горизонально машcтабируется

Необходим отказ половины машин для сбоя в работе сервиса

22среда, 20 февраля 13 г.

Page 28: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Немного цифр

100гб данных в кеше

30’000 операций с кешом в секунду

0.5 мс на отель - скорость отдачи данных из кеша

6 месяцев прогнозирования цен и доступности отелей

23среда, 20 февраля 13 г.

Page 29: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Немного цифр

100гб данных в кеше

30’000 операций с кешом в секунду

0.5 мс на отель - скорость отдачи данных из кеша

6 месяцев прогнозирования цен и доступности отелей

Ваши вопросы

23среда, 20 февраля 13 г.

Page 30: Илья Биин: Построение распределенной системы кеширования и обмена сообщениями

ostrovok.ru

Спасибо за внимание

Илья Биин,архитектор в компании Островок.ру

Занимаюсь развитием поискового сервиса.

Пишите: [email protected]

Доклад читал

24среда, 20 февраля 13 г.