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

«С каким количеством микросервисов вы работали в одном проекте?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В одном проекте я работал с архитектурой из 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 для централизованного управления настройками.