rubt on rails: 1000 запросов в секунду

Post on 15-Apr-2017

101 Views

Category:

Data & Analytics

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Макс Лапшинmax@evilmartians.comhttp://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

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

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

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

Вопросы?

Макс Лапшинmax@maxidoors.ru

top related