SOA - насколько гранулированными должны быть сервисы для поддержания производительности? - PullRequest
9 голосов
/ 01 апреля 2011

Я принимаю проект по замене древней устаревшей системы с нуля.Перед тем, как я пришел, компания наняла консультанта, который составил базовый эскиз системы и активно продвигал SOA.Это привело к длинному списку «сущностных услуг» с намерением объединить их в более сложные комбинации услуг.Например, пользователь, которому нужна информация о комитете, попадет в службу «Комитет», которая затем вызывает службу «Персона», чтобы получить своих членов, и службу «Встреча», чтобы получить свои собрания, и т. Д.

Я понимаю, что это повышает гибкость, но я беспокоюсь о производительности.Мне кажется, что система, созданная с такой высокой степенью детализации для ее служб, тратит слишком много ресурсов на перевод служебных сообщений, и производительность будет неприемлемой.Мне также кажется, что выигрыш в гибкости все еще можно получить, используя базовые многократно используемые объекты, хотя в этом случае преимущество технологически независимого интерфейса теряется для повышения производительности.

Для получения дополнительной информации: организация, запрашивающая этоПрограммное обеспечение в настоящее время не имеет стабильного пакета сторонних программ, которые необходимо интегрировать с.Это программное обеспечение заменит все комплекты.В настоящее время также нет внешних потребителей, которым необходим доступ к данным за пределами предоставленного интерфейса веб-сайта - все сервисные вызовы будут поступать из других частей нашей системы.Выбор SOA в этом случае кажется полностью основанным на концепции «подготовки».

Итак, мой вопрос - какой уровень детализации приемлем в стабильном сервисе без ущерба для производительности?Я слишком скептически отношусь к ударам в производительности, которые мы предпримем для реализации всех наших организаций в качестве сервисов?Должны ли функциональные возможности быть доступны в виде веб-сервисов только тогда, когда они необходимы, а вместо этого необходимо сосредоточиться на «подготовке» к разработке бизнес-уровня для вероятности того, что сервисы впоследствии будут отброшены?

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011

Прежде всего, найти «сладкое место» по количеству услуг наверняка сложно.Слишком много услуг, и ваши затраты на интеграцию страдают, слишком мало, и ваши затраты на реализацию страдают.Вы должны найти хороший баланс.

Мой вам совет: следуйте Методике Ювала Лоуи в том, что вы должны разбивать свои услуги по областям нестабильности или областям изменений.Это даст вам уровень детализации.Вам также следует прочитать его книгу WCF , если можете.

Что касается производительности, WCF по своей природе будет поддерживать многие тысячи вызовов в секунду в зависимости от ваших сценариев использования и аппаратного обеспечения.Службы вызова услуг не проблема.Платформа будет поддерживать его, если вы сделаете свою часть.Например, используйте правильную привязку для правильного сценария (именованные каналы для вызова служб на одном компьютере и TCP для вызова служб на компьютере, где это возможно).Вам также следует реализовать вертикальную часть приложения и выполнить тестирование производительности перед созданием остальной части приложения.Это проверит вашу архитектуру.

3 голосов
/ 01 апреля 2011

Когда я говорю «Сервис», я имею в виду полный вертикальный компонент, который может выполнять полностью независимую операцию.И я не предпочитаю углубляться в детали, если нет исключительных требований.На мой взгляд, SOA служба должна выполнять значимую бизнес-функцию, которая может выполняться независимо.Служба не должна требовать другой службы для завершения своей функции.

1 голос
/ 01 апреля 2011

Какой уровень детализации допустим в стабильном сервисе без ущерба для производительности?

Физические лица.Как описано консультантом.

Не слишком ли я скептически отношусь к ударам в производительности, которые мы примем, внедрив все наши объекты в качестве сервисов?

Да.Слишком скептически.

Приличная структура может оптимизировать некоторые из этих запросов, чтобы они не включали много сетевых издержек.

Как и в случае баз данных SQL, проблемы в основном решены.Вы обнаружите, что узкие места лежат в основе приложений, которые вы представляете в качестве сервисов.Слой SOA в основном сантехнический.Биты по-прежнему должны перемещаться по каналам, уровень SOA просто организует их более разумно, чем большинство альтернатив.

Должны ли службы быть реализованы только тогда, когда они необходимы, вместо этого с фокусом на "подготовку"вдаваясь в проектирование бизнес-уровня для вероятности того, что сервисы впоследствии будут отброшены?

Да.

Вот что означает "Agile".

Найтипользовательская история.Создайте только сервисы (и сущности) для этой истории.

В первые несколько историй у вас будут существенные накладные расходы, связанные с подготовкой и развертыванием вашей инфраструктуры SOA в виде простого повторяющегося этапа выпуска.

Никогда не делайте обширной «подготовки» к вещам, которые вам «могут» понадобиться в каком-то невероятном будущем.Читайте об Agile и о том, как расставить приоритеты в заделах.

...