Разработка высокопроизводительного API-интерфейса для интеграции отчетов IBM Cognos с помощью технологии WebSphere DynaCacheИсточник: ibm
ВведениеСовременная экономическая ситуация в сфере API-интерфейсов характеризируется весьма активным применением API-интерфейсов в бизнес-решениях и в архитектурном проектировании. Тем не менее, качественным характеристикам API-интерфейса уделяется не слишком много внимания. Если вы серьезно относитесь к качеству своих бизнес-решений, то вам нужно не менее серьезно относиться и к масштабируемости, доступности, производительности и безопасности создаваемого вами API-интерфейса. Если говорить о производительности, то существуют сценарии, в которых API-интерфейсы могут интегрироваться со всеми типами источников данных/сервисов, и зависеть от серверного сервиса, время реакции которого может превышать несколько секунд. Этот серверный сервис может стать узким местом для API-интерфейса вашего клиента и, соответственно, оказать отрицательное воздействие на все бизнес-решение. Например, в сфере цифрового маркетинга насыщенный пользовательский интерфейс вызывает API-интерфейс, который извлекает данные из отчетов IBM Cognos. Вследствие высокой сложности процесса обработки данных, а также логики интеллектуализации бизнеса время исполнения может исчисляться минутами. По любым меркам это неприемлемо для конечного пользователя, взаимодействующего с критически важным для бизнеса приложениями. Возможно ли создание API-интерфейса, способного превзойти соответствующие серверные сервисы? Несомненно! Эту цель можно достичь путем применения технологии WebSphere DynaCache в конструкции API-интерфейса и создания возможностей многократного использования этого актива в аналогичных бизнес-сценариях в качестве высокопроизводительного API-интерфейса, интегрированного с медленными серверными сервисами. Обзор API-интерфейсов на основе REST для отчетов Cognos BIПродукт Cognos Business Intelligence (Cognos BI) способен создавать отчеты и анализировать данные из множества источников данных. Продукт Cognos BI состоит из множества компонентов. Компонент Cognos Report Studio предназначен для создания отчетов и их публикации на сервере Cognos BI. Пользователи могут обращаться к этим отчетам через порталы Cognos. Кроме того, Cognos BI позволяет обращаться к опубликованным отчетам программным способом - с помощью решения Cognos Mashup Service при посредстве протоколов REST и SOAP. Как показано на рис. 1, решение Cognos Mashup Service (CMS) предоставляет базовые возможности доступа для дистанционного "потребления" отчетов. Однако в случае востребованных бизнес-приложений, которые обслуживают тысячи пользователей, вам придется - в дополнение к базовому сервису, предоставляемому решением CMS в готовом виде - озаботиться такими аспектами, как доступность, масштабируемость и качество данных. Рисунок 1. Решение Cognos Mashup Service: обзор интерфейса
В следующих разделах мы покажем, как создать API-интерфейс для существующего отчета Cognos с использованием протокола REST. Каждый отчет, созданный в инструменте Cognos Report Studio, идентифицируется с помощью уникального имени, которое пользователь предоставляет именно с этой целью. Кроме того, инструмент Cognos Framework Manager генерирует для каждого отчета уникальный идентификатор, который также можно использовать для идентификации соответствующего отчета. Чтобы вызвать отчет, клиентскому приложению требуется такой уникальный маршрут поиска или уникальный идентификатор. Ниже показан пример структуры URL-адреса для вызова отчета с использованием имени отчета и его маршрута. http://webservername:portnumber/<cognos contextpath>/rds/reportData/path/<report name with the complete path>?reportOption1=value1&reportOption2 = value2&p_parameter1= value1&p_parameter2=val2... Ниже показан пример структуры URL-адреса для вызова отчета с использованием идентификатора отчета. http://webservername:portnumber/<cognos context path>/rds/reportData/report/<unique report id> ?reportOption1=value1&reportOption2 = value2&p_parameter1=value1&p_parameter2=val2... Отчеты могут иметь различные опции, например, Эта опция позволяет предоставлять результирующий отчет Cognos в формате XML, который содержит только данные отчета, но не содержит его разметку. Различные опции отчета описываются в документации по Cognos Mashup Service. Доступ к отчетам Cognos из Java-приложенияВ этом учебном пособии показано, как обратиться к отчету Cognos с помощью простого клиента HTTPClient без каких-либо зависимостей от SDK-комплекта Cognos в приложении. Тем не менее, SDK-комплект Cognos можно использовать для повышения управляемости и для сложных манипуляций. Для получения информации по использованию SDK-комплекта Cognos обратитесь к документации по Cognos. В листинге 1 показан пример приложения для вызова URL-адреса отчета Cognos с помощью библиотеки Apache HTTPClient. Листинг 1. Вызов отчета Cognos по HTTPHttpClient client = new HttpClient(); client.getHostConfiguration().setHost(<hostname>, <port number>, "http"); // Строки параметров - это параметры конкретного приложения, разделенные символом & String cognosReportUrl = http://webservername:portnumber/<cognos context path>/rds/reportData/report/<unique report id>?fmt=DataSet" + parameterString; GetMethod reportUrl = new GetMethod(cognosReportUrl); client.executeMethod(reportUrl); String xmlReturnString = getResponseBodyAsString(redirect.getResponseBodyAsStream()); reportUrl.releaseConnection(); Если сервер Cognos является защищенным, то вместо Учетные данные для входа в систему передают в виде XML-строки. Для получения дополнительной информации обратитесь к документации по Cognos Mashup Service. На рис. 2 показано взаимодействие API-клиентов с отчетами Cognos при наличии соединений с различными источниками данных. Рисунок 2. Интеграция приложения пользователя с данными из отчета Cognos
Использование инфраструктуры WebSphere DynaCacheИнфраструктура DynaCache - это сервис, поставляемый с продуктами WebSphere по умолчанию. Это облегченное решение кэширования для распределенных приложений, удовлетворяющее потребности заказчика в кэшировании. Сервис DynaCache исполняется на сервере приложений в JVM-машине ( Java™ Virtual Machine), перехватывая вызовы к кэшируемым объектам. Например, он перехватывает вызовы с помощью метода service сервлета или метода execute команды. Он сохраняет выходную информацию объекта в кэше или обслуживает контент объекта из динамического кэша. В этом учебном пособии мы будем кэшировать объекты с помощью файла В состав установочного пакета WebSphere входит монитор кэша по умолчанию в виде EAR-файла (Enterprise Application). В случае необходимости вы можете развернуть и сконфигурировать этот EAR-файл. Он предоставляет простой пользовательский интерфейс для мониторинга объектов кэша и инвалидизации объектов в кэше. На рис. 3 показан пример списка кэшированных объектов с их атрибутами в процессе исполнения, полученного с помощью инструмента WebSphere Cache Monitor. Обратитесь к документации по конфигурированию кэшируемых объектов относительно настройки динамического кэша с использованием файла Рисунок 3. Атрибуты кэшированных объектов в процессе исполнения, полученные с помощью инструмента Cache MonitorОбобщение вышеизложенного материалаТеперь вы можете извлекать данные из отчетов Cognos и интегрировать их со своим приложением. Следующая задача состоит в том, как повысить производительность. Во многих случаях отчеты Cognos базируются на результатах анализа, связанного с извлечением сложных данных из распределенных систем, поэтому для формирования такого отчета может потребоваться несколько минут. Если эти отчеты интегрируются в приложения, то столь долгое ожидание не будет способствовать улучшению взаимодействия с пользователем. В следующем разделе показано, как интегрировать отчет Cognos с приложением пользователя таким образом, чтобы существенно повысить скорость функционирования. В предыдущих разделах было показано, как интегрировать данные из отчетов Cognos в приложение пользователя. Кроме того, мы кратко рассмотрели технологию DynaCache, предлагаемую вместе в продуктами WebSphere. Динамическое кэширование очень эффективно для отчетов, формирование которых занимает много времени. В дополнение к регулярным API-сервисам по требованию, вы можете запланировать выбранные API-интерфейс для исполнения в "непиковые" периоды времени, чтобы заранее загрузить в динамический кэш эти требовательные и долго формирующиеся объекты отчета. Когда пользователь дает приложению указание загрузить данные из отчета, приложение ищет DynaCache и загружает контент из этого кэша, что позволяет мгновенно предоставить данные пользователю. Кэш можно настроить таким образом, чтобы он избавлялся от устаревших данных. На рис. 4 показано, каким образом DynaCache повышает производительность API-интерфейса Cognos. Рисунок 4. Повышение производительности приложения путем кэширования данных отчета с помощью WebSphere DynaCache
Чтобы инкапсулировать логику и вызвать отчет Cognos с помощью HTTP-клиента CognosReportHelper, создается POJO-объект. Затем реализуется класс CognosReportCacher, расширяющий класс После этого программный код приложения пользователя вызывает метод execute класса CognosReportCacher (рис. 5), который наследуется от класса Примечание. Примеры программного кода в этом учебном пособии показаны в качестве иллюстрации. Если вы собираетесь использовать этот код в своей производственной среде, рекомендуется произвести его дополнительную настройку и тестирование. Рисунок 5. Пример программного кода для класса CognosReportCacherРисунок 6. Пример программного кода для класса CognosReportHelper
В приложении пользователя вызов отчета Cognos осуществляется следующим образом (рис. 7). Рисунок 7. Пример программного кода для приложения пользователяНа рис. 8 показана диаграмма последовательности для примера программного кода. Рисунок 8. Диаграмма последовательности
В листинге 2 показано определение Листинг 2. Определение cachespec.xml<?xml version="1.0"?> <!DOCTYPE cache SYSTEM "cachespec.dtd"> <cache> <cache-entry> <class>command</class> <sharing-policy>not-shared</sharing-policy> <name>com.myservice.cognos.reports.CognosReportCacher</name> <cache-id> <component type="method" id="getReportKey"> <required>true</required> </component> <timeout>604800</timeout> <inactivity>604800</inactivity> </cache-id> </cache-entry> </cache>
Еще одно важное соображение при проектировании решения - это правило инвалидации кэша. Данное правило определяет, как должно завершаться существование кэшированных объектов, чтобы кэш обновлялся надлежащим образом. Управление этой задачей должно осуществляться в соответствии с требованиями бизнеса - в зависимости от частоты изменения источника данных и от того, насколько важной является синхронизация реакции API-интерфейс с источником данных. В этом примере источник данных обновляется один раз в неделю. Соответственно, применяется простое правило на основе таймаута кэша (604800). В более сложных сценариях можно осуществлять инвалидизацию кэш согласно правилам или спроектировать триггерные события для программной очистки кэша. Это имеет большое значение для высокопроизводительных API-интерфейсов, применяемых в производственной среде. Другими словами, вам следует сбалансировать высокую производительность и согласованность данных с потребностями своего бизнеса. Преимущества WebSphere eXtreme ScaleМеханизм DynaCache - это поставщик кэша по умолчанию, обеспечивающий базовые возможности динамического кэширования для ваших API-интерфейсов. Однако если вам требуются расширенные возможности, такие как транзакционная поддержка, улучшенная масштабируемость и высокая готовность, вы можете за дополнительную плату сконфигурировать в качестве поставщика кэша продукт WebSphere eXtreme Scale. Хорошая новость состоит в том, что для работы с технологией eXtreme Scale вам не нужно переписывать свой API-код. Достаточно выполнить следующие шаги.
ЗаключениеВ учебном пособие было показано, как интегрировать приложение с данными из существующего отчета Cognos с помощью решения Cognos Mashup Service при посредстве REST. Кроме того, было продемонстрировано кэширование данных отчета с использованием технологии WebSphere DynaCache с целью повышения производительности. Это решение можно распространить на другие сценарии интеграции с медленными серверными сервисами. Созданные конфигурации DynaCache можно по-прежнему использовать для аналогичных шаблонов интеграции вне зависимости от серверного сервиса. Для повышения емкости при кэшировании мы рекомендуем заменить механизм WebSphere DynaCache (поставщик кэша по умолчанию) на механизм WebSphere eXtreme Scale - в качестве поставщика подключаемого сервиса, что позволит избежать переписывания вашего API-кода при этой замене. |