TGViewer
Библиотека джависта | Java, Spring, Maven, Hibernate Библиотека джависта | Java, Spring, Maven, Hibernate @javaproglib · 22K subscribers
Post #7863 1.4K
Как правильно определять границы сервисов в микросервисной архитектуре?

Один из недооценённых скиллов в разработке — это умение провести правильную границу между сервисами. Большинство «распределённых монолитов», которые мы встречаем в продакшене, рождаются именно здесь.

🟡 Что такое Service Boundary

Это контракт на три вещи:

— за что сервис отвечает;
— какими данными он владеет;
— как он общается с соседями.


Представь компанию: HR не лезет в финансы, а склад не занимается зарплатами. Так же должны работать твои сервисы.

🟡 4 принципа, которые работают

1. Business Capability First

Режь по бизнес-функциям, а не по техническим слоям. OrderService, PaymentService, UserService, потому что именно так бизнес думает о системе.

2. Single Responsibility

Один сервис — одна ответственность. Если в описании сервиса есть союз и, это уже тревожный звоночек 🚨

3. Data Ownership

У каждого сервиса своя БД. Без исключений. Shared database = shared pain.

4. Loose Coupling

Только API, никакого прямого доступа к чужим таблицам.

🟡 Классический антипаттерн


// ❌ Бизнес-логика смешана в одном сервисе
@Service
public class BadOrderService {
public String processOrderAndPayment(int id) {
String order = orderRepository.findById(id)
.orElse("Order not found");
String paymentStatus = "Payment Successful"; // 🚨 чужая ответственность
return order + " | " + paymentStatus;
}
}


Выглядит безобидно, пока не нужно масштабировать платежи отдельно, сменить платёжного провайдера или добавить retry-логику только для оплаты. Тут и начнутся реальные проблемы.

🟡 Советы из практики

Начни с монолита. Не дроби систему заранее. Сначала пойми домен, потом режь по швам.
Следи за chatty communication. Если сервис делает 10 вызовов к соседям на каждый запрос, граница явно проведена не там.
Изучи DDD. Bounded Context из Domain-Driven Design это лучший инструмент для поиска правильных границ. Инвестиция окупается быстро


══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта
  • 👍 8
  • ❤‍🔥 3
  • 🔥 3
  • ❤ 1
More from @javaproglib
  1. Sep 20, 2026🧠 Почему a.age() - b.age() может сломать сортировку Часто встречается такой Comparator: l…
  2. Sep 19, 2026🤯 Collectors.teeing — две агрегации в одном collect Нужно получить средний возраст и коли…
  3. Sep 18, 2026══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
  4. Sep 17, 2026⚡️⚡️Joker 2026: что происходит с профессией разработчика Индустрия разработки проходит чер…
  5. Sep 17, 2026🧠 Что выведет код? ❤️ [1, 2, 3, 4] 🔥 [2, 4] 👍 [1, 3] 👾 ConcurrentModificationException…
  6. Sep 16, 2026🛠 computeIfAbsent — кэш и группировка без if Нужно положить значение в список по ключу. О…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →