Какой технологический стек вы применяли в последних проектах?

Ответ

Стек варьировался в зависимости от проекта, но типичный набор для backend-микросервисов включал:

Backend (Java-экосистема):

  • Язык и JVM: Java 17/21 (LTS версии), преимущественно для стабильности и новых возможностей (Records, Pattern Matching).
  • Фреймворк: Spring Boot 3.x (Web, Data JPA, Security, Cloud).
  • Базы данных: PostgreSQL для ACID-транзакций, Redis для кеширования и сессий.
  • Асинхронная коммуникация: Apache Kafka для стриминга событий и интеграции сервисов.
  • Resilience: Resilience4j для реализации шаблонов устойчивости (Circuit Breaker, Retry, Rate Limiter).

Frontend & BFF (Backend For Frontend):

  • Для некоторых микросервисов, выступающих в роли BFF, использовался TypeScript с Node.js (NestJS) или React для админ-панелей.

Инфраструктура и DevOps:

  • Контейнеризация и оркестрация: Docker, Kubernetes (K8s) для деплоя и масштабирования.
  • Облако: AWS (EC2, EKS, RDS, S3, SQS).
  • CI/CD: GitLab CI/CD или GitHub Actions для автоматизации сборки, тестирования и деплоя.
  • Мониторинг: Prometheus для сбора метрик, Grafana для дашбордов, ELK-стек для логов.

Пример конфигурации Spring Boot приложения:

@SpringBootApplication
@EnableCaching // Для кеширования через Redis
@EnableKafka  // Для обработки Kafka-сообщений
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // Конфигурация Redis Cache
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10));
        return RedisCacheManager.builder(factory).cacheDefaults(config).build();
    }
}

Ответ 18+ 🔞

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

Бэкенд (этот ваш Java-мир):

  • Язык и JVM: Ну, Java, куда ж без неё. 17-я или 21-я, LTS, чтобы не проснуться однажды с версией, которая накрылась медным тазом. Records там, Pattern Matching — в общем, чтобы не писать эти бесконечные бойлерплейты, блядь.
  • Фреймворк: Spring Boot, естественно. Третий, нахуй. Web, Data JPA, Security, Cloud — весь этот цирк с конями. Без него как без рук, а с ним иногда как с гвоздём в жопе, но жить можно.
  • Базы данных: PostgreSQL для всего серьёзного, где нужны эти ваши ACID-транзакции, а то вдруг деньги куда-то денутся, ёпта. А Redis — это чтобы всё летало, для кеша и сессий. Без кеша — пипец, всё грузится, как черепаха в сиропе.
  • Асинхронщина: Apache Kafka. Ну, чтобы сервисы между собой болтали, не дергая друг друга за яйца каждую секунду. Стриминг событий, интеграция — красота, только настраивать её — это отдельный вид искусства, блядь.
  • Устойчивость (Resilience): Resilience4j. Это чтобы когда один сервис ляжет, весь остальной цирк не поехал в тартарары. Circuit Breaker, Retry, Rate Limiter — в общем, защита от долбоёбов и сбоев.

Фронтенд и BFF (Backend For Frontend):

  • Иногда, чтобы не грузить основной бэкенд всякой фронтовой хуйнёй, делали отдельный сервис-прослойку. На TypeScript с Node.js (NestJS) или, если админку какую, то React. Чтоб красиво было, блядь.

Инфраструктура и DevOps (адская кухня):

  • Контейнеры и оркестрация: Docker, Kubernetes (K8s). Ну, стандарт де-факто, ёпта. Запаковал, запустил, масштабируешь — красота. Пока он не начнёт глючить, а тогда волнение ебать, терпения ноль ебать.
  • Облако: AWS, куда ж без него. EC2, EKS, RDS, S3, SQS — весь этот зоопарк. Дорого, блядь, но удобно. Иногда.
  • CI/CD: GitLab CI/CD или GitHub Actions. Чтобы не тыкать руками после каждого коммита, а чтобы само собиралось, тестировалось и выкатывалось. Мечта, а не жизнь.
  • Мониторинг: Prometheus метрики собирает, Grafana красивые графики рисует, ELK-стек логи жуёт. Чтобы когда всё ебнулось, было что посмотреть и на кого свалить.

Вот, смотри, как примерно это в коде выглядит, блядь (код не трогаю, он святой):

@SpringBootApplication
@EnableCaching // Чтобы Redis кешировал, а то без него — пиздец
@EnableKafka  // Чтобы Кафку слушал, а не проспал сообщения
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        // Настраиваем Redis Cache, чтобы не забывал данные через 10 минут
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(10));
        return RedisCacheManager.builder(factory).cacheDefaults(config).build();
    }
}

Вот и весь сказ, блядь. Собрал такой зоопарк, настроил, и pray for mercy, чтобы ничего не упало в пятницу вечером.