Я работаю с WCF 4.0 и хорошо представляю, как создавать сервисы с технической точки зрения. Я работаю с WCF уже 3 года.
Несмотря на это, я и другие, с кем я общаюсь, имеют разные представления о том, какой должна быть единица программного обеспечения, составляющего услугу, а что нет. Многие люди, с которыми я общаюсь, считают, что услуги должны быть гранулярными. Действительно, моя предыдущая компания провела много времени, превращая некоторые из своих сборок в службы (так мне сказали).
Во многих случаях я не вижу, как услуга лучше ... и, возможно, это не всегда должно быть. Я приведу вам пример: в нашей системе есть большой сервис, который действительно вырос для выполнения двух разных независимых работ. Я собираюсь разделить его на две службы по двум причинам: производительность и изоляция ошибок (мы размещаемся в службе Windows, а не IIS). Дело в том, что, несмотря на обслуживание двух независимых бизнес-процессов (один сервис может быть недоступен, не влияя на другой), оба имеют значительную часть общей бизнес-логики.
Теперь некоторые советуют мне, чтобы эта общая логика была разделена на 3-й сервис в соответствии с принципами SOA и использовался двумя недавно разделенными сервисами. На мой взгляд, это лишь частично сводит на нет преимущество разделения большого сервиса в первую очередь: мы ввели узкое место в производительности и единую точку отказа. Если процесс хоста 3-го сервиса не работает, 1 и 2 больше не могут выполнять свою работу. Это происходит с нами сейчас, когда у нас есть «глубокая» структура многих услуг. Один выходит, и любые зависимые службы увеличивают время ожидания цепочки, поскольку на их звонки никогда не отвечают.
Теперь, если общая логика была просто библиотекой, а не службой, мы получаем преимущество повторного использования кода, отсутствие узких мест в производительности и изоляции отказов, поскольку каждая служба выполняет свою собственную копию сборки в своей собственной памяти. Также нет затрат на сериализацию.
Что думают люди по этому поводу? Есть ли правило или общее руководство, когда дело доходит до решения, когда что-то должно быть службой или библиотекой? Любой другой совет?
Спасибо
Michael