Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

3 707 vues

Publié le

  • Soyez le premier à commenter

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>Выводы

×