Добрый день, коллеги и им сочувствующие!
Сегодня мы поговорим о такой вещи, как кэш. Нет, не о деньгах, к сожалению. 🙂
Что такое cache?
Wikipedia сообщает:
Кэш или кеш (англ. cache, от фр. cacher — «прятать»; произносится [kæʃ] — «кэш») — промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше осуществляется быстрее, чем выборка исходных данных из более медленной памяти или удаленного источника, однако её объем существенно ограничен по сравнению с хранилищем исходных данных.
Есть такой стандартный индийский комментарий на любую проблему в SAP PI – “Обновите кэш”. И действительно, часто это помогает. Почему? Давайте разбираться.
Могу предположить, что когда разрабатывалась архитектура SAP PI, то перед разработчиками возникли две задачи:
- Разделить среду разработки и уже работающие интерфейсные объекты, позволить разработчику изменять интерфейс, не затрагивая его текущую продуктивную работу.
- Учитывая количество различных компонент SAP XI/PI – наладить взаимодействие между ними, с учетом производительности.
Скорее всего, тогда и появилась идея использовать “кэш” как промежуточное хранилище для используемых в работе интерфейса объектов.
Общая схема кэширования в PI выглядит следующим образом:
Как это работает?
Обновление кэш происходит автоматически при активации объекта(-ов) в ESR или Integration Directory; процесс обновления кэш также можно инициировать вручную.
При активации объекта Enterprise Service Repository PI происходит следующая цепочка действий:
- поиск всех связанных с ним объектов, которые также должны быть обновлены;
- служба извещения (Cache Refresh Notification Service) передает информацию о требуемом обновлении в Integration Directory;
- инициируется поиск всех связанных объектов в Integration Directory;
- служба извещения (Cache Refresh Notification Service) передает все необходимые объекты “потребителям” – различным кэш-механизмам в PI.
“Потребителями” обновления являются следующие кэш-механизмы:
- Mapping cache – здесь хранятся готовые (скомпилированные) программы преобразования;
- CPA cache – здесь хранятся все объекты разработки и настройки, необходимые для выполнения интерфейса в Advanced Adapter Engine;
- Integration Engine cache – здесь хранятся все объекты разработки и настройки, необходимые для выполнения интерфейса в Integration Engine; сюда также помещаются все объекты, необходимые для работы ccBPM;
- Business System cache – кэш подключенной бизнес-системы SAP (ABAP), там хранятся все необходимые интерфейсные объекты для работы proxy и web-service интерфейсов.
Помимо этой цепочки, существует еще SLD-кэш в ESR и Integration Directory:
- SLD-cache в ESR обновляется всякий раз, когда разработчик импортирует новый программный компонент.
- SLD-cache в ID обновляется тогда, когда разработчик импортирует бизнес-систему.
SLD-кэш также можно обновить принудительно.
Мониторинг и администрирование
В PI существует ряд инструментов для мониторинга состояния и содержимого кэш-механизмов, а также для ручного обновления.
Первый инструмент входит в состав инструментов администрирования, расположенных на стартовой странице PI:
Выбираем вкладку “Repository”, группу инструментов “Lock and Cache Administration”, инструмент “Java Virtual Machine Cache”.
Как видим, виртуальная машина имеет несколько различных кэш-механизмов. Нас, в частности интересует SLD cache. На данной странице мы можем принудительно обновить нужный кэш, нажав кнопку “Refresh Selected Caches”.
В этой же группе инструментов можно использовать “Data Cache”:
Здесь можно принудительно обновить CPACache и Mapping Cache. При переходе по ссылке “Refresh” напротив соответствующего кэш-механизма, будет открыта страница инструмента обновления.
Обновление CPACache имеет две опции: “Delta” и “Full”.
Delta-обновление пытается минимизировать время обновления и синхронизирует только те объекты, которые были изменены с момента последнего обновления. Опция “Full” проводит полную синхронизацию CPACache с репозитариями ESR и Integration Directory.
Скопировав URL вызова обновления CPAСache и Mapping Cache можно вызывать их напрямую. При вызове будут запрошены пользователь и пароль администратора.
На вкладке “Directory” присутствуют те же самые инструменты:
Вышеописанные инструменты эффективны, когда нужно быстро исключить ошибку кэш при выполнении интерфейсов. Для полноценного анализа или отлова ошибок этого недостаточно.
Более продвинутые инструменты можно найти в наборе “Configuration and Monitoring Home”, расположенном на той же начальной странице PI:
Заходим на http://<host>:<port>/dir и выбираем “Configuration and Monitoring Home” в правом нижнем углу.
Открывается следующий портал:
Выбираем в меню сверху страницы – кэш какой из частей PI мы хотим посмотреть: Integration Engine, Adapter Enginge, Business Process Engine или Mapping Runtime.
Выбираем “Cache Monitor” и наслаждаемся властью над всеми механизмами кэширования SAP PI:
Здесь можно посмотреть, что находится в кэш, синхронизировать отдельные объекты или весь кэш целиком.
Кэширование и разработка.
Для разработчика также созданы несколько полезных инструментов, с помощью которых можно мониторить и влиять на кэширование.
Откроем Enterprise Service Builder, выберем в меню “Environment”:
Пункт “Clear SLD Data Cache” позволяет сбросить все кэшированные объекты SLD, при следующем обращении объекты будут считаны заново.
Этот инструмент бывает полезен, когда в SLD создается новый программный компонент, а при попытке его импортировать в ESR в списке компонент его не видно.
Пункт меню “Cache Status Overview” вызывает монитор службы извещения об обновлении (Cache Refresh Notification Service).
Вот, например, в мониторе видно, что был активирован объект разработки и об этом изменении успешно был информирован Integration Directory:
Дальнейшую судьбу кэширования этого объекта можно отследить уже в Integration Directory. Запускаем Integration Builder, вызываем меню “Environment” -> “Cache Status Overview”:
В мониторе видно, что активированный объект был успешно передан “потребителям”: в кэш Integration Cache (ABAP) и в кэш Adapter Engine (J2EE).
В Integration Builder также можно очистить SLD Cache, который хранит список Business Systems, определенных в SLD.
После очистки, при первом вызове импорта бизнес-систем, список систем будет заново считан из SLD.
Кэширование в ABAP.
Чтобы посмотреть, что находится в кэш ABAP-части, используется транзакция SXI_CACHE. Ее можно использовать как в ABAP-части PI, так и в подключенной бизнес-системе на базе WebAS ABAP:
В меню также есть инструменты для дельта- и полного обновления кэш в ABAP-части:
Дополнительно по кэшированию можно почитать:
How to Handle XPI Caches in SAP NetWeaver 2004s (NW7.0)
Analyzing the Runtime Cache (help.sap.com, PI 7.4)
Runtime Caches (help.sap.com, NW 7.4)
Удачи в интеграции!
Ваш Pitroff.
Hi Pitroff,
I read your article on Bridges at SDN and I am really thankful to you for putting up a great article on the subject.
This one too is a really nice blog on Cache. (Though I had to translate the page into English to read) 😉
By any chance are you planning to publishing the “Overall caching scheme in the PI” diagram in english or Publishing this article on SDN(like you did for Bridges) so that many others can get benefit of understanding the concept? If so do let me know.
Thanks and Regards,
Jitender
Thanks a lot, Jitender!
Ok, I’ll put the translation of this article to my plans. )
But this wouldn’t be fast – have another job now.
Regards,
Alex
Surprisingly, but I’ve got some time and it was not so long as I expected. )
http://scn.sap.com/community/pi-and-soa-middleware/blog/2014/09/01/it-does-not-work-refresh-the-cache-architecture-and-caching-process-in-sap-pi-74