… добавляем бизнес-процессы

Перед отпуском я написал несколько сообщений об управлении основными данными (master data management). И даже попытался в сообщении Master Data Management, EDA, ESB, SOA: собираем все вместе связать MDM с архитектурой предприятия и интеграцией приложений. Но, безусловно, тема намного глубже и требует еще множество дополнительных комментариев. Сегодняшний комментарий о связи MDM и BPM.

Во-первых, BPM – это своего рода «пятый элемент» MDM, о котором мало кто вспоминает. К основным данным обычно относят клиентов, сотрудников, продукты и активы. При этом, процессы продажи и предоставления клиентам продуктов силами сотрудников к активам, чаще всего, не относятся. Наверное, такое невнимание к процессам и привело к появлению отдельной дисциплины BPM, а так же дисциплины архитектура предприятия (enterprise architecture). Справедливости ради, надо сказать, что еще один вид основных данных – географические координаты и адреса, приобретает все большую значимость, но об этом я напишу отдельно.

Во-вторых, без основных данных BPM «повисает»… даже не в воздухе, а правильнее сказать в безвоздушном пространстве. В BPMN данные присутствуют настолько неявно, что в BPMS работа с данными становиться чуть ли не главной проблемой. Взять хотя бы задачу назначения задач на сотрудников для более-менее распределенной компании с более-менее сложной продуктовой линейкой.

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

В оpen-source BPMS Activiti появились кейсы

16 августа вышел очередной релиз Aсtiviti с номером 5.7 Обычно, релизы появлялись ежемесячно, но этот релиз делался 2,5 месяца. Ожидание не оказалось напрасным. В системе серьезно доработано приложение пользователя Activiti Explorer (аналог Worklist/HumanTask). Кроме задач, возникающих в ходе исполнения бизнес-процесса стало возможным просто создавать задачи и назначать их на пользователей. Задачи можно разбивать на подзадачи, сопровождать вложенными документами и гиперссылками. В документации для обозначения задачи используется слово case, однако в релизе оно заменено более привычным task

Master Data Management, EDA, ESB, SOA: собираем все вместе

Реализация повторно используемых интерфейсов предполагает, что мы будем хотя бы чуть-чуть абстрагироваться от конкретных задач и требований сегодняшнего дня. Иначе интерфейсы нам придется переделывать постоянно. Повторю пример из комментариев к сообщению Как сделать хороший API? При разработке программного интерфейса к каталогу книг методы

 

getBookAuthor(…) и getBookPublisher(…)

выглядят вполне уместно. Однако проходит время и заказчик понимает, что первоначально придуманных свойств недостаточно. Появляются требования по получению новых параметров, например ISDN. В какой-то момент разработчику это надоедает, и он разрабатывает функцию

getBookProperty(authorID,…)

Выглядит уже лучше. Правда затем в ассортименте виртуального магазина к книгам могут добавиться компакт-диски и другие товары, у которых и автора нет и ISDN, зато есть другие свойства. В результате неизбежного рефакторинга книжки должны превратиться а item-ы, а исходная функция в

getItemProperty(itemID, propertyID,…)

Преимущества такого подхода достаточно очевидны. Впрочем, в дополнение к преимуществам появляются и определенные сложности. Одна из них состоит в необходимости разработки дополнительных функций для получения списка item-ов и списка их свойств. Причем перечни свойств элементов различных типов может не совпадать. Описание структуры данных принято выносить в мета-данные (meta-data management). Т.е. у нас должен появиться справочник, в который мы будем вносить эти данные и программные интерфейсы для чтения этих справочников из приложений. Вот мы и добрались до управления основными данными (master data management, нормативно-справочная информация) о котором говорили в сообщении Интерес к управлению данными возвращается Это станет особенно актуальным если информацию получать мы будем из нескольких разнородных приложений с различными программными интерфейсами. Кстати именно в этом случае нам понадобится ESB и управляемая событиями архитектура (Even-driven architecture) Может показаться, что я противоречу своим более ранним сообщениям. Однако, если разобраться чуть глубже, то станет понятно почему это не так (см. рисунок)

В каждом из унаследованных приложений свои структуры данных и свои программные интерфейсы (в одном книжки, в другом компакт-диски ). В каждом, в лучшем случае, свои справочники свойств или же тривиальный хардкод, что встречается чаще. Первое что нужно сделать – научить приложения уведомлять MDM-систему обо всех изменениях в справочниках (Event Driven стиль). В крайнем случае, можно наладить ETL процесс, который будет регулярно сканировать базу данных на предмет выявления изменений и отражать их в MDM. Для того чтоб получить перечень свойств книг или перечень свойств компакт-дисков, очевидно, не следует вызывать API унаследованных приложений, а следует обратиться к MDM системе. (Подробнее см. Gregor Hohp Programming Without a Call Stack – Event-driven Architectures) И в завершении картинки у нас появляется сервисная шина предприятия (ESB), которая берет на себя функции преобразования запросов из getItemProperty() в реализованный унаследованным приложением getBookAuthor(), а так же маршрутизации запросов между приложениям. Кроме того, ESB окажется полезным и при чтении MDM, например, для сокрытия задержек обновления данных в MDM, кеширования запросов и т.д. Сам процесс обновления данных в MDM системе можно и даже нужно реализовать в ESB, т.к. это позволит нам реализовать достаточно эффективные стратегии управления данными. Не стану углубляться в подробности, т.к. описание данных стратегий потребует некоторого погружения в описание архитектуры Web. Интересующихся отсылаю к диссертации изобретателя стиля RESTful Роя Филдинга (краткое введение в тему RESTful и Enterprise 2.0)

Интерес к управлению данными возвращается

В конце июля – начале августа этого года Gartner выпустил целую серию исследований посвященных управлению данным:

  • Hype Cycle for Data Management, 2011
  • Hype Cycle for Master Data Management, 2011
  • CIO Alert: You Need Information Professionals
  • и еще несколько статей

Интерес к теме управления данными у Gartner присутствовал всегда, но если раньше в исследованиях преобладали рассуждения о роли управления основными данными (master data management) для успеха SOA или BPM проектов, то сейчас тема данных стала вполне самодостаточной. На вершине пика завышенных ожиданий информационной архитектуры предприятия находится Semantic Web. Правда в мэйнстрим корпоративных информационных систем попадет он еще не скоро. О возможностях использования Semantic Mediawiki для отображения архитектуры предприятия я рассказывал некоторое время тому назад на заседании Клуба архитекторов Microsoft и на SOA мероприятии AHConference Архитектура предприятия в формате Semantic Web Подходят к пику ожиданий: Complex-Event Processing, Enterprise Taxonomy and Ontology Management (Таксономия и фолксономия), Data Services, Enterprisewide Metadata Repositories.

А вот Master Data Management покинул пик ожиданий и начал сползать в котлован разочарований. Т.е. интерес к MDM будет угасать, а недовольство высокой стоимостью MDM решений – расти. На мой взгляд, это совершенно несправедливо, т.к. практической пользы от MDM можно получить существенно больше, чем например от сервисов. Master Data Management — тема не очень новая и не очень сложная. Введение в тему можно почитать в статье Задачи управления мастер-данными Некоторое замешательство могут вызвать русскоязычные аналоги этого понятия «управление основными данными» и «нормативно-справочная информация». Но, в общем и целом большинству людей понятно, что речь идет о синхронизации справочников из различных информационных систем предприятия. Есть транзакционные данные, т.е. записи о конкретных операциях и есть справочники, на которые ссылаются транзакционные данные. Под мастер-данными (основными данными) и понимают справочники в широком смысле, т.е. существительные, отвечающие на вопросы «кто?» (клиенты, сотрудники, партнеры), «что?» (продукты, услуги), «где?» (адреса) и т.д. Наведение порядка в справочниках – задача скорее организационная, чем техническая. Впрочем, технические проблемы, являющиеся в данном случае прямым следствием организационно-политических причин,  присутствуют тоже

Что останется после ACM и BPMS?

Интерес к системам Business Process Management не может всегда оставаться на высоком уровне. Про термин adaptive case management через пару лет, вообще, никто не вспомнит. ACM и BPM освободят место новым трехбуквенным сокращениям, оставив после себя некоторое количество информационных систем. Хочется надеяться, что унаследованные приложения будут хоть в каком-то виде вписываться в новый корпоративный ИТ-ландшафт. Поэтому, есть смысл уже сейчас смотреть на те компоненты, которые присутствуют в системах обоих типов. Читать далее Что останется после ACM и BPMS?

Работа ИТ архитектора – создание хороших абстракций

bigВ сообщении Как сделать хороший API? я высказал предположение, что разработка повторно-используемых компонент (reusable component) достигается за счет разработки достаточно абстрактных методов, лишенных излишней конкретики, исходящей из текущей задачи. В комментариях к сообщению я привел примеры и получил некоторую критику. В действительности, абстрагирование, конечно же, необходимо не столько для построения хороших интерфейсов, сколько для построения хороших систем. Хороший интерфейс – это следствие хорошей объектной модели системы. Системы, имеющую ясную модель данных и одновременно допускающие её расширения посредством настроек пригодны для повторного использования и не требуят для этого дополнительных доработок. Системы сделанные «на злобу дня» таким свойством не обладают.

Если я правильно помню, то Гради Буч называл программы, разработанные по принципу «сели и начали писать», т.е. без предварительного продумывания (проектирования), зубочистками. Для однократного использования и такой метод сойдет. Для построения собачьей конуры необходимо немножко подумать, наверное, даже чертеж набросать. В спроектированную таким образом конуру вторую собаку мы вряд сумеем поселить, но построить еще один экземпляр собачьей конуры по своим наброскам сможем. А вот запрограммировать скворечник так уже вряд ли получится. Одним словом, подход «сели и начали писать» не подходит для корпоративных информационных систем. Чтобы создать повторно-используемую систему надо провести объектно-ориентированный анализ, разработать хорошую иерархию классов и только потом программировать.

Почему же разработчики корпоративных информационных систем, особенно заказных систем, так не делают? Отчасти ответ на этот вопрос дает Алистер Коберн обнаруживший, что людям больше свойственно заниматься изобретением чего-то нового, чем изучением уже существующего. Другую часть ответа мы найдем у Мартина Фаулера в книге «Архитектура корпоративных программных приложений». Значительная часть этой книге посвящена обсуждению того печального факта, что реляционные базы данных не реализуют механизмы наследования. Т.е. разработав иерархию классов, связанных отношением наследования, программист сталкивается с проблемой запихивания экземпляров этих классов в реляционную базу данных. В одних случаях для хранения экземпляров разных классов используется единая таблица, в других случаях – объекты разносятся по разным. Короче, разработчик предпочитает не заморачиваться объектно-ориентированным подходом и начинает не с создания робастой структуры классов, а с написания таблиц в базе данных. Через пару лет корпоративный ИТ ландшафт превращается в зоопарк редких и исчезающих систем. Я, не задумываясь, насчитаю в нашей компании несколько десятков систем, обрабатывающих разного рода заявки. Естественно, каждая из них реализуют для этого свою уникальную структуру данных, логику и уровень представления. Возможно, от разработчиков и не следует ожидать построения хороших абстракции и это задача, которую предварительно должен выполнить архитектор. Ушел подробнее разбираться в Domain-driven design, надеюсь вернуться оттуда с какими-либо ответами

Воспоминания о будущем BPMS

Несмотря на разгар лета и надвигающуюся пору отпусков тема Social BPM продолжает активно обсуждаться (см. например Social BPM Update). Мне нравятся идеи, объединяемые вокруг термина Social BPM. Я думаю, что довольно быстро они прорастут в инструмент и, что боле важно, в практики совместной работы бизнеса и ИТ по кастомиизации, реализации и улучшению бизнес-процессов. Но есть еще одно направление развития BPMS о котором я хочу рассказать.
Читать далее Воспоминания о будущем BPMS

Как сделать хороший API?

ArchimateAbstractВ предыдущем сообщении Event-driven architecture я позволил себе заметить, что сервисная шина (ESB) не является необходимым условием построения сервис-ориентированной архитекутры(SOA). О том, что сервисы должны предоставляться именно приложениями много говорят в SOA School Томаса Эрла, используя термин Intrinsic interoperability На занятиях мы довольно долго пытались его корректно перевести и, по-моему, остановились на «врожденной способностью к взаимодействию». Этот принцип, кстати, вошел в СОА-манифест в формулировке «Intrinsic interoperability over custom integration»
Одним словом, речь идет о том, что задача предоставления [ре]юзабильных повторно-используемых программных интерфейсов отводится именно бизнес-приложениям, а не интеграционной среде. (Под юзабилити я понимаю именно юзабилити, а не эргономику. Чем отличается одно от другого см. Юзабилити глазами архитектора)
Вопрос в том, как такие интерфейсы построить.

Вариант 1. Обнаружить стандарт, описывающий данную предметную область (домен). Я не говорю о стандартах вида WS-* они описывают совершенно другие вещи. Речь идет именно о стандартах CMIS, OSS/J и пр.
Вариант 2. Если стандартов нет, и все знания о предметной области локализованы в головах нескольких посвященных соответствующего тайного ордена, то интерфейс придется разрабатывать. И обычно это делается неправильно. Разработчик системы спрашивает, какие данные вам нужны и предоставляет что-то похожее на то, что вы попросили. В результате получаются хранимые процедуры типа:

СуммВырчкНаУтроGF-ЧудесСтрДураков(Кол-воЗолотых)

О повторном использовании таких сервисов говорить, разумеется, не приходится. Очевидный способ построения повторно-используемых интерфейсов – абстрагирование. Про абстрагирование сказано практически во всех работах по программной инженерии от «Программисткого камня» (рекомендую прочитать эту книжку целиком) до классических работ Г.Буча «Объектно-ориентированный анализ и проектирование», но сказано как-то не очень внятно. Поэтому, вопрос как построить хорошую объектную модель, а значит и reusable API остается открытым. Я тоже не знаю полного ответа на этот вопрос, но готов поделиться некоторыми частными, глубоко субъективными наблюдениями:

  • REST лучше чем SOAP, так как оперирует с данными, а не с поведением, а это всегда проще.
  • Референсные модели предметной области, по крайней мере такие, в которых нормальный человек может разобраться, имеют право на жизнь.
  • Что-то чуть более конкретное, чем «Object-Relations» (см. рисунок, предложенный разработчиками ArchiMate).
  • Семь плюс-минус две сущности. Для того, чтоб понять что такое, например WordPress, достаточно посмотреть на структуру его базы данных. В системах, написанных за деньги и на заказ разобраться в структуре данных практически нереально.
  • Классы предметной области и отношения между ними не должны присутствовать в сигнатурах методов. Они должны вести в справочниках, доступных через тот же самый API. Тогда интерфейс становится самоописанным.

Буду признателен за более внятные мысли на тему построения повторно-используемых интерфейсов.

Event-driven architecture

В 2006 году Gartner закрыл аналитическую группу, которая занималась управляемой событиями архитектурой (Event-driven architecture, EDA). Термин EDA предложил аналитик Gartner Roy W. Schulte тремя годами раньше в работе The Growing Role of Events in Enterprise Applications Обзор работы на русском языке можно посмотреть в статье EDA — архитектура, управляемая событиями До какого-то момента SOA и EDA в сознании аналитиков шли рука о руку (см., например 2.0 The Mission and Future of Integration), но потом управляемая событиями архитектура впала в немилость и была забыта. Может быть, концепция была слишком революционной, а может идея Complex event processing (CEP) отвлекла на себя основной внимание, но из-за задержки внедрения таких технологий как RFID ушла в тень, прихватив с собой и EDA, не важно. Для нас важно другое:

  • во-первых, в отличии от SOA, EDA – это действительно архитектура, т.е. определенный подход к построению информационной системы предприятия;
  • во-вторых, концепция управляемой событиями архитектуры объясняет, почему сегодня интерес к сервисной шине предприятия (ESB) опережает интерес к SOA (см. ссылки в сообщении Forrester: SOA жив и здоров)

Читать далее Event-driven architecture

Краткий обзор статистики посещений

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

Читать далее Краткий обзор статистики посещений