Я слышал, что термин SOA использовался для описания множества различных настроек, поэтому я не уверен, что есть «правильный» ответ, но основная концепция - это сервисный уровень.Большим преимуществом является то, что ответ на ваш последний вопрос о слое DB - все вышеперечисленное.Как только логика управления хранением / постоянством изолирована на уровне обслуживания, и приложения просто обращаются к этому уровню, становится намного проще перемещать определенные данные на другие серверы или объединять их в один, когда это необходимо.Вы можете даже получить некоторые услуги, просто позвонив другим службам, которые часто называют фасадом службы .
В качестве примера "реальной жизни".Предположим, у вас есть какая-то база данных клиентов, где вы храните имена, адреса, электронные письма и т. Д. Вы представляете это как веб-сервис, где вы можете получить информацию о человеке.В какой-то момент вы разовьете эту систему домашнего приготовления и решите получить лицензию на полноценную систему CRM.Поскольку вы изолировали все транзакции, связанные с клиентами, в веб-службе, вам нужно всего лишь обновить эту службу, чтобы получать информацию из программного обеспечения CRM, а не из вашей базы данных.Это действительно то, где сервисные архитектуры действительно сияют.
Что касается обработки ошибок, если все ваши приложения и сервисы написаны на CF, у вас будет логирование и обработка ошибок на обоих (или всех) уровнях.Очевидно, что отключение сервера на служебном сервере будет довольно серьезным, поскольку это повлияет на все, что выше него.Мы используем монитор на том, который отправляет электронные письма в службу поддержки, если что-то истекает или начинает идти на юг.В клиентских приложениях ключ, который я нашел, - это установление разумного времени ожидания для вызовов веб-службы.Я никогда не видел, чтобы использовался ESB, но я предполагаю, что он даст вам еще один уровень абстракции для управления реальными вызовами.Это может помочь с таймаутами и тому подобным, но я не могу точно сказать.