Этот вопрос проверяет понимание различий между двумя архитектурными подходами: классической сервис-ориентированной архитектурой и современной микросервисной архитектурой.
SOA фокусируется на интеграции крупных, многофункциональных сервисов через общую шину (ESB), что обеспечивает повторное использование компонентов. Микросервисная архитектура делает акцент на мелких, узкоспециализированных сервисах, которые общаются напрямую через легковесные протоколы и могут разрабатываться независимо. Микросервисы можно рассматривать как эволюцию SOA с большим упором на автономность сервисов.
Оба подхода направлены на декомпозицию систем, но делают это по-разному. Микросервисная архитектура развивала идеи SOA, но с более радикальной декомпозицией.
Ключевые различия:
Размер и границы сервисов:
SOA: Сервисы обычно крупные, охватывают целые бизнес-функции или даже приложения
Микросервисы: Сервисы мелкие, следуют принципу единственной ответственности
Коммуникация:
SOA: Использует централизованную шину предприятий (ESB) для маршрутизации, трансформации и оркестрации
Микросервисы: Используют "умные endpoints и глупые каналы" - сервисы общаются напрямую через REST, gRPC или messaging
Управление данными:
SOA: Часто используется общая база данных для нескольких сервисов
Микросервисы: Каждый сервис владеет своей собственной базой данных
Стандартизация:
SOA: Сильно зависит от стандартов (SOAP, WS-*, WSDL)
Микросервисы: Более прагматичный подход с использованием легковесных форматов (JSON)
Вывод:
Микросервисная архитектура лучше подходит для agile-разработки и независимого развертывания, в то время как SOA эффективна для интеграции унаследованных систем и обеспечения строгой стандартизации в крупных предприятиях.