Бесплатные инструменты для команды разработки. Часть 1
--
В чудесное время мы живём — с одной стороны существуют сервисы, присылающие шести-семи значные числа в счетах за их услуги, с другой есть сервисы и open source решения, дающие огромную пользу команде абсолютно бесплатно.
Поделюсь с вами такими инструментами, которые мы используем в командах разработки в Appbooster.
📈 Newrelic
Что даёт? Бесценные инсайты о работе вашего приложения. Сколько времени грузится? На что уходит больше всего времени — рендеринг, база, внешние апи? Какие эндпойнты работают дольше остальных? Как эти данные отличаются на разных серверах?
Как использовать?
- Раз в несколько дней заходить и смотреть на красивые графики response time и throughput, понимать какие эндпойнты работают медленнее остальных, радоваться трафику, генерировать гипотезы по улучшению производительности
- Анализировать работу бекенда. Например, для руби — работа GC, object allocations, память
- Отмечать улучшения/ухудшения производительности в релизах, например как делал Женя
- Настроить алерты в слак на средний response time и на доступность сервиса
- За деньги — больше деталей для анализа медленных эндпойнтов, мониторинг БД.
С чего начать?
В пару шагов добавляется в любое приложение (как на бекенд, так и на фронт/мобилку) — добавляем библиотеку, прописываем license key и вводим название приложения. Готово!
Альтернативы
⚠️ Sentry
Что даёт? Прозрачный механизм анализа возникающих ошибок у клиентов. Показывает контекст ошибки (например версию OS, версию сборки, разрешение, rooted или нет для мобильного приложения, все переданные параметры для веба).
Как использовать?
- Раз в неделю-две анализировать ошибки, отмечать, какие ошибки перестают воспроизводиться в новых релизах, какие появляются новые
- Настроить алерты в slack о новых/возобновлённых ошибках
- (секретный приём для быстрой разработки) Можно не покрывать некоторые edge-кейсы приложения, а вместо этого ловить в них ошибки. Нет ошибок — значит этого edge-кейса ни у кого и нет, можно время потратить на что-то полезное!
С чего начать? Как и в случае с Newrelic добавляется библиотека+ прописывается ключ. Для хранения и доступа к данным есть 2 варианта: hosted и on-premise. В первом варианте вы используете сервера sentry с лимитами по количеству ошибок. Во втором — разворачиваете свой сервис, например через docker и используете его без каких-либо ограничений. Если у вас есть трафик и несколько проектов — удобнее второй вариант.
Альтернативы
- Honeybadger
- Rollbar
- ну или так
try {
// do something
} catch (e) {
location.href = `https://stackoverflow.com/search?q=${e.message}`
}
🌃 Imgproxy
Что даёт? Real-time обработка изображений. Вместо устаревшего подхода с ресайзом и хранением всех используемых версий изображения вы можете хранить только оригинал и использовать картинки нужного формата в любой момент. Позволяет безболезненно менять дизайн приложений и используемые размеры картинок — их не нужно будет обрабатывать заново. Можно добавлять фильтры и ватермарки
Как использовать?
- Удаляем код для процесссинга изображений
- Удаляем библиотеки для их обработки
- Загружаем картинки напрямую в S3 (ну или другое хранилище), не пропуская их через свои сервера
- Всю работу по ресайзу делегируем imgproxy
С чего начать? Запускаете в докере или на heroku, настраиваете. На клиенте добавляете ключи для вашего сервера и на лету можете изменять размеры изображений.
Альтернативы
Да, cloudinary и uploadcare предоставляют хранилище и CDN, но это решается связкой S3 + imgproxy + cloudflare.
☁️ Cloudflare
Что даёт? DNS (с поддержкой DNSSEC), защита от DDOS, бесплатный SSL, Firewall, защита от ботов. Ещё не регистрируетесь? Тогда вот ещё: CDN, оптимизации фронтенда (например, использование brotli или webp), настройки роутинга/редиректов прямо в интерфейсе(не nginx, конечно, зато быстро), поддержка http/2 и quic, доступ ко всему по API. Это инструмент, дающий максимальную пользу из всей подборки. Бесплатно.
Как использовать?
- Включить SSL и выпилить certbot во всех проектах, использующих let’s encrypt
- Включить CDN для ассетов. Ставим CDN перед imgproxy — вот вам почти cloudinary
- Если не используете сборщики — включить оптимизацию фронтенда, cloudflare пожмёт ваши js/css
- Включить поддержку brotli одним чекбоксом, без изменения конфига nginx. Бесплатно ускоряем весь фронтенд
- Настроить Cache-Control на application-сервере. Так часть запросов будет просто кешироваться на уровне cloudflare
- Банить подозрительные айпишники прямо в интерфейсе (или по API из вашего приложения — мы делаем так)
- Завест себе bash-скрипт, который в один запуск настроит новый домен и применит нужные настройки по API
- Вас ддосят? Спокойно — cloudflare всё порешает.
С чего начать? Просто перенесите DNS в Cloudflare.
Альтернативы. Честно говоря, даже не знаю.
Выводы
- Лучший интерфейс — отсуствие интерфейса. Лучшее решение задачи — без написания кода. Используйте инструменты, которые позволяют вам фокусироваться на бизнес-логике, а все инфрастуктруные моменты берут на себя
- Вся современная разработка — это быстрое создание и последующий анализ. От того, какие инструменты вы используете зависит и скорость разработки, и качество анализа. Выбирайте то, что вас ускоряет
- Используйте шаблонные решения и стандарты — каждый новый проект должен использовать наработки предыдущих. А про своё отношение к стандартам я писал в канале.
— — —
Используете крутые бесплатные инструменты в разработке? Расскажите мне в телеграме @alexsubbotin. И подписывайтесь на канал Saturday Night Hack.