DevCon•12
// msdevcon.ru

23-24 мая, 2012 г.
Microsoft




                     #msdevcon
Redis в Microsoft Azure
                          // DevCon•12

Михаил Матвиенко
Lead Developer at PENXY


@mourhoon
Что такое Redis?
Простыми словами




                   #msdevcon
Что такое Redis?
              Redis это key-value хранилище с
              открытым кодом. Работает с
              5 основными типами данных:
              Строки
              Списки
              Множества
              Упорядоченные множества
              Хэши
Что такое Redis?
NoSQL
Работает в оперативной памяти
1 поток
Очень быстрый (~100,000 queries / sec)
Маленький footprint в памяти (30k lines)
Асинхронный backup на диск
Написан на ANSI C под Linux
Linux NoSQL Project on Azure




                               #msdevcon
Fork-и, и прочие Linux API
int rdbSaveBackground(char *filename) {
    pid_t childpid;
    ...
    if ((childpid = fork()) == 0) {
        int retval;
        /* Child */
        ...
    } else {
       /* Parent */
Как запускать Redis на Azure
Startup task
Cygwin
Win32 port (проблемы с производительностью)


Клиенты Redis на .Net
ServiceStack.Redis (ребята из Mono)
BookSleave (Stack Overflow)
Но зачем?

Неужели это кому-нибудь нужно?




                                 #msdevcon
Сценарии использования
Выгодно для большого (> 30 запросов/сек)
количества запросов:
Счетчики (Простые и уникальные)
Рейтинги
Очереди
Publish/Subscribe
Опциональный TTL на каждый ключ – Можно
 использовать как кэш
Кто использует Redis:
Задача: сделать back-end для чата


В лабах MS
предлагают
делать так:
Нам виделось так:
Как сделать магию правильно?



Azure     Azure
Storage   Service Bus Memcache   Redis
Запуск redis в Azure

                       Демо




                              #msdevcon
Производительность и
масштабирование




                       #msdevcon
Масштабирование Redis
Репликация (Master – Slave):
 Read scaling
 High Availability
Шардирование
 Write scaling
Redis Cluster (alpha) – Resharding, Fault tolerance.
Внутренняя структура кластера
Плюсы, минусы, подводные
камни.




                           #msdevcon
Проблемы и ограничения
Память на узле может кончиться: политики
 поведения
Disk persistence
 RDB-формат
 AOF (append-only fashion)


Пока не все фичи для маштабирования работают из
 коробки. Redis cluster не готов даже для Linux.
Поддержка Microsoft
Microsoft Open Technologies (Interoperability
@ Microsoft)
Адаптирование проекта под Win32
 Избавление от специфики fork-ов в резервном копировании


Адаптирование для Windows Azure – обещают
Краткое сравнение
SQL                                  Redis
Скорость                             Скорость
Сотни/тысячи запросов в сек          Десятки тысяч запросов в сек
ACID                                 BASE
Atomicity, Consistency, Isolation,   Basically Available, Soft state, Eventual
Durability                           consistency
SQL синтаксис                        Ограниченный набор команд
Поддержка транзакций                 Поддержка транзакций
Репликация                           Репликация
Требует lock-ов на кластер, чтобы    Благодаря работе в памяти на
не утратить целостность. Долго.      порядки быстрее репликации SQL
Полезные материалы
Little Redis Book: http://tinyurl.com/cgm2zd3
Project Home: http://redis.io/
Redis Github: https://github.com/antirez/redis
Mikhail Matvienko
Lead Developer at PENXY
                          Наш логотип там ↑




                                        #msdevcon

IOP202 Redis in Azure