RubyConfUA - Ruby on Rails. 1000 запросов в секунду, Макс Лапшин

Post on 28-Jul-2015

145 views 0 download

Tags:

transcript

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

Макс Лапшинmax@maxidoors.ruhttp://evilmartians.ru/

1Субота, 19 березня 2011 р.

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

вконтакта

2Субота, 19 березня 2011 р.

Вводные

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

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

• 5 серверов

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

3Субота, 19 березня 2011 р.

Результаты

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

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

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

• 14 серверов

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

4Субота, 19 березня 2011 р.

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

5Субота, 19 березня 2011 р.

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

6Субота, 19 березня 2011 р.

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

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

7Субота, 19 березня 2011 р.

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

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

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

8Субота, 19 березня 2011 р.

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

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

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

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

9Субота, 19 березня 2011 р.

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

10Субота, 19 березня 2011 р.

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

11Субота, 19 березня 2011 р.

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

12Субота, 19 березня 2011 р.

Их нет даже в MongoDB

13Субота, 19 березня 2011 р.

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

14Субота, 19 березня 2011 р.

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

15Субота, 19 березня 2011 р.

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

16Субота, 19 березня 2011 р.

Проблемы роста

• Частое перепланирование бизнес-логики• Большая скорость роста посещаемости• Поровну записи и чтения• Читать надо сразу после записи• Нестабильность большого парка серверов

17Субота, 19 березня 2011 р.

Решения

18Субота, 19 березня 2011 р.

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

• Без него никуда• newrelic.com

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

19Субота, 19 березня 2011 р.

Мониторинг

• Место на дисках• Состояние серверов• Длины очередей

20Субота, 19 березня 2011 р.

Разделяй и властвуй

• Много данных в одном месте плохо

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

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

21Субота, 19 березня 2011 р.

SQL база

• PostgreSQL быстр

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

22Субота, 19 березня 2011 р.

Ruby on Rails

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

23Субота, 19 березня 2011 р.

RabbitMQ

• Очень быстрый. Даже с транзакциями.• Если бы рельсы были асинхронными, мы бы обошлись без него

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

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

24Субота, 19 березня 2011 р.

Цифры

• Было 9000 мс, стало 25

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

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

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

25Субота, 19 березня 2011 р.

Выводы

• Rails do scale

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

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

26Субота, 19 березня 2011 р.

Вопросы?

Макс Лапшин

max@maxidoors.ru

27Субота, 19 березня 2011 р.