ݺߣ

ݺߣShare a Scribd company logo
Решардинг Redis
 без даунтайма
    Роман Павлушко
       AVITO.ru
AVITO. Решардинг Redis без даунтайма. DevConf 2012
О проекте
● В TOP10 сайтов Рунета
● 90М+ запросов в сутки (AVITO, TORG, API)
● 130К+ запросов в минуту
● 230К+ новых объявлений в сутки
● 400K+ картинок в день
● 8М+ пользователей размещали объявления
● 50М новых объявлений за последний год
О Redis
● Хранит и работает с данными только из памяти
● На диск пишет только для сохранности
● Поддерживает различные структуры данных

  (Strings, Hash, List, Sets, Sorted Sets, Pub/Sub)

● Подобие транзакций в рамках одного процесса
● Репликация из коробки
● С версии 2.6 появились «хранимые операции» на Lua 5
● 1 инстанс использует > 1 ядра CPU
Клиентский протокол Redis
*<number of arguments> CR LF
$<number of bytes of argument 1> CR LF
<argument data> CR LF
...
$<number of bytes of argument N> CR LF
<argument data> CR LF

Подробнее http://redis.io/topics/protocol
Протокол репликации Redis
1.   Слейв посылает команду SYNC мастеру
2.   Мастер стартует синхронизацию rdb-снапшота + запускает лог
     запросов
3.   По завершении SYNC мастер отправляет rdb-снапшот слейву
4.   Слейв вычитывает rdb-снапшот и начинает принимать команды
     от мастера

Подробнее о репликации http://redis.io/topics/replication

Подробнее о формате rdb http://clck.ru/1AyyU
Почему мы используем Redis?
●   400М постоянно обновляемых документов
●   3К+ уникальных запросов write/read в секунду (8K пик)
●   Данные должны одинаково быстро отдаваться на всем
    протяжении их жизни
●   Целостностью в маленьких масштабах можно пренебречь
●   Коробочное решение, поставил и забыл (почти правда)
●   Прост в развертывании и администрировании
Для чего мы используем Redis
●   Счетчики для статистики и мониторинга
●   Закладки пользователей
●   Очереди сообщений
Проблемы роста данных
    2009 год:

●   100К запросов/сутки
●   5 нод с заделом на будущее

    2012 год:

●   20М запросов/сутки
●   250М документов
●   35ГБ данных

    Проблема одна — медленная синхронизация данных на диск
Решение медленной синхронизации

●   Разбиваем ноды на более мелкие

●   Поднимаем несколько нод на 1 сервере

●   Получаем равномерную нагрузку на диск
Задачи и требования
1. Распределить данные по новым нодам

   2. Изменить алгоритм распределения ключей

      3. Вычистить старые версии данных

          4. Не потерять данные

          5. Не просидеть за этой задачей «год»
Ищем решение
●   Переместить данные со старых на новые ноды скриптом
     ○   нужен длительный downtime
     ○   нужно получить список ключей (keys *)
●   Прослойка в протокол репликации (как делал Skype)

    http://www.slideshare.net/profyclub_ru/redis-9518928
     ○   нельзя перераспределить данные по нодам
     ○   необходима небольшая остановка на запись в Redis

         (в нашем случае много подготовительной работы)
Что нам надо
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Что включает Proxy
●   Надежный сетевой демон

●   Протокол репликации Redis

    ○   Парсер формата rdb

    ○   Парсер протокола Redis

●   Алгоритм распределения ключей

●   Фильтры устаревших данных
В Redis уже все есть, почти все...
●   Надежный сетевой демон

●   Протокол репликации Redis

    ○   Парсер формата rdb

    ○   Парсер протокола Redis

●   Алгоритм распределения ключей

●   Фильтры устаревших данных
Форкаем Redis и вбиваем в него костыли
1.   Добавляем в код redis-клиентов для новых нод
2.   В разбор rdb добавляем функцию, транслирующую
     документы в команды
3.   Добавляем фильтр на старые версии данных
4.   Заменяем проигрывание команд собственной функцией
5.   Собственная функция игнорирует данные или отправляет их
     на новые ноды
Процесс решардинга ноды
1.   Разворачиваем инстансы для нового кластера
2.   Настраиваем мониторинг и резервное копирование
3.   Поднимаем под каждой старой нодой по Proxy-инстансу
4.   Последовательно стартуем Proxy-инстансы, чтобы не забить
     сеть rdb-снапшотами
5.   Когда Proxy всех нод перешел в режим проигрывания комманд
     с мастера, значит уже можно переключать приложение на
     новый кластер
Результаты


       Разработка 2 недели
В фоновом режиме в паре с системным
         администратором.


   Процесс решардинга 6 часов
Patch

1.   replication.c : int connectWithMaster(void)
2.   redis.c : int processCommand(redisClient *c)
3.   rdb.c : int rdbLoad(char *filename)
4.   resharding.c *



     Исходники https://github.com/prn/redis-resharding

     Diff http://clck.ru/1AzbW
WARNING!

1.   Избегайте тяжелых запросов, Redis не для этого
2.   Используйте максимум 1 инстанс на ядро, а лучше 0,75 :)
3.   Несколько коллекций (баз) синхронизируется на диск в общий
     файл
4.   Тщательно тестируйте новые версии Redis перед
     обновлением, особенно если версии RDB меняются
5.   Не храните очень ценные данные в Redis
Ищем разработчиков
HTML/JavaScript, PHP, PostgreSQL, Sphinx, Unix


 Если вы считаете, что вы эксперт в какой-нибудь
из перечисленных технологий, отправляйте резюме!


             http://www.avito.ru/job
Спасибо!
Вопросы?
 Роман Павлушко
  rpavlushko@avito.ru
 twitter.com/pavlushko
slideshare.net/pavlushko/

More Related Content

What's hot (18)

Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
Барнаул15
Барнаул15Барнаул15
Барнаул15
Михаил Тюрин
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Ontico
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
Yandex
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Ontico
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Ontico
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Ontico
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
Yandex
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Ontico
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Ontico

Viewers also liked (16)

Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
Andrei Pangin
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Ontico
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Ontico
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Diana Dymolazova
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
iProspect Russia
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
Anatoly Sharifulin
Олеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruОлеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ru
Diana Dymolazova
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
it-people
Yandex market shops overview
Yandex market shops overviewYandex market shops overview
Yandex market shops overview
Анна Кретова
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Ontico
Oleg Dorozhok, Head of Mobile Marketing, Yandex
Oleg Dorozhok, Head of Mobile Marketing, YandexOleg Dorozhok, Head of Mobile Marketing, Yandex
Oleg Dorozhok, Head of Mobile Marketing, Yandex
White Nights Conference
Yandex market Q&A CN
Yandex market Q&A CNYandex market Q&A CN
Yandex market Q&A CN
Yandex
Avito usage of_data_in_media_campaigns_olga_ky
Avito usage of_data_in_media_campaigns_olga_kyAvito usage of_data_in_media_campaigns_olga_ky
Avito usage of_data_in_media_campaigns_olga_ky
iabrussiaprez
Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015
rusbase
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
Andrei Pangin
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Ontico
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Ontico
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Diana Dymolazova
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
iProspect Russia
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
Anatoly Sharifulin
Олеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruОлеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ru
Diana Dymolazova
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
it-people
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Ontico
Oleg Dorozhok, Head of Mobile Marketing, Yandex
Oleg Dorozhok, Head of Mobile Marketing, YandexOleg Dorozhok, Head of Mobile Marketing, Yandex
Oleg Dorozhok, Head of Mobile Marketing, Yandex
White Nights Conference
Yandex market Q&A CN
Yandex market Q&A CNYandex market Q&A CN
Yandex market Q&A CN
Yandex
Avito usage of_data_in_media_campaigns_olga_ky
Avito usage of_data_in_media_campaigns_olga_kyAvito usage of_data_in_media_campaigns_olga_ky
Avito usage of_data_in_media_campaigns_olga_ky
iabrussiaprez
Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015
rusbase

Similar to AVITO. Решардинг Redis без даунтайма. DevConf 2012 (20)

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Dev_Party
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
Igor Brovchenko
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Tanya Denisyuk
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
mourhoon
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Dev_Party
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
Igor Brovchenko
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Tanya Denisyuk
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
mourhoon
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest

AVITO. Решардинг Redis без даунтайма. DevConf 2012

  • 1. Решардинг Redis без даунтайма Роман Павлушко AVITO.ru
  • 3. О проекте ● В TOP10 сайтов Рунета ● 90М+ запросов в сутки (AVITO, TORG, API) ● 130К+ запросов в минуту ● 230К+ новых объявлений в сутки ● 400K+ картинок в день ● 8М+ пользователей размещали объявления ● 50М новых объявлений за последний год
  • 4. О Redis ● Хранит и работает с данными только из памяти ● На диск пишет только для сохранности ● Поддерживает различные структуры данных (Strings, Hash, List, Sets, Sorted Sets, Pub/Sub) ● Подобие транзакций в рамках одного процесса ● Репликация из коробки ● С версии 2.6 появились «хранимые операции» на Lua 5 ● 1 инстанс использует > 1 ядра CPU
  • 5. Клиентский протокол Redis *<number of arguments> CR LF $<number of bytes of argument 1> CR LF <argument data> CR LF ... $<number of bytes of argument N> CR LF <argument data> CR LF Подробнее http://redis.io/topics/protocol
  • 6. Протокол репликации Redis 1. Слейв посылает команду SYNC мастеру 2. Мастер стартует синхронизацию rdb-снапшота + запускает лог запросов 3. По завершении SYNC мастер отправляет rdb-снапшот слейву 4. Слейв вычитывает rdb-снапшот и начинает принимать команды от мастера Подробнее о репликации http://redis.io/topics/replication Подробнее о формате rdb http://clck.ru/1AyyU
  • 7. Почему мы используем Redis? ● 400М постоянно обновляемых документов ● 3К+ уникальных запросов write/read в секунду (8K пик) ● Данные должны одинаково быстро отдаваться на всем протяжении их жизни ● Целостностью в маленьких масштабах можно пренебречь ● Коробочное решение, поставил и забыл (почти правда) ● Прост в развертывании и администрировании
  • 8. Для чего мы используем Redis ● Счетчики для статистики и мониторинга ● Закладки пользователей ● Очереди сообщений
  • 9. Проблемы роста данных 2009 год: ● 100К запросов/сутки ● 5 нод с заделом на будущее 2012 год: ● 20М запросов/сутки ● 250М документов ● 35ГБ данных Проблема одна — медленная синхронизация данных на диск
  • 10. Решение медленной синхронизации ● Разбиваем ноды на более мелкие ● Поднимаем несколько нод на 1 сервере ● Получаем равномерную нагрузку на диск
  • 11. Задачи и требования 1. Распределить данные по новым нодам 2. Изменить алгоритм распределения ключей 3. Вычистить старые версии данных 4. Не потерять данные 5. Не просидеть за этой задачей «год»
  • 12. Ищем решение ● Переместить данные со старых на новые ноды скриптом ○ нужен длительный downtime ○ нужно получить список ключей (keys *) ● Прослойка в протокол репликации (как делал Skype) http://www.slideshare.net/profyclub_ru/redis-9518928 ○ нельзя перераспределить данные по нодам ○ необходима небольшая остановка на запись в Redis (в нашем случае много подготовительной работы)
  • 15. Что включает Proxy ● Надежный сетевой демон ● Протокол репликации Redis ○ Парсер формата rdb ○ Парсер протокола Redis ● Алгоритм распределения ключей ● Фильтры устаревших данных
  • 16. В Redis уже все есть, почти все... ● Надежный сетевой демон ● Протокол репликации Redis ○ Парсер формата rdb ○ Парсер протокола Redis ● Алгоритм распределения ключей ● Фильтры устаревших данных
  • 17. Форкаем Redis и вбиваем в него костыли 1. Добавляем в код redis-клиентов для новых нод 2. В разбор rdb добавляем функцию, транслирующую документы в команды 3. Добавляем фильтр на старые версии данных 4. Заменяем проигрывание команд собственной функцией 5. Собственная функция игнорирует данные или отправляет их на новые ноды
  • 18. Процесс решардинга ноды 1. Разворачиваем инстансы для нового кластера 2. Настраиваем мониторинг и резервное копирование 3. Поднимаем под каждой старой нодой по Proxy-инстансу 4. Последовательно стартуем Proxy-инстансы, чтобы не забить сеть rdb-снапшотами 5. Когда Proxy всех нод перешел в режим проигрывания комманд с мастера, значит уже можно переключать приложение на новый кластер
  • 19. Результаты Разработка 2 недели В фоновом режиме в паре с системным администратором. Процесс решардинга 6 часов
  • 20. Patch 1. replication.c : int connectWithMaster(void) 2. redis.c : int processCommand(redisClient *c) 3. rdb.c : int rdbLoad(char *filename) 4. resharding.c * Исходники https://github.com/prn/redis-resharding Diff http://clck.ru/1AzbW
  • 21. WARNING! 1. Избегайте тяжелых запросов, Redis не для этого 2. Используйте максимум 1 инстанс на ядро, а лучше 0,75 :) 3. Несколько коллекций (баз) синхронизируется на диск в общий файл 4. Тщательно тестируйте новые версии Redis перед обновлением, особенно если версии RDB меняются 5. Не храните очень ценные данные в Redis
  • 22. Ищем разработчиков HTML/JavaScript, PHP, PostgreSQL, Sphinx, Unix Если вы считаете, что вы эксперт в какой-нибудь из перечисленных технологий, отправляйте резюме! http://www.avito.ru/job
  • 23. Спасибо! Вопросы? Роман Павлушко rpavlushko@avito.ru twitter.com/pavlushko slideshare.net/pavlushko/