Оптимизация одного из топовых приложений для...

21
Rails Scale: 1000 запросов в секунду Макс Лапшин [email protected] http://evilmartians.ru /

description

 

Transcript of Оптимизация одного из топовых приложений для...

Page 1: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Rails Scale: 1000 запросов в секунду

Макс Лапшин[email protected]://evilmartians.ru/

Page 2: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Задача:оптимизация приложения вконтакте

Page 3: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

•30 тыс пользователей

•до 9 секунд на запрос

•5 серверов

•надо опустить время ответа до 500 мс

Вводные

Page 4: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

•Более 2-х млн пользователей

•25 мс на запрос

•14 серверов

•40K RPM и 20 млн записей в сутки

Результаты

Page 5: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Ежедневная смена требований• Экспоненциальный рост нагрузки• Поровну записи и чтения• Сделать быстро, дешево и приемлемо

С чем столкнулись

Page 6: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Что оказалось важным в

нашем случае

Page 7: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Грамотный менеджер«Щасспрошу» завалит проект

Персонал

Page 8: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Системный администратор. Получше, чем «aptitude-джан»

Персонал

Page 9: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Наша команда злых марсиан!http://evilmartians.ru/

Персонал

Page 10: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Волшебных гномиков нет.

Page 11: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Нет их даже в MongoDB и memcached

Page 12: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• pgpool — master-master медленный• memcached — нечего кешировать

Сразу выкинули

Page 13: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Ruby on Rails — нужна гибкость• PostgreSQL — часто меняется схема• RabbitMQ — задержка записи• внешний инструментарий

Оставили

Page 14: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

Что мы делали

Page 15: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Без него никуда• Догадки не работают• newrelic.com• Фоновые задачи очень важны

Профилирование

Page 16: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Место на дисках• Упавшие серверы• Длины очередей• Ночной дежурный (?)

Мониторинг

Page 17: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Нужны реляционные выборки• Часто меняются критерии• PostgreSQL быстр и удобен• Индексы — основной дисковый IO

SQL база

Page 18: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Много данных рядом — плохо• Нам повезло с логикой выборок• Шардинг: user_id % 100• Надо планировать заранее

Шардинг

Page 19: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Меньше всего проблем• Zero-downtime deploy с unicorn-ом• Плохая поддержка шардинга• Необходимость RabbitMQ

Ruby on Rails

Page 20: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Самая быстрая часть проекта• Оказался индикатором состояния• Мучительное восстановление

RabbitMQ

Page 21: Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails,

• Rails do scale

• Масштабирование — вопрос предметной области

• У вас всё будет по-другому

Выводы