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

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

Date post: 28-Jul-2015
Category:
Upload: roman-v-babenko
View: 144 times
Download: 0 times
Share this document with a friend
Popular Tags:
27
Ruby on Rails: 1000 запросов в секунду Макс Лапшин [email protected] http://evilmartians.ru/ 1 Субота, 19 березня 2011 р.
Transcript
Page 1: RubyConfUA - Ruby on Rails. 1000 запросов в секунду, Макс Лапшин

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

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

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

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

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

вконтакта

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

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

Вводные

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

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

• 5 серверов

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

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

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

Результаты

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

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

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

• 14 серверов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Их нет даже в MongoDB

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Решения

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

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

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

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

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

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

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

Мониторинг

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

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

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

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

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

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

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

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

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

SQL база

• PostgreSQL быстр

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

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

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

Ruby on Rails

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

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

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

RabbitMQ

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

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

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

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

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

Цифры

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

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

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

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

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

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

Выводы

• Rails do scale

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

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

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

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

Вопросы?

Макс Лапшин

[email protected]

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


Recommended