118 статей для Middle Backend-разработчика: большая подборка
Материалы для самостоятельной разработки сервисов: проектирование API, транзакции, очереди, кэширование, архитектура, наблюдаемость и доставка в production.
Проектирование API
- REST vs gRPC. Межсервисная интеграция для начинающих
Чтобы проектировать понятные и стабильные API.
- От REST к gRPC и GraphQL: современный подход к API
Чтобы проектировать понятные и стабильные API.
- REST API vs GraphQL: в чём между ними разница
Чтобы проектировать понятные и стабильные API.
- GraphQL или REST: Какой API выбрать, чтобы не прогадать?
Чтобы проектировать понятные и стабильные API.
- Документирование ASP .Net Core Web API с помощью OpenAPI/Swagger. Библиотека Swashbuckle
Чтобы использовать возможности браузера из кода.
- Реализация REST API-метода с пагинацией на примере JSON-Schema и OpenAPI
Чтобы передавать структурированные данные между системами.
- RESTForms — REST API для ваших классов InterSystems Caché
Чтобы проектировать понятные и стабильные API.
- GraphQL-gRPC API Gateway на Java
Чтобы проектировать понятные и стабильные API.
- Rest шлюз для gRPC сервисов на го — gRPC-gateway
Чтобы проектировать понятные и стабильные API.
- Миграция API с REST на gRPC в WePay
Чтобы проектировать понятные и стабильные API.
- Мифы про REST API. Часть 3
Чтобы проектировать понятные и стабильные API.
- Разрабатываем REST API с помощью TypeScript, NestJS, Prisma, AdminJS и Swagger
Чтобы находить ошибки типов до запуска.
- Как мы превратили Swagger из документации в двигатель API-автотестов
Чтобы проектировать понятные и стабильные API.
Базы данных, индексы и транзакции
- Уровни изоляции транзакций: практическая механика и сравнение PostgreSQL, MySQL, Oracle, SQL Server и DB2
Чтобы ускорять запросы и сохранять целостность данных.
- Топ полезных SQL-запросов для PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
- DevConf: переход Uber с PostgreSQL на MySQL
Чтобы ускорять запросы и сохранять целостность данных.
- Что нового в PostgreSQL 11: INCLUDE-индексы
Чтобы ускорять запросы и сохранять целостность данных.
- Оптимизация SQL запросов
Чтобы ускорять запросы и сохранять целостность данных.
- Уровни изоляции транзакций в PostgreSQL, MySQL, MSQL, Oracle с примерами на Go
Чтобы ускорять запросы и сохранять целостность данных.
- PostgreSQL 16. Изоляция транзакций. Часть 2
Чтобы ускорять запросы и сохранять целостность данных.
- Шардированный не значит распределённый: что важно знать, когда PostgreSQL становится мало
Чтобы ускорять запросы и сохранять целостность данных.
- BRIN, GIN, B‑Tree: полный гайд по индексам PostgreSQL для highload
Чтобы ускорять запросы и сохранять целостность данных.
- Перекрестная репликация между PostgreSQL и MySQL
Чтобы ускорять запросы и сохранять целостность данных.
- Транзакция, ACID, CAP теорема и уровни изоляций транзакций простыми словами
Чтобы ускорять запросы и сохранять целостность данных.
- Сравнение транзакционных систем Oracle и PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
- Гетерогенная распределенная система как способ миграции больших и не очень баз данных с MSSQL Server на PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
Асинхронность и очереди
- Часть 2: Как я реализовал взаимодействие микросервисов — Kafka и gRpc
Чтобы выполнять асинхронные операции без блокировок.
- Изучаем Kafka — Уровень 1
Чтобы выполнять асинхронные операции без блокировок.
- Асинхронность vs. многопоточность: что выживет в эпоху No GIL?
Чтобы выполнять долгие операции без зависания.
- Выбор между RabbitMQ и Apache Kafka
Чтобы выполнять асинхронные операции без блокировок.
- Соседняя очередь всегда движется быстрее
Чтобы выполнять асинхронные операции без блокировок.
- Kafka, go и параллельные очереди
Чтобы выполнять асинхронные операции без блокировок.
- Архитектура сервиса распределённых очередей сообщений в Яндекс.Облаке
Чтобы выполнять асинхронные операции без блокировок.
- Event-Driven подход в пет-проекте: автоматизация Telegram-канала на NiFi, Kafka и n8n
Чтобы выполнять асинхронные операции без блокировок.
- Аналитика событий на опасном производстве, или зачем «Цифровому рабочему» Kafka, Esper и ClickHouse
Чтобы выполнять асинхронные операции без блокировок.
- Event-Driven Architecture в высоконагруженном ДБО: наш опыт
Чтобы выполнять асинхронные операции без блокировок.
- Не Кафкой единым: как наладить асинхронный обмен сообщениями между микросервисами
Чтобы выполнять долгие операции без зависания.
- Брокеры сообщений Kafka и RabbitMQ в реальной жизни
Чтобы выполнять асинхронные операции без блокировок.
- RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring
Чтобы выполнять асинхронные операции без блокировок.
Кэширование и производительность
- Как подружить Spring Boot и Redis для эффективного кэширования
Чтобы снижать задержки и нагрузку на систему.
- Кэширование и трекинг. Как YOLO экономит время и нервы
Чтобы снижать задержки и нагрузку на систему.
- Проектирование высокопроизводительных кэширующих решений с использованием Redis и Memcached
Чтобы снижать задержки и нагрузку на систему.
- Разработка высокопроизводительного кеш-слоя на основе Redis в телеграм-боте
Чтобы снижать задержки и нагрузку на систему.
- Redis больше не нужен?! Реализуем реактивный кэш на чистом PostgreSQL и Go
Чтобы снижать задержки и нагрузку на систему.
- Мифы и легенды о производительности Python
Чтобы снижать задержки и нагрузку на систему.
- Экстремальная настройка производительности HTTP: 1,2M API RPS на инстансе EC2 с 4 виртуальными процессорами (vCPU)
Чтобы снижать задержки и нагрузку на систему.
- REDIS: такой простой и такой сложный
Чтобы снижать задержки и нагрузку на систему.
- Профилирование Python-программ и анализ их производительности
Чтобы снижать задержки и нагрузку на систему.
- Разбираемся с Redis
Чтобы снижать задержки и нагрузку на систему.
- Атаки на веб-кэширование. Отравление кэша: теория и практика
Чтобы снижать задержки и нагрузку на систему.
- Гибридный кэш на базе Redis в серверной разработке
Чтобы снижать задержки и нагрузку на систему.
- Оптимизируем производительность веб-приложения с Redis
Чтобы снижать задержки и нагрузку на систему.
Архитектура, DDD и границы модулей
- Главная проблема «чистых архитектур»
Чтобы связать архитектуру с бизнес-логикой.
- Про архитектуру приложений для тех, кому мало Чистой архитектуры
Чтобы связать архитектуру с бизнес-логикой.
- Value Object: как победить примитивную одержимость без DDD
Чтобы связать архитектуру с бизнес-логикой.
- Domain-Driven Design: чистая архитектура снизу доверху
Чтобы связать архитектуру с бизнес-логикой.
- Из легаси монолита в модульную архитектуру: проводим рефакторинг и наводим порядок в проекте
Чтобы связать архитектуру с бизнес-логикой.
- Семь раз отмерь, а SOLID все равно не про ООП. Монолог об архитектуре
Чтобы связать архитектуру с бизнес-логикой.
- Вам не нужна Чистая архитектура. Скорее всего
Чтобы связать архитектуру с бизнес-логикой.
- Почему мы построили монолит на чистой архитектуре. И почему это взбесило системных аналитиков
Чтобы связать архитектуру с бизнес-логикой.
- Domain Driven Design и модульный монолит в Python
Чтобы связать архитектуру с бизнес-логикой.
- Разбираем архитектуру. Часть 1. Чистая архитектура и её корни: история и взаимосвязи
Чтобы связать архитектуру с бизнес-логикой.
- Вы за это заплатите! Цена Чистой Архитектуры. Часть 1
Чтобы связать архитектуру с бизнес-логикой.
- Event Sourcing и Saga с помощью Marten и Wolverine на C# и немного модульного монолита
Чтобы связать архитектуру с бизнес-логикой.
- DDD, CQRS, EDA, ES, Clean, Layer, Hexagonal in one application
Чтобы связать архитектуру с бизнес-логикой.
Тестирование и качество
- Тестирование Node.js-проектов. Часть 1. Анатомия тестов и типы тестов
Чтобы находить ошибки до выпуска продукта.
- Контрактные тесты с Pact: гарантия стабильности микросервисов
Чтобы находить ошибки до выпуска продукта.
- Автоматизация тестирования микросервисов: плюсы и минусы тестов на Go
Чтобы находить ошибки до выпуска продукта.
- Мобильное тестирование, автоматизация и тестирование API: С чем нужно уметь работать тестировщику в 2021 году
Чтобы находить ошибки до выпуска продукта.
- Еще раз про интеграционное тестирование ASP.NET Core c testserver и testcontainers
Чтобы находить ошибки до выпуска продукта.
- [обновлено] Как нагрузочное тестирование процессинга обошлось нам в €157 000 и почему никого не уволили
Чтобы находить ошибки до выпуска продукта.
- Контрактное тестирование без единой строки кода: наш инструмент, наши грабли и честный разбор альтернатив
Чтобы находить ошибки до выпуска продукта.
- Нагрузочное тестирование: наш опыт, методология и результаты. Делимся внутренней кухней
Чтобы находить ошибки до выпуска продукта.
- Долой оверхед: как мы избавились от зависимостей в интеграционном тестировании микросервисов
Чтобы находить ошибки до выпуска продукта.
- Тестирование BMС: поговорим о нагрузочном тестировании
Чтобы находить ошибки до выпуска продукта.
- Тестирование умерло, да здравствует тестирование
Чтобы находить ошибки до выпуска продукта.
- Стратегия тестирования REST API: что именно вам нужно тестировать?
Чтобы находить ошибки до выпуска продукта.
- Обзор программы Heisenbug 2017 Moscow: сколько нужно тестировщиков, чтобы запустить тесты на атомной электростанции?
Чтобы находить ошибки до выпуска продукта.
Логи, метрики и трассировка
- «База» по метрикам в Prometheus
Чтобы быстро находить причины сбоев.
- Мониторинг и логирование DWH, часть 2: Prometheus, Grafana, Zabbix, ELK, OpenSearch, Loki — как выбрать рабочий стек
Чтобы быстро находить причины сбоев.
- Как мы наблюдаем за метриками в дата-центре и развиваем наш мониторинг
Чтобы быстро находить причины сбоев.
- Как внедрить наблюдаемость в микросервисное приложение с помощью OpenTelemetry, Jaeger и Prometheus
Чтобы быстро находить причины сбоев.
- Наблюдаемость SRE: пространства имен и структура метрик
Чтобы быстро находить причины сбоев.
- Распределенное логирование и трассировка для микросервисов
Чтобы быстро находить причины сбоев.
- Одна платформа, чтобы мониторить всех: как мы осуществляем трассировку, работаем с логами и метриками во всей экосистеме
Чтобы быстро находить причины сбоев.
- Мониторинг Strimzi Kafka через kube-prometheus-stack
Чтобы быстро находить причины сбоев.
- Трассировка OpenTelemetry в 200 строк кода
Чтобы быстро находить причины сбоев.
- Масштабирование приложения в Kubernetes на основе метрик из Prometheus
Чтобы быстро находить причины сбоев.
- OpenTelemetry как единый стандарт наблюдаемости для распределённых систем
Чтобы быстро находить причины сбоев.
- Мониторинг веб-приложения на Rust с использованием Prometheus и Grafana
Чтобы быстро находить причины сбоев.
- Мониторинг, который кричал «Волк»! Что мы придумали для корректного сбора метрик
Чтобы быстро находить причины сбоев.
CI/CD, Docker и Kubernetes
- Как я уменьшил Docker-образ Go-приложения с 1.92 GB до 9 MB
Чтобы одинаково запускать приложение в любой среде.
- Как запустить контейнер Docker внутри конвейера GitLab CI
Чтобы одинаково запускать приложение в любой среде.
- Настройка GitLab CI/CD: понимаем принципы работы и запускаем первый pipeline
Чтобы одинаково запускать приложение в любой среде.
- Запуск werf в GitLab CI/CD без Docker-сервера
Чтобы одинаково запускать приложение в любой среде.
- Сборка и деплой однотипных микросервисов с werf и GitLab CI
Чтобы одинаково запускать приложение в любой среде.
- Почему ваш Docker-контейнер взломают завтра (и как этого избежать)
Чтобы одинаково запускать приложение в любой среде.
- 3-way merge в werf: деплой в Kubernetes с Helm «на стероидах»
Чтобы одинаково запускать приложение в любой среде.
- Практика с dapp. Часть 2. Деплой Docker-образов в Kubernetes с помощью Helm
Чтобы одинаково запускать приложение в любой среде.
- Масштабируем OpenClaw: Docker, Kubernetes и отказоустойчивость
Чтобы одинаково запускать приложение в любой среде.
- Динамическая сборка и деплой Docker-образов с werf на примере сайта версионированной документации
Чтобы одинаково запускать приложение в любой среде.
- Миграция приложения из Docker Compose в Kubernetes. Как, зачем и с какими проблемами я столкнулся
Чтобы одинаково запускать приложение в любой среде.
- Деплой в Docker Swarm
Чтобы одинаково запускать приложение в любой среде.
- Сборка проектов с GitLab CI: один .gitlab-ci.yml для сотни приложений
Чтобы одинаково запускать приложение в любой среде.
Безопасность и управление доступом
- Вайбкод и безопасность: как не задеплоить уязвимости вместе с фичами
Чтобы ограничивать доступ и защищать учётные записи.
- Разработчики всё ещё путают JWT, JWKS, OAuth2 и OpenID Connect — разбираем на примерах. Часть 2
Чтобы ограничивать доступ и защищать учётные записи.
- Локальное хранилище или куки? Безопасное хранение JWT на клиенте
Чтобы ограничивать доступ и защищать учётные записи.
- OAuth 2.0 -> OAuth 2.1. Что дальше?
Чтобы ограничивать доступ и защищать учётные записи.
- RBACX — универсальный RBAC/ABAC-движок авторизации для Python
Чтобы ограничивать доступ и защищать учётные записи.
- Токены доступа и API Gateway: как обеспечить безопасность запросов
Чтобы ограничивать доступ и защищать учётные записи.
- OAuth 2.0
Чтобы ограничивать доступ и защищать учётные записи.
- Реализация сервиса сканирования на основе OWASP ZAP
Чтобы ограничивать доступ и защищать учётные записи.
- «РБПО для бедных»: сказ о том, как стартап безопасность прикручивал
Чтобы ограничивать доступ и защищать учётные записи.
- Безопасность приложений на Typescript от А до Я: гайд по защите от очевидных и не очень уязвимостей
Чтобы находить ошибки типов до запуска.
- Шпаргалки по безопасности: JWT
Чтобы ограничивать доступ и защищать учётные записи.
- CI/CD Kubernetes платформа Gitorion. Реестр Docker-образов Harbor c аутентификацией в Keycloak и доступом по ролям RBAC
Чтобы одинаково запускать приложение в любой среде.
- OWASP API Security Top 10 RC
Чтобы ограничивать доступ и защищать учётные записи.
Планирование разработки
- Планирование проекта
Чтобы выбрать приоритеты и согласовать действия.