Бесплатные инструменты для команды разработки. Часть 1

В чудесное время мы живём — с одной стороны существуют сервисы, присылающие шести-семи значные числа в счетах за их услуги, с другой есть сервисы и open source решения, дающие огромную пользу команде абсолютно бесплатно.

Поделюсь с вами такими инструментами, которые мы используем в командах разработки в Appbooster.

📈 Newrelic

Что даёт? Бесценные инсайты о работе вашего приложения. Сколько времени грузится? На что уходит больше всего времени — рендеринг, база, внешние апи? Какие эндпойнты работают дольше остальных? Как эти данные отличаются на разных серверах?

Как использовать?

  • Раз в несколько дней заходить и смотреть на красивые графики response time и throughput, понимать какие эндпойнты работают медленнее остальных, радоваться трафику, генерировать гипотезы по улучшению производительности
  • Анализировать работу бекенда. Например, для руби — работа GC, object allocations, память
  • Отмечать улучшения/ухудшения производительности в релизах, например как делал Женя
  • Настроить алерты в слак на средний response time и на доступность сервиса
  • За деньги — больше деталей для анализа медленных эндпойнтов, мониторинг БД.

С чего начать?

В пару шагов добавляется в любое приложение (как на бекенд, так и на фронт/мобилку) — добавляем библиотеку, прописываем license key и вводим название приложения. Готово!

Альтернативы

  • Datadog
  • Skylight
  • Писать свой велосипед, например на graphana/prometeus

⚠️ Sentry

Что даёт? Прозрачный механизм анализа возникающих ошибок у клиентов. Показывает контекст ошибки (например версию OS, версию сборки, разрешение, rooted или нет для мобильного приложения, все переданные параметры для веба).

Как использовать?

  • Раз в неделю-две анализировать ошибки, отмечать, какие ошибки перестают воспроизводиться в новых релизах, какие появляются новые
  • Настроить алерты в slack о новых/возобновлённых ошибках
  • (секретный приём для быстрой разработки) Можно не покрывать некоторые edge-кейсы приложения, а вместо этого ловить в них ошибки. Нет ошибок — значит этого edge-кейса ни у кого и нет, можно время потратить на что-то полезное!

С чего начать? Как и в случае с Newrelic добавляется библиотека+ прописывается ключ. Для хранения и доступа к данным есть 2 варианта: hosted и on-premise. В первом варианте вы используете сервера sentry с лимитами по количеству ошибок. Во втором — разворачиваете свой сервис, например через docker и используете его без каких-либо ограничений. Если у вас есть трафик и несколько проектов — удобнее второй вариант.

Альтернативы

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.

CTO @ Appbooster. Full-stack developer, creator of CerebroApp. Author of Saturday Night Hack: https://t.me/sn_hack

CTO @ Appbooster. Full-stack developer, creator of CerebroApp. Author of Saturday Night Hack: https://t.me/sn_hack