Отчеты в SOA (бизнес-аналитика и сервис-ориентированная архитектура) - PullRequest
1 голос
/ 02 марта 2012

У меня есть SOA с сервисом Employee и сервисом Travel. Служба путешествий создаст запись travelID для employeeId в базе данных [Travel]. Сотрудник будет использовать веб-сайт «TravelUI» (который вызывает службу путешествий для хранения данных в БД), чтобы запросить поездку. Существует веб-сайт «ManagerUI», который менеджер будет использовать для утверждения заявки на поездку. Сайт «ManagerUI» использует сервис Travel, а также сервис Employee для получения подробной информации. Когда менеджер утверждает поездку, запись поездки (в базе данных [Путешествия] утверждается с использованием операций в службе командировок.

Примечание. Данные сотрудника хранятся в базе данных [Employee], и ​​служба Employee использует эти данные.

Теперь нам нужно сгенерировать отчет с TravelID, датой запроса на поездку, EmployeeID, EmployeeName, EmployeePhone. Первые три информации взяты из базы данных [Travel], а остальные - из базы данных [Employee]. Отчет должен быть создан с использованием SSRS.

Здесь проблема НЕ в том, возможно ли создать отчет путем объединения двух баз данных; но это стало сложной проблемой из-за внедрения SOA.

  1. Как мы можем решить проблему

  2. Какие ошибки в моем дизайне сделали проблему сложной?

  3. Есть ли у вас какие-либо предложения для хороших статей по решению такой проблемы?

Примечание: SOA планируется с использованием WCF здесь.

РЕДАКТИРОВАТЬ : Хотя в названии упоминается о бизнес-аналитике, я ищу ответ, который не касается прежде всего datamart / datawarehouse. Ответ хранилища данных также приветствуется, но основная цель - отсутствие хранилища данных.

ЧТЕНИЕ:

  1. Сервис-ориентированная бизнес-аналитика http://msdn.microsoft.com/en-us/library/bb245659.aspx

  2. Сервис-ориентированная архитектура для бизнес-аналитики http://www.hpl.hp.com/personal/Claudio_Bartolini/download/soca07.pdf

  3. Сервис-ориентированная архитектура и бизнес-аналитика http://www.servicetechmag.com/I53/0811-2

  4. Microsoft на корпоративной сервисной шине (ESB) http://msdn.microsoft.com/en-us/library/aa475433(v=bts.10).aspx

  5. https://stackoverflow.com/questions/41353/net-esbs-out-there

Ответы [ 4 ]

2 голосов
/ 05 марта 2012

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

Если вы этого еще не сделали, я бы создал операции отчетности для службы путешествий, например, если вы используете службы на основе SOAP, добавьте операцию GetTravelRequests, которая принимает какие-то параметры запросов и разбивки на страницы, которые просто возвращают TravelID, Дата запроса на поездку, EmployeeID соответствующих записей. Затем создайте GetEmployeeTravelRequests, который составляет GetTravelRequests с операцией GetEmployeeDetails из службы Employee.

Это будет медленнее, чем в отчете на основе SSRS, но вы можете затем изменить базовую реализацию служб Travel и Employee, если вы не измените договор на обслуживание.

Я вроде бы предположил, что вы используете SOAP, на чем основан ответ, приведенный выше, однако, если RESTful-сервисы являются опцией, я бы порекомендовал следующее. Вместо предоставления числовых значений TravelID s и EmployeeID s вместо используйте URI . Например, служба командировок создаст ресурс командировки для URI сотрудника в базе данных Travel. Затем создайте поток на основе Atom запросов на поездки. Вы можете остановиться и там, где пользователю отчета нужны данные о сотруднике, они могут перейти по ссылке URI сотрудника. В противном случае вы можете использовать URI сотрудника для создания составного канала Atom, который включает сведения о сотруднике для каждого запроса на командировку.

Основным преимуществом этого последнего подхода является снижение нагрузки на БД за счет использования HTTP-кэширования; HTTP GET - самая оптимизированная операция в мире. Ваш отчет теперь является отчетом в режиме реального времени, а не таким текущим, как в тот момент, когда он был сгенерирован в последний раз, что может быть один раз в день или один раз в месяц, и если вы правильно структурируете свой фид, страницы, не являющиеся заголовками, никогда не изменятся и могут быть кэшированы на год или дольше. Если вы предполагаете, что данные о сотрудниках меняются нечасто, вы можете установить максимальный возраст 1 день, и в этом случае запрос данных о конкретных сотрудниках будет попадать в базу данных только один раз в день.

Наконец, еще одним приятным преимуществом является то, что стало легко добавлять ресурс коллекции TravelRequests в ресурс Employee, который содержит разбитый на Atom список всех командировочных запросов для этого сотрудника.

1 голос
/ 06 марта 2012

Из дизайна я не вижу, что службе Travel не будет необходим доступ к службе Employee каким-либо образом, в той или иной форме.Если они работают в виртуальной изоляции, то у вас возникнет проблема управления основными данными, которая просто ждет своего часа.

Недавно я разработал архитектуру для системы T & E с данными HR в корпоративной инфраструктуре и внешним интерфейсом T & E, размещенным как SaaS.

В этом сценарии системе T & E требовался базовый уровеньДанные HR в первую очередь, чтобы убедиться, что работник был проверен.Также необходимо было разрешить системе правильно обрабатывать бронирования командировок, не требуя от сотрудника повторного ввода ключевых данных.

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

Отчеты о бронировании билетов и мероприятиях полностью в системе Travel.Их необходимо держать в полускладском состоянии, чтобы изменения в базовых записях сотрудников не загрязняли исторические записи командировок.Это «транзакции» и должны храниться как таковые.

Имея это в виду, хотя ваш дизайн не совсем неправильный, он не совсем правильный.Вы быстро столкнетесь с проблемами, для решения которых вам необходимо вернуться к своему дизайну.Моя главная рекомендация - последовать совету @le dorfier и вернуться к началу.Дизайн, чтобы удовлетворить все требования пользователей, убедитесь, что они являются реальными требованиями, а не просто «хочет» (т.е. приятно иметь).Естественный дизайн будет включать в себя требования не только к внешнему хост-интерфейсу, но и к отчетам, необходимым для удовлетворения серверного.

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

1 голос
/ 03 марта 2012

Это хороший пример такого рода путаницы, которая может возникнуть, когда вы не знаете свои приоритеты в дизайне.И, в частности, на мой вкус, слишком много проблем с техническими вопросами и недостаточно с требованиями пользователей.

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

Это должно бытьсоставлено полностью с точки зрения пользователя, даже без использования слов «база данных», «SOA», «веб-сервис», «API» и т. д.

То, что вы будете строить, будет своего рода контрактомсоглашение между вами и клиентом об услугах, представляющих для них ценность;и как только оно будет согласовано, оно не должно измениться, кроме как повысить его ценность для клиента с его / ее точки зрения.Поэтому лучше всего попытаться отложить рассмотрение вопросов «как» до тех пор, пока у вас не будет решительно закреплено «что».

Тогда у вас будет возможность рассмотреть различные технические варианты, которые могут быть использованы длярезультат тот же.Часто существует первый этап проектирования, который просто предоставляет достаточно, чтобы заставить его работать;и вы хотите сохранить гибкость в обучении и настройке бэк-энда любым удобным для вас способом, пока концептуальный контракт / логический дизайн не изменится.

По моему опыту, все будут счастливее, если вы поставите свой первыйвнимание на способность реагировать на ожидания пользователей (которые будут заполняться по мере того, как все учатся на процессе), а не на предварительной оптимизации технологии.Microsoft предоставляет вам множество способов смешивать, сочетать и развивать корпоративный дизайн.Если вы в Agile, не забудьте начать с наименьшей разработки, которая работает, а затем повторять как безумный.

1 голос
/ 02 марта 2012

Я не думаю, что ваш дизайн не так.Кажется, что в вашей архитектуре отсутствует витрина или хранилище данных или какой-то способ поддержки бизнес-аналитики в дополнение к обработке транзакций.

BI в SOA - сложная тема, и невозможно дать совет, не зная некоторых подробностей о вашей архитектуре.Но вот несколько статей, с которых можно начать:

Рассматривали ли вы ESB для своей SOA?Это может упростить интеграцию витрины данных в вашу SOA.См. Эту статью: http://www.b -eye-network.com / view / 3018

Одним из потенциальных пользователей ESB является служба интеграции данных.Фактически, несколько поставщиков изменили свои инструменты интеграции данных и ETL (извлечения, преобразования и загрузки), чтобы они управлялись событиями, чтобы они могли использовать сообщения о событиях от ESB.Эти события могут нести информацию об изменениях исходных данных, которая может использоваться службой интеграции данных для постепенного обновления оперативного хранилища данных (ODS) или хранилища данных.Этот подход особенно полезен для операционных приложений BI, которым требуются внутридневные данные.

...