Типичный backend сервис
Всем привет, работаю java разработчиком 10 лет. Хотел бы в этом посте показать, как выглядит типичный backend сервис на проекте среднего размера.
Проект обычно состоит из нескольких сервисов, каждый из которых отвечает за определенный набор функциональности. Относительно легко выделить технические сервисы (авторизация, отправка емейлов), труднее разделять сильно связанные между собой понятия из предметной области. Ранее сервисы могли запускаться в рамках одного процесса, сейчас есть тренд к разделению на микросервисы.
Также есть тренд на использование нескольких систем хранения и доставки данных (при необходимости). Поэтому не удивляет, когда в одном сервисе встречаются интеграции с разными типами субд или очередей.
Сервисы могут выполнять разные задачи. Одни сервисы запускаются раз в день, чтобы сформировать отчет или выполнить клиринговые операции. Другие сервисы используются для технических нужд. Но самым частым случаем в моей практике является то что принято называть web-сервисом. Такой сервис обслуживает онлайн запросы пользователей, и во взаимодействии с другими сервисами выполняет какие-то бизнес процессы. Приведу диаграмму, как выглядит мир со стороны такого сервиса:
Стрелки показывают, кто инициирует взаимодействие. Другие сервисы выглядят плюс-минус аналогично. Более того, сервисы вокруг проекта выглядят похоже - например, сборка логов реализована с помощью kafka и специализированной субд.
Если будет интересно, могу дальше рассказать как разрабатывать api тесты для такого сервиса.