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

Ответ

В одном проекте я работал с архитектурой из 5-7 взаимодействующих микросервисов. Каждый отвечал за отдельную бизнес-область:

  • Сервис авторизации: Реализация OAuth2 и JWT.
  • Платежный сервис: Интеграция с внешними провайдерами (Stripe).
  • Сервис уведомлений: Асинхронная рассылка через Kafka с последующей отправкой Email/SMS.
  • Сервис геолокации: Работа с внешними API (Google Maps).
  • Сервис аналитики: Сбор и агрегация данных в Elasticsearch.

Пример кода (Spring Boot) для контроллера сервиса уведомлений:

@RestController
@RequestMapping("/api/notifications")
public class NotificationController {

    @Autowired
    private KafkaProducerService kafkaProducerService;

    @PostMapping
    public ResponseEntity<String> createNotification(@Valid @RequestBody NotificationRequest request) {
        // Отправка события в Kafka для асинхронной обработки
        kafkaProducerService.sendMessage("notification-topic", request);
        return ResponseEntity.accepted().body("Notification request queued");
    }
}

Коммуникация и инфраструктура:

  • Синхронное взаимодействие: REST API (Spring Cloud OpenFeign).
  • Асинхронное взаимодействие: Apache Kafka для событий.
  • Service Discovery: Netflix Eureka для динамического обнаружения сервисов.
  • Конфигурация: Spring Cloud Config Server для централизованного управления настройками.

Ответ 18+ 🔞

А, слушай, вот тут у меня был проект, так там архитектура — просто песня, но и головной боли, блядь, овердохуища. Пять, а то и семь микросервисов, которые друг с другом как мартышки на дереве — один другому по ебалу прыгает, если что не так.

Каждый, сука, за свою вотчину отвечал:

  • Сервис авторизации: Ну, это наш вышибала, OAuth2 и JWT ему в зубы. Кто не авторизовался — тот лох, нахуй.
  • Платежный сервис: Это уже кассирша, но злая. Интегрировался со Stripe, деньги выколачивал. Тут без ошибок, а то писец — бабки потеряешь.
  • Сервис уведомлений: А это наш почтальон Печкин, только асинхронный, блядь. Получал задание, пихал его в Кафку, а потом уже рассылал эти письма и смски. Чтобы не тормозить всех, понимаешь?
  • Сервис геолокации: Шпион ебаный. Тыкался в API Google Maps, вынюхивал, где кто находится. Главное — лимиты не превысить, а то бан, и ты с носом.
  • Сервис аналитики: Ну, это наш бухгалтер-статистик. Собирал все данные, которые остальные понагенерили, и пихал их в Elasticsearch, чтобы потом начальство красивые графики могло смотреть.

Вот, глянь, кусочек кода из того самого сервиса уведомлений (Spring Boot, мать его):

@RestController
@RequestMapping("/api/notifications")
public class NotificationController {

    @Autowired
    private KafkaProducerService kafkaProducerService;

    @PostMapping
    public ResponseEntity<String> createNotification(@Valid @RequestBody NotificationRequest request) {
        // Отправка события в Kafka для асинхронной обработки
        kafkaProducerService.sendMessage("notification-topic", request);
        return ResponseEntity.accepted().body("Notification request queued");
    }
}

Видишь? Красота. Пришла заявка — мы её не сами обрабатываем, а просто, хуяк, кидаем в тему Кафки и говорим: «Принято, браток, жди». А там уж другие ребята разберутся, когда проснутся.

А как они все, сука, общались?

  • Синхронно, по-быстрому: REST API через Spring Cloud OpenFeign. Один сервис кричит другому: «Эй, падла, дай данные!» — и ждёт, как дурак, ответа.
  • Асинхронно, по-умному: Apache Kafka для событий. Кинул сообщение в очередь и пошёл дальше пить кофе. «Сделают — сделают, не сделают — ебись оно конём».
  • Service Discovery: Netflix Eureka. Чтобы сервисы не бегали друг за другом с IP-адресами, как угорелые. Зашёл в Eureka, спросил: «А где этот пидарас, платежный сервис?» — и тебе тут же адресок подскажут.
  • Конфигурация: Spring Cloud Config Server. Это такая папочка, где у всех настройки лежат. Захотел поменять порт — не надо по всем сервисам ползать, изменил в одном месте и всех, блядь, перезагрузил. Удобно, но если он лег — пиши пропало, все твои микросервисы превратятся в тыквы.

Вот такая, блядь, конструкция. Красиво, масштабируемо, а когда ломается — волосы дыбом, ищешь, какой же из этих семи гномов сегодня с похмелья и нихуя не работает.