Скоро [Hardcode.Dev] Оптимизация Ruby/Rails-приложений

Moderator
29 Мар 2020
271,787
1,082,493
113
#1
Курс для практикующих Ruby/Rails-разработчиков, которые хотят:

всерьез заняться оптимизацией кода
сделать свои проекты быстрее и эффективнее
добиться профессионального и карьерного роста
получать еще больший кайф от своей работы.
Цель курса: научить участников грамотно выстраивать процесс оптимизации, управлять им и применять правильные инструменты в нужное время и в нужном месте.



После курса вы сможете:


Выстраивать стратегию оптимизации Rails-приложений: уметь определять и собирать нужные метрики, ставить обоснованные цели по производительности и достигать их
Понять, что надо оптимизировать, а что лучше не стоит и подойти к оптимизации любого аспекта Rails-приложения так, чтобы добиться нужного результата
Дружить со сборщиком мусора, профилировать и оптимизировать ruby и rails приложения по процессору и по памяти. Находить и устранять реальные bottleneck'и
Настраивать и использовать мониторинг rails-приложений, настраивать production-окружение и production-like данные локально
Оптимизировать работу СУБД, находить и оптимизировать медленные SQL-запросы, эффективно работать с индексами. Бороться с гидрой N+1, оптимизировать ActiveRecord и понимать, когда лучше работать в обход него
Оптимизировать фронтенд под современный интернет, использовать кеширование по максимуму, понимать как браузер строит страницу, получая ответ сервера, и оптимизировать этот процесс
Оптимизировать свой Development Experience: прогон тестов, сборку, деплой, CI и т.д.
Оптимизировать настройки app-сервера, адаптировать серверы под неравномерную нагрузку
Программа

Одна тема в неделю + задание на неделю.Проверка автором с подробным code review

Спойлер: Неделя 1. Оптимизация работы с памятью в ruby-программах

Оптимизация: общие подходы и мантра

Планирование эксперимента

Общая стратегия сбора метрик, постановки целей по оптимизации Rails-приложений

Сбор метрик и постановка целей по оптимизации памяти

Как устроена работа с памятью в ruby

Сборщик мусора: эволюция, современное состояние, тюнинг

Замеры использования памяти

Memory leak vs Memory bloat

Профилирование использования памяти, визуализация и анализ результатов

Возможности сброса работы с ruby на более подходящие части технологического стека

Альтернативные аллокаторы памяти, jemalloc

Связь оптимизации памяти c оптимизацией CPU

Спойлер: Неделя 2. Оптимизация работы с CPU в ruby-программах

Сбор метрик и постановка целей по оптимизации CPU

Особенности организации эксперимента с использованием CPU

Бенчмаркинг ruby-программ

Профилирование использования CPU в ruby-коде (rubyprof, stackprof, rbspy)

Визуализация и анализ результатов профилирования CPU

Разновидности, идентификация и устранение Bottleneck'ов

Возможности использования оптимизированных библиотек для нагруженных частей проекта

Параллельные вычисления в Ruby, GIL, потоки, процессы

Закон Амдала

Best-practices и gotchas

Спойлер: Неделя 3. Оптимизация Rails бекенда

Сбор метрик и постановка целей по оптимизации бэкенда

Настройка production-like данных локально - зачем и как

Уточнение роли бэкенда в цикле запрос-ответ-взаимодействие современного веб-приложения

Работа с rack-mini-profiler

Настройка и использование мониторинга NewRelic, Skylight, Scout

Кеширование!

Вынос ресурсоемких процессов в фоновые задачи

Resque, Sidekiq и другие

Профилирование rails-бэкенда, нагрузочные тесты, численные эксперименты

Спойлер: Неделя 4. Оптимизация ActiveRecord и работы с базой данных

Сбор метрик и постановка целей по оптимизации работы с базой данных

Борьба с гидрой N+1

Определение и исправление медленных запросов

Сокращение количества запросов

Кэширование сложных запросов

Работа с планировщиком запросов БД с Explain Analyze

Эффективная работа с индексами базы данных

Vacuum, autovacuum и чем он может быть опасен

Импорт больших объёмов данных с ActiveRecord и в обход него

Польза, цена и альтернативы ActiveRecord

Спойлер: Неделя 5. Оптимизация фронтенда для современного интернета

Сбор метрик и постановка целей по оптимизации фронтенда

Формирование Performance mindset у себя и в своей компании

Оценка стоимости вашего фронтенда

Работа с сервисом WebPageTest

Настройка local-production окружения

HTTP 1, 2, 3 и как с ними жить

Preconnect, Prefetch, Preload, Server Push

Конкатенация ассетов, CDN rotation, CDN внешних библиотек: за и против

Gzip, brotli, zopfli, WebP

Server-Sent Events, Streaming шаблонов в Rails

Спойлер: Неделя 6. Оптимизация фронтенда для современных браузеров

Процесс построения браузером страницы в деталях

Chrome Timeline как профилировщик фронтенда

Формирование оптимального тега HEAD

Critical CSS

Оптимизация CSS-бандлов

service-workers

Работа с картинками, шрифтами

Webpack bundle-analyzing, code-splitting, tree-shaking

Автоматизация защиты от разбухания js-бандлов

Интеграция инструментов контроля соблюдения бюджетов в CI

PageSpeed Insights, Lighthouse

Чек-листы производительного фронтенда

Спойлер: Неделя 7. Оптимизация серверов приложений

Сбор метрик и постановка целей по оптимизации серверов

Обзор и сравнение альтернативных app-серверов для Rails

Закон Литтла

Расчёт оптимальных настроек серверов для вашего проекта

Контроль потребления памяти в production

Отлов memory bloat в production

Оптимизация Rails как фреймворка, derailed_behcnmarks

Оптимизация серверов под неравномерную нагрузку

Reverse Proxy

Минимальная защита от DDoS

Спойлер: Неделя 8. Оптимизация DX (Development eXperience)

Сбор метрик и постановка целей по оптимизации DX

Ещё раз в важности feedback-loop для разработчика

Оптимизация open-source инструментов

Оптимизация скорости загрузки Rails

Оптимизация прогона тестов

Оптимизация деплоя

Оптимизация пересборки

Оптимизация CI

Live-reload css и js

Автор

Алексей Васильев

Техлид в Busfor, кандидат технических наук (Github, LinkedIn)

Всерьёз втянулся в оптимизацию при написании кандидатской диссертации].

В научной работе на два порядка ускорил моделирование газотранспортных систем Газпрома за счёт применения архитектурных решений, параллельных и распределённых вычислений, расчётов на графических картах.

В 2015 году сменил академическую среду на продуктовую разработку на Rails.

В Busfor оптимизировал и продолжает оптимизировать всё, что тормозило

(бэкенд, фронтенд, postgres, sprockets, webpack, capistrano, тесты, CI, кэш и т.д.).

За время работы над проектом:

снизил пиковую нагрузку на бэкенд в 5 раз с 15000rpm до 3000rpm
ускорил деплой в 5 раз
ускорил прогон тестов в 4 раза
В 2 раза снизил потребление памяти приложения
в 4 раза ускорил загрузку приложения
ускорил импорт данных объёмом 3Гб в 20 раз, c 60 до 3х минут.
Кроме Rails владеет C++, Go, JavaScript.

Ссылка :


Для просмотра содержимого вам необходимо авторизоваться

Для просмотра содержимого вам необходимо авторизоваться