SlideShare a Scribd company logo
1 of 30
Download to read offline
Кеширование
                           Обмен сообщениями
                                                                             ostrovok.ru

                          Построение распределенной системы кеширования и обмена сообщениями
среда, 20 февраля 13 г.                                                                        1
На заре развития
                          Длительное время запроса данных у провайдера отелей
                          Зависимость от работоспособности провайдеров
                          Отсутствие инструментов для сбора и анализа цен о
                          доступности номеров
                          Плохо маштабируемая архитектура
                          Выход из строя оборудования приводил к падению сервисов
                          поиска и бронирования
                                                                      ostrovok.ru



среда, 20 февраля 13 г.                                                             2
Redis
                          Полезные типы данных (hashes, sorted sets, lists, ...)
                          Большое количество команд для работы с этими данными
                          Управление консистентностью
                          Транзакции
                          Подписки
                          Lua-скриптинг
                          Производительность
                                                                            ostrovok.ru



среда, 20 февраля 13 г.                                                                   3
Клиенты Redis в python

                          Redis-py
                          Рекомендуемый и активно развиваемый клиент
                          Txredisapi
                          Реализация клиента на базе Twisted
                          Redisco
                          Реализация ORM подхода


                                                                       ostrovok.ru



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

                          Поддерживает pipelining и транзакции
                          Интеграция с парсером Redis-протокола hiredis
                          Пул соединений
                          Не умеет таймаутов исполнения команд
                          Не умеет шардинга или динамического переключения
                          серверов

                                                                      ostrovok.ru



среда, 20 февраля 13 г.                                                             5
Сериализация данных
                          Базовый тип хранения данных строка
                          cPickle
                          pickle protocol?
                          json, ujson, ...
                          marshal
                          msgpack

                                                               ostrovok.ru



среда, 20 февраля 13 г.                                                      6
Сценарии использования Redis

                           Хранение данных в контексте ключ-значение
                           Хранение данных с использование встроенных типов
                           Анализ и статистика ( счетчики, sorted sets )
                           Использование в качестве сервера очередей
                           Подписки


                                                                           ostrovok.ru



среда, 20 февраля 13 г.                                                                  7
Кеширование
                                     в Redis
                                                                             ostrovok.ru

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

                          50’000 операций чтения/записи в секунду
                          MGET, MSET
                          Pipelining vs транзакции
                          Expiration
                          Soft-timeout


                                                                    ostrovok.ru



среда, 20 февраля 13 г.                                                           9
Кеширование в Redis

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


                                                                     ostrovok.ru



среда, 20 февраля 13 г.                                                             10
Большой объем данных
                                                             Шардинг

                          Random
                                             Клиент 1                        Кеш 1
                          Random with seed
                                                          Хеш +
                                                                             Кеш 2
                          Modula                         алгоритм
                          Ketama              Клиент 2                       Кеш 3



                                                               ostrovok.ru



среда, 20 февраля 13 г.                                                              11
Шардинг на стороне клиента


                          Практически полное отсутствие оверхеда на запрос
                          Необходимость синхронизации алгоритма шардинга
                          Плохая переносимость между клиентами/языками



                                                                     ostrovok.ru



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

                          Автоматический pipelining
                          Автоматический шардинг
                          Иногда встречаются проблемы с его кодом
                          Поддерживает не все команды редиса


                                                                    ostrovok.ru



среда, 20 февраля 13 г.                                                           13
Схема шардинга с twemproxy

        tw - tmemproxy daemon
                                       tw                    Кеш 1
        tw запущен на каждом
        клиентском хосте                    tw конфиг
                                                             Кеш 2
                                             шардинг
        tw каждого конкретного хоста
        самостоятельно управляет       tw                    Кеш 3
        соединениями до кеш-
        серверов



                                                        ostrovok.ru



среда, 20 февраля 13 г.                                               14
Обмен
                                  сообщениями
                                                                             ostrovok.ru

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

                           Для реализации one-to-one используются списки
                           BLPOP, BLPOPRPUSH
                           Для реализации many-to-many используются подписки
                           PUBLISH, SUBSCRIBE
                           Twemproxy непригоден для шардинга обмена сообщениями


                                                                      ostrovok.ru



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

                          Отдельно запущенный сервис мониторит доступность
                          подконтрольных ему серверов Redis и, на основе собранных
                          данных, открывает или закрывает tcp-туннель до
                          определенных серверов
                          Плюсы - прозрачность для клиентских библиотек
                          Минусы - дополнительная точка отказа (от оверхеда на
                          проксирование данный подход позволяет избавиться)

                                                                      ostrovok.ru



среда, 20 февраля 13 г.                                                              17
Master-Slave репликация

                          Основной инструмент обеспечения отказоустойчивости
                          Redis как сервера очередей
                          Идемпотентность установки роли
                          Интеграция с redis_guard



                                                                   ostrovok.ru



среда, 20 февраля 13 г.                                                          18
Схема работы 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
Итоги
                                                                             ostrovok.ru

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




                                           ostrovok.ru



среда, 20 февраля 13 г.                                  21
Итоговая схема


                          Redis 2
              rg                       rg
                          Redis 2




                                                     ostrovok.ru



среда, 20 февраля 13 г.                                            21
Итоговая схема

                                    rg
                          Redis 2

                                         Redis 2
                                    rg




                                                                    ostrovok.ru



среда, 20 февраля 13 г.                                                           21
Итоговая схема
                                                      tw                         Кеш 1
                                    rg
                                                            tw конфиг
                                                                                 Кеш 2
                                                             шардинг
                          Redis 2

                                         Redis 2




                                                      tw                         Кеш 3
                                    rg




                                                                        ostrovok.ru



среда, 20 февраля 13 г.                                                                  21
Итоговая схема

                                                       tw                   Кеш 1
                                    rg


                                                            tw конфиг
                          Redis 2

                                         Redis 2


                                                                            Кеш 2
                                                             шардинг


                                                       tw                   Кеш 3
                                    rg




                                                                        ostrovok.ru



среда, 20 февраля 13 г.                                                               21
Итоговая схема

                                                   хост 1   tw                   Кеш 1
                                    rg


                                                                 tw конфиг
                          Redis 2

                                         Redis 2


                                                                                 Кеш 2
                                                                  шардинг

                                                   хост 2   tw                   Кеш 3
                                    rg




                                                                             ostrovok.ru



среда, 20 февраля 13 г.                                                                    21
Что в итоге

                          Очень высокий хит-рейт в кеш без запросов к провайдеру
                          В случае временных сбоев поставщиков мы используем кеш
                          Благодаря большому объему собранных данных, аналитики
                          могут прогнозировать спрос и цены
                          Архитектура горизонально машcтабируется
                          Необходим отказ половины машин для сбоя в работе сервиса

                                                                      ostrovok.ru



среда, 20 февраля 13 г.                                                              22
Немного цифр
                          100гб данных в кеше
                          30’000 операций с кешом в секунду
                          0.5 мс на отель - скорость отдачи данных из кеша
                          6 месяцев прогнозирования цен и доступности отелей




                                                                       ostrovok.ru



среда, 20 февраля 13 г.                                                              23
Немного цифр
                          100гб данных в кеше
                          30’000 операций с кешом в секунду
                          0.5 мс на отель - скорость отдачи данных из кеша
                          6 месяцев прогнозирования цен и доступности отелей



                                    Ваши вопросы
                                                                       ostrovok.ru



среда, 20 февраля 13 г.                                                              23
Спасибо за внимание
                                      Доклад читал
                                   Илья Биин,
                                   архитектор в компании Островок.ру

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

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



                                                      ostrovok.ru



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

More Related Content

More from it-people

«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...it-people
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...it-people
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...it-people
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...it-people
 

More from it-people (20)

«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
 

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

  • 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
  • 21. Итоговая схема ostrovok.ru среда, 20 февраля 13 г. 21
  • 22. Итоговая схема Redis 2 rg rg Redis 2 ostrovok.ru среда, 20 февраля 13 г. 21
  • 23. Итоговая схема rg Redis 2 Redis 2 rg ostrovok.ru среда, 20 февраля 13 г. 21
  • 24. Итоговая схема tw Кеш 1 rg tw конфиг Кеш 2 шардинг Redis 2 Redis 2 tw Кеш 3 rg ostrovok.ru среда, 20 февраля 13 г. 21
  • 25. Итоговая схема tw Кеш 1 rg tw конфиг Redis 2 Redis 2 Кеш 2 шардинг tw Кеш 3 rg ostrovok.ru среда, 20 февраля 13 г. 21
  • 26. Итоговая схема хост 1 tw Кеш 1 rg tw конфиг Redis 2 Redis 2 Кеш 2 шардинг хост 2 tw Кеш 3 rg ostrovok.ru среда, 20 февраля 13 г. 21
  • 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