rubt on rails: 1000 запросов в секунду
TRANSCRIPT
Ruby on Rails:1000 запросов в секунду
Макс Лапшин[email protected]://evilmartians.ru/
Задача:оптимизация приложения
для вконтакта
Вводные•30 тыс пользователей
•до 9 секунд на запрос
•5 серверов
•надо опустить время ответа до 500 мс
Результаты•Более 2-х млн пользователей
•Более 40K RPM (requests per minute)
•Более 20 млн комментариев в сутки
•14 серверов
•25 мс — среднее время ответа
О чём вам стоит знать, когда будете делать то
же самое?
Подберите персонал!
Подберите персонал!•Грамотный менеджер! «Щасспрошу» завалит
проект
Подберите персонал!•Грамотный менеджер! «Щасспрошу» завалит
проект
•Системный администратор. Получше, чем «aptitude-джан»
Подберите персонал!•Грамотный менеджер! «Щасспрошу» завалит
проект
•Системный администратор. Получше, чем «aptitude-джан»
•И команда злых марсиан!
Технические детали
В БД и memcached живут волшебные гномики?
Волшебных гномиков нет
Их нет даже в MongoDB
Многие общепринятые решения могут не
сработать
Полностью выкинули memcached
Ампутировали pgpool
Проблемы роста•Частое перепланирование бизнес-логики
•Большая скорость роста посещаемости
•Поровну записи и чтения
•Читать надо сразу после записи
•Нестабильность большого парка серверов
Решения
Профилирование•Без него никуда
•newrelic.com
•Слежение за фоновыми воркерами
Мониторинг•Место на дисках
•Состояние серверов
•Длины очередей
Разделяй и властвуй•Много данных в одном месте плохо
•Шардинг: user_id % 100
•Попробуйте просчитать заранее
SQL база•PostgreSQL быстр
•Часто меняются индексы
•Нужен компромис между скоростью записи и чтения
Ruby on Rails•Самая беспроблемная часть инфраструктуры
•Деплоить однозначно юникорном
•Проблемы с использованием 100 шардов на 10 базах: вручную
RabbitMQ•Очень быстрый. Даже с транзакциями.
•Если бы рельсы были асинхронными, мы бы обошлись без него
•Удобный механизм мониторинга проблем на участках системы
•Мучительное восстановление после сбоя
Цифры•Было 9000 мс, стало 25
•Было 30 тыс, стало 3000 тыс
•Было 20 тыс запросов, стало 60 млн
•Было 5 серверов, стало 14
Выводы•Rails do scale
•Масштабирование — вопрос предметной области
•Не занимайтесь предварительной оптимизацией, но готовьтесь
•У вас всё будет по-другому
Вопросы?
Макс Лапшин[email protected]