Илья Биин: Построение распределенной системы...

Preview:

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

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

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

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

Пишите: me@ilyabiin.com

Доклад читал

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

Recommended