Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

1000 запросов в секунду на rails (Макс Лапшин)

3,606 views

Published on

  • Be the first to comment

1000 запросов в секунду на rails (Макс Лапшин)

  1. 1. Rails Scale: 1000 запросов в секунду <ul><li>Макс Лапшин </li></ul><ul><li>[email_address] </li></ul><ul><li>http://evilmartians.ru / </li></ul>
  2. 2. Задача: оптимизация приложения вконтакте оптимизация приложения вконтакте
  3. 3. <ul><li>30 тыс пользователей </li></ul><ul><li>до 9 секунд на запрос </li></ul><ul><li>5 серверов </li></ul><ul><li>надо опустить время ответа до 500 мс </li></ul>Вводные
  4. 4. <ul><li>Более 2-х млн пользователей </li></ul><ul><li>25 мс на запрос </li></ul><ul><li>14 серверов </li></ul><ul><li>40K RPM и 20 млн записей в сутки </li></ul>Результаты
  5. 5. <ul><li>Ежедневная смена требований </li></ul><ul><li>Экспоненциальный рост нагрузки </li></ul><ul><li>Поровну записи и чтения </li></ul><ul><li>Сделать быстро, дешево и приемлемо </li></ul>С чем столкнулись
  6. 6. Что оказалось важным в нашем случае нашем случае нашем случае
  7. 7. <ul><li>Грамотный менеджер </li></ul><ul><li>«Щасспрошу» завалит проект </li></ul>Персонал
  8. 8. <ul><li>Системный администратор. </li></ul><ul><li>Получше, чем «aptitude-джан» </li></ul>Персонал
  9. 9. <ul><li>Наша команда злых марсиан! </li></ul><ul><li>http://evilmartians.ru / </li></ul>Персонал
  10. 10. Волшебных гномиков нет.
  11. 11. Нет их даже в MongoDB и memcached
  12. 12. <ul><li>pgpool — master-master медленный </li></ul><ul><li>memcached — нечего кешировать </li></ul>Сразу выкинули
  13. 13. <ul><li>Ruby on Rails — нужна гибкость </li></ul><ul><li>PostgreSQL — часто меняется схема </li></ul><ul><li>RabbitMQ — задержка записи </li></ul><ul><li>внешний инструментарий </li></ul>Оставили
  14. 14. Что мы делали
  15. 15. <ul><li>Без него никуда </li></ul><ul><li>Догадки не работают </li></ul><ul><li>newrelic.com </li></ul><ul><li>Фоновые задачи очень важны </li></ul>Профилирование
  16. 16. <ul><li>Место на дисках </li></ul><ul><li>Упавшие серверы </li></ul><ul><li>Длины очередей </li></ul><ul><li>Ночной дежурный (?) </li></ul>Мониторинг
  17. 17. <ul><li>Нужны реляционные выборки </li></ul><ul><li>Часто меняются критерии </li></ul><ul><li>PostgreSQL быстр и удобен </li></ul><ul><li>Индексы — основной дисковый IO </li></ul>SQL база
  18. 18. <ul><li>Много данных рядом — плохо </li></ul><ul><li>Нам повезло с логикой выборок </li></ul><ul><li>Шардинг: user_id % 100 </li></ul><ul><li>Надо планировать заранее </li></ul>Шардинг
  19. 19. <ul><li>Меньше всего проблем </li></ul><ul><li>Zero-downtime deploy с unicorn-ом </li></ul><ul><li>Плохая поддержка шардинга </li></ul><ul><li>Необходимость RabbitMQ </li></ul>Ruby on Rails
  20. 20. <ul><li>Самая быстрая часть проекта </li></ul><ul><li>Оказался индикатором состояния </li></ul><ul><li>Мучительное восстановление </li></ul>RabbitMQ
  21. 21. <ul><li>Rails do scale </li></ul><ul><li>Масштабирование — вопрос предметной области </li></ul><ul><li>У вас всё будет по-другому </li></ul>Выводы

×