SlideShare a Scribd company logo
Решардинг Redis
 без даунтайма
    Роман Павлушко
       AVITO.ru
О проекте
● В 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

         (в нашем случае много подготовительной работы)
Что нам надо
Что включает 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

Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
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
Владимир Бородин - PostgreSQLYandex
 
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
 

What's hot (18)

Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитикиЗагрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 
Devconf15
Devconf15Devconf15
Devconf15
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
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?"
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
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 ...
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 

Viewers also liked

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
 

Viewers also liked (16)

Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
 
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
 
Олеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruОлеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ru
 
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
 
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 (Александр Календарев, Констан...
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
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
 
Yandex market Q&A CN
Yandex market Q&A CNYandex market Q&A CN
Yandex market Q&A CN
 
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
 
Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015Сергей Чернов — Yandex Data Factory — ICBDA 2015
Сергей Чернов — Yandex Data Factory — ICBDA 2015
 

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

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
Опыт эксплуатации большого проекта на RubyAlex 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
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
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
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBIurii Ogiienko
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest
 

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
 
Sivko
SivkoSivko
Sivko
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
 
Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011Обзор Redis storage / Symfony Camp UA 2011
Обзор Redis storage / Symfony Camp UA 2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
 

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

  • 1. Решардинг Redis без даунтайма Роман Павлушко AVITO.ru
  • 2.
  • 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 (в нашем случае много подготовительной работы)
  • 14.
  • 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/