Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Инструменты 
высоконагруженных 
проектов: 
кеширование (Memcached, Redis), 
очереди (RabbitMQ) 
Вячеслав Москаленко
Содержание 
Инструменты кеширования данных 
• Memcached 
• Redis 
• Основные различия Memcached & Redis 
• Практическое ис...
Memcached 
• Memcached - сервис для кеширования данных в 
оперативной памяти, обладающий высокой 
производительностью. 
• ...
Memcached. Возможности 
Возможности: 
1. Быстрая работа, нет зависимости от количества данных О(1) 
2. Простой интерфейс –...
Memcached. Пример 
Реализация PHP: 
• расширение для libmemcached 
• расширение php-memcache 
Использование: простой интер...
Redis 
1. Поддержка различных типов данных – строки, хэши, списки, 
множества, сортированные множества 
2. Сохранение на д...
Redis. Типы данных 
1. Строки (String) 
2. Хэши (Hash)
Redis. Типы данных 
3. Множества (Sets) 
4. Сортированные множества (Sorted Sets)
Redis. Клиенты для PHP 
• phpredis – модуль для PHP, написан на С 
• Predis – библиотека, написанная на PHP 
• Rediska – P...
Memcached или Redis? 
Redis: 
• больше возможностей: 
очереди, транзакции, 
различные типы данных 
• позволяет хранить до ...
Пример 1. Кеш карточки товара 
Задача: реализация быстрого просмотра в Popup карточки товара, с 
минимальным обращением в ...
Пример 1. Кеш карточки товара 
На графике: 
1 - данные из Memcached 
2 - данных в Memcached нет 
2a - но есть в Redis 
2b ...
Пример 2. Параметрический поиск 
Реализация: 
• хранение заранее 
обсчитанных множеств 
товаров (ID) для каждого 
варианта...
Пример 2. Параметрический поиск 
Данные по фильтрам в категории “Телефоны” (id = 100): 
Фильтр / Вариант ID товаров Ключ в...
Очереди. RabbitMQ 
Платформа, реализующая систему обмена сообщениями посредством 
протокола AQMP (Advanced Messaging Queue...
RabbitMQ. Основные термины 
Producer – программа, которая посылает сообщения 
Exchange – обменник, все сообщения проходят ...
Обменник с типом Direct 
• для задания маршрута 
необходимо «забиндить» 
очередь с обменником 
используя binding_key 
• со...
Обменник с типом Fanout 
• сообщения попадают во 
все очереди связанные с 
обменником 
• не важно какой 
routing_key у соо...
Обменник с типом Topic 
Правила для binding_key: 
1. * (звездочка) может быть 
заменена на ровно на одно слово 
2. # (реше...
RabbitMQ на практике 
• Использование брокера сообщений RabbitMQ для выполнения 
отложенных трудоемких задач 
• Пересчет м...
Спасибо за внимание!
Prochain SlideShare
Chargement dans…5
×

Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Москаленко (Ленвендо)

3 502 vues

Publié le

Доклад Вячеслава Москаленко на HighLoad++ 2014.

Publié dans : Internet
  • Identifiez-vous pour voir les commentaires

Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Москаленко (Ленвендо)

  1. 1. Инструменты высоконагруженных проектов: кеширование (Memcached, Redis), очереди (RabbitMQ) Вячеслав Москаленко
  2. 2. Содержание Инструменты кеширования данных • Memcached • Redis • Основные различия Memcached & Redis • Практическое использование Memcached и Redis Очереди • RabbitMQ, основные понятия и принцип работы • Различные типы обменников – Direct, Fanout, Topic • Практическое применение очередей
  3. 3. Memcached • Memcached - сервис для кеширования данных в оперативной памяти, обладающий высокой производительностью. • История – разработан Brad Fitzpatrick для Livejournal в 2003 г. • Цели - кеширование часто запрашиваемых данных, для снижения нагрузки на БД • Используют – Livejournal, Twitter, Youtube и др.
  4. 4. Memcached. Возможности Возможности: 1. Быстрая работа, нет зависимости от количества данных О(1) 2. Простой интерфейс – set/get/del 3. Атомарные операции – incr/decr, append/prepend 4. Хранение ключей на нескольких серверах Ограничения: 1. Длина ключа – 250 байт 2. Объём данных по одному ключу – 1Mb 3. Потеря ключей – при лимите памяти, по ttl, отказ сервера
  5. 5. Memcached. Пример Реализация PHP: • расширение для libmemcached • расширение php-memcache Использование: простой интерфейс set / get / delete
  6. 6. Redis 1. Поддержка различных типов данных – строки, хэши, списки, множества, сортированные множества 2. Сохранение на диск 3. Поддержка LRU, различные стратегии очистки ключей 4. master-slave репликация 5. Реализация очередей Sub/Pub 6. Транзакции MULTI/EXEC 7. Поддержка LUA скриптов 8. Отличная документация
  7. 7. Redis. Типы данных 1. Строки (String) 2. Хэши (Hash)
  8. 8. Redis. Типы данных 3. Множества (Sets) 4. Сортированные множества (Sorted Sets)
  9. 9. Redis. Клиенты для PHP • phpredis – модуль для PHP, написан на С • Predis – библиотека, написанная на PHP • Rediska – PHP реализация • RedisServer – класс для работы с Redis, написанный на PHP • Resident – форк RedisServer, используется phpredis, если он установлен Рекомендации: использование расширения phpredis, написанного на C, по бенчмаркам - самый быстрый для работы с Redis
  10. 10. Memcached или Redis? Redis: • больше возможностей: очереди, транзакции, различные типы данных • позволяет хранить до 512 Mb в значениях • поддерживает master-slave репликацию, кластеризация с версии 3.0 (RC) • можно использовать как постоянное хранилище данных • производительность Memcached : • быстрее, чем Redis, но на практике эта разница практически не заметна • хорош в качестве кеша, но есть множество задач с которыми Redis справится не хуже, а для некоторых задач и лучше чем Memcached в силу своих возможностей
  11. 11. Пример 1. Кеш карточки товара Задача: реализация быстрого просмотра в Popup карточки товара, с минимальным обращением в бэкенд.
  12. 12. Пример 1. Кеш карточки товара На графике: 1 - данные из Memcached 2 - данных в Memcached нет 2a - но есть в Redis 2b - запрос в MySQL + сохранение в Redis/Memcached
  13. 13. Пример 2. Параметрический поиск Реализация: • хранение заранее обсчитанных множеств товаров (ID) для каждого варианта фильтра в Redis Используемы типы данных: • Hashes (информация о фильтрах) • Sets (множества товаров) • Sorted Sets (список фильтров и их вариантов)
  14. 14. Пример 2. Параметрический поиск Данные по фильтрам в категории “Телефоны” (id = 100): Фильтр / Вариант ID товаров Ключ в Redis 1. Производитель / SAMSUNG { 201, 202, 203, 204 } plist:c:100:f:producer:v:samsun ng 2. Производитель / PHILIPS { 301, 302, 303 } plist:c:100:f:producer:v:philips 3. Цвет / Красный { 202, 303, 701 } plist:c:100:f:color:v:red Конкретные выборки: Телефоны Samsung + Philips (7 эл.): { 201, 202, 203, 204, 301, 302, 303 } Телефоны Samsung + Philips / красные (2 эл.): { 202, 303 } Особенности реализации: • существенно быстрее, чем сложные выборки из MySQL НО: необходимо обновлять необходимые множества при каждом изменении сущностей, которые могут повлиять на состав фильтров
  15. 15. Очереди. RabbitMQ Платформа, реализующая систему обмена сообщениями посредством протокола AQMP (Advanced Messaging Queue Protocol) Особенности: • надежность • гибкая система маршрутов сообщений • поддержка кластеризации • поддержка плагинов (мониторинг системы, кастомное поведение, и др.) • написан на Erlang • клиенты для большинства языков: Java, Ruby, Python, .NET, PHP, Perl, C/C++ и др
  16. 16. RabbitMQ. Основные термины Producer – программа, которая посылает сообщения Exchange – обменник, все сообщения проходят через обменник Queue – очередь, хранится в «кролике», может содержать сколь угодно много сообщений (бесконечный буфер). Сообщения лежат именно в очередях. Посылать сообщения может один и более producer-ов, читать их тоже Consumer – программа получатель сообщений Простейший workflow:
  17. 17. Обменник с типом Direct • для задания маршрута необходимо «забиндить» очередь с обменником используя binding_key • сообщения попадают в очередь согласно правилу равенства ключей: routing_key = binding_key
  18. 18. Обменник с типом Fanout • сообщения попадают во все очереди связанные с обменником • не важно какой routing_key у сообщения
  19. 19. Обменник с типом Topic Правила для binding_key: 1. * (звездочка) может быть заменена на ровно на одно слово 2. # (решетка) может быть заменена на 0 и более слов Routing Key Queue quick.orange.rabbit (*.orange.*, *.*.rabbit) Q1, Q2 lazy.orange.elephant (lazy.#, *.orange.*) Q1, Q2 quick.orange.fox (*.orange.*) Q1 lazy.red.fox (lazy.#) Q2
  20. 20. RabbitMQ на практике • Использование брокера сообщений RabbitMQ для выполнения отложенных трудоемких задач • Пересчет множеств хранящихся в Redis при изменениях сущностей системы • Консьюмеры пишут в master • Фронтэнд читает со slave
  21. 21. Спасибо за внимание!

×