С каким масштабом задач и систем вы работали?

Ответ

Работал над задачами и системами различного масштаба:

  • Крупные системные изменения: Участие в миграции монолитного приложения на микросервисную архитектуру (Spring Boot, Kubernetes), что сократило время простоя (downtime) на 40%.
  • Высоконагруженные сервисы: Разработка REST API, обрабатывающего более 10 тысяч запросов в секунду (RPS), с оптимизацией запросов к БД и многоуровневым кэшированием.
  • Распределённые системы: Реализация асинхронных потоков данных через Apache Kafka для системы обработки событий и аналитики.

Пример оптимизации доступа к данным:

@Service
public class UserService {
    @Cacheable(value = "users", key = "#id") // Кэширование в Redis
    public User getUserById(Long id) {
        return userRepository.findById(id).orElseThrow();
    }
}

Готов работать как над точечными улучшениями, так и над задачами, влияющими на архитектуру.

Ответ 18+ 🔞

А, ну вот, смотри, классика жанра! Сидел я, значит, на разных проектах, от мелких поделок до таких монстров, что мама не горюй. Всё пощупал, блядь.

Ну, например, была у нас одна старая махина, монолит, ебаный колосс на глиняных ногах. Так мы её, сука, разобрали по кирпичикам и слепили из этого зоопарка микросервисов на Spring Boot, да в Kubernetes запихнули. И знаешь, что самое охуенное? Время, когда всё лежит и не работает, упало чуть ли не вполовину! Сорок процентов, Карл! Раньше чихнул один модуль — весь сервис в пизду, а теперь хоть один и сдохнет, остальные-то живы, ебать.

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

@Service
public class UserService {
    @Cacheable(value = "users", key = "#id") // Чтоб не ебашить в базу каждый раз, а взять из Redis
    public User getUserById(Long id) {
        return userRepository.findById(id).orElseThrow();
    }
}

Ну и, конечно, без этой вашей асинхронщины никуда. Делали мы систему, где события летят, как дерьмо вентилятор. Так вот, запустили мы между сервисами Apache Kafka — этакую, блядь, супер-трубу. Один сервис плюнул в неё сообщение и забыл, а другой в своё удоввоольствие его обрабатывает, когда захочет. Красота, ёпта!

Короче, мне хоть мелкую дыру в логике латать, хоть целую новую махину с нуля городить — всё в кайф. Лишь бы задача была со смыслом, а не просто хуйню какую-то писать.