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

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

  • Upload
    -

  • View
    101

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Rubt on Rails: 1000 запросов в секунду

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

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

Page 2: Rubt on Rails: 1000 запросов в секунду

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

для вконтакта

Page 3: Rubt on Rails: 1000 запросов в секунду

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

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

•5 серверов

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

Page 4: Rubt on Rails: 1000 запросов в секунду

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

•Более 40K RPM (requests per minute)

•Более 20 млн комментариев в сутки

•14 серверов

•25 мс — среднее время ответа

Page 5: Rubt on Rails: 1000 запросов в секунду

О чём вам стоит знать, когда будете делать то

же самое?

Page 6: Rubt on Rails: 1000 запросов в секунду

Подберите персонал!

Page 7: Rubt on Rails: 1000 запросов в секунду

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

проект

Page 8: Rubt on Rails: 1000 запросов в секунду

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

проект

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

Page 9: Rubt on Rails: 1000 запросов в секунду

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

проект

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

•И команда злых марсиан!

Page 10: Rubt on Rails: 1000 запросов в секунду

Технические детали

Page 11: Rubt on Rails: 1000 запросов в секунду

В БД и memcached живут волшебные гномики?

Page 12: Rubt on Rails: 1000 запросов в секунду

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

Page 13: Rubt on Rails: 1000 запросов в секунду

Их нет даже в MongoDB

Page 14: Rubt on Rails: 1000 запросов в секунду

Многие общепринятые решения могут не

сработать

Page 15: Rubt on Rails: 1000 запросов в секунду

Полностью выкинули memcached

Page 16: Rubt on Rails: 1000 запросов в секунду

Ампутировали pgpool

Page 17: Rubt on Rails: 1000 запросов в секунду

Проблемы роста•Частое перепланирование бизнес-логики

•Большая скорость роста посещаемости

•Поровну записи и чтения

•Читать надо сразу после записи

•Нестабильность большого парка серверов

Page 18: Rubt on Rails: 1000 запросов в секунду

Решения

Page 19: Rubt on Rails: 1000 запросов в секунду

Профилирование•Без него никуда

•newrelic.com

•Слежение за фоновыми воркерами

Page 20: Rubt on Rails: 1000 запросов в секунду

Мониторинг•Место на дисках

•Состояние серверов

•Длины очередей

Page 21: Rubt on Rails: 1000 запросов в секунду

Разделяй и властвуй•Много данных в одном месте плохо

•Шардинг: user_id % 100

•Попробуйте просчитать заранее

Page 22: Rubt on Rails: 1000 запросов в секунду

SQL база•PostgreSQL быстр

•Часто меняются индексы

•Нужен компромис между скоростью записи и чтения

Page 23: Rubt on Rails: 1000 запросов в секунду

Ruby on Rails•Самая беспроблемная часть инфраструктуры

•Деплоить однозначно юникорном

•Проблемы с использованием 100 шардов на 10 базах: вручную

Page 24: Rubt on Rails: 1000 запросов в секунду

RabbitMQ•Очень быстрый. Даже с транзакциями.

•Если бы рельсы были асинхронными, мы бы обошлись без него

•Удобный механизм мониторинга проблем на участках системы

•Мучительное восстановление после сбоя

Page 25: Rubt on Rails: 1000 запросов в секунду

Цифры•Было 9000 мс, стало 25

•Было 30 тыс, стало 3000 тыс

•Было 20 тыс запросов, стало 60 млн

•Было 5 серверов, стало 14

Page 26: Rubt on Rails: 1000 запросов в секунду

Выводы•Rails do scale

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

•Не занимайтесь предварительной оптимизацией, но готовьтесь

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

Page 27: Rubt on Rails: 1000 запросов в секунду

Вопросы?

Макс Лапшин[email protected]