Прогрев кэша (Cache Warming)
Про процесс
Под «прогревом» кэша в Qlik Sense Enterprise понимается программное открытие приложений Qlik, для того чтобы базовое приложение предварительно загрузилось в оперативную память, прежде чем пользователи попытаются открыть его. Когда пользователи открывают приложение Qlik и взаимодействуют с ним, происходит три типа кэширования. Это можно визуализировать на следующем примере:
(взято из Технического описания движка Qlik)
В этом примере типы обозначены цветами:
- Серый: кэш RAM базового приложения.
- Темно-зеленый: кэш сеанса пользователя.
- Светло-зеленый: кэш кэшированного набора результатов.
Кэш базового приложения является результатом того, что Движок Qlik открывает приложение Qlik с диска и распаковывает его в оперативную память. Этот процесс происходит, когда пользователь впервые открывает приложение (или если приложение открывается на новом движке) и должен ждать, пока приложение отобразится. Кэш сеанса пользователя – это метаданные сеанса пользователя с данным приложением. Сюда входят такие вещи, как текущий выбор и все предыдущие выборы. Этот кэш обычно довольно мал в процентном отношении, поскольку это чистые метаданные; например, такие как country=canada, а не расчеты, полученные в результате этого выбора. Кэш кэшированного набора результатов – это кэш вычислений, которые были произведены в результате выбора всех пользователей. Это будет что-то вроде Sum(Sales) или Count(DISTINCT ProductId), если пользователь выбрал country=canada.
Для многих развертываний Qlik Sense Enterprise администратор может захотеть сократить время, затрачиваемое на ожидание начальной загрузки приложения. Для этого необходимо запустить процесс прогрева кэша.
Частота прогрева кэша
Qlik Engine настроен на сохранение RAM базового приложения в течение определенного периода времени. По умолчанию этот период времени составляет 28,800 секунд (или 8 часов), но его можно настроить в QMC > Engines > Edit > Apps > App cache time (seconds)
:
Это означает, что администратору необходимо запланировать частоту прогрева кэша с учетом этой конфигурации. Есть два практически доступных варианта:
- Выполнить процесс прогрева кэша до того, как первые пользователи ожидаемо воспользуются приложением.
- Выполните процесс разогрева кэша с интервалом, меньшим, чем конфигурация App cache time (seconds)
Хотя эти два варианта можно комбинировать, совет по их использованию будет такой: вариант (1) идеально подходит для развертываний, в которых есть региональный доступ пользователей (например, только стандартные часовые пояса США или Европы) и/или есть дорогостоящие в вычислительном отношении перезагрузки пакетов, выполняемые во время выключения. часов, которые могут конфликтовать с процессом прогрева кэша. Вариант (2) идеально подходит для развертываний, которые должны обслуживать пользователей в нескольких часовых поясах.
Опции
Чтобы осуществить, прогрев кэша Qlik приложения, администратору необходимо запустить процесс, который может программно открыть приложение Qlik и, при необходимости, осуществить выборки. В этом руководстве описаны следующие варианты, позволяющие добиться такого результата:
Инструмент |
Технический подхо |
Сложность |
Гибкость |
---|---|---|---|
CacheInitializer |
.NET SDK |
Низкая |
Средняя/ Высокая |
Butler-Cache Warming |
JavaScript |
Низкая/ Средняя |
Средняя |
Qlik Sense Scalability Tools |
.NET SDK |
Средняя |
Высокая |
Инициализатор кэша (CacheInitializer)
CacheInitializer это проект, первоначально разработанный менеджером по продукту в Qlik, но с тех пор его взяла на себя команда America’s Presales Enterprise Architecture. Это проект, созданный на C# с использованием .NET SDK позволяет:
- открывать приложения
- (опционально) кэшировать визуализации на листах приложения
- (опционально) осуществить выборки
Это очень простой инструмент, который идеально подходит для начального знакомства с процессом прогрева кэша или для небольших сред, где ограничения этого инструмента не вызывают проблем.
Использование
Чтобы использовать инструмент CacheInitializer, его можно загрузить со страницы релизов проекта (или, при желании, загрузить исходные файлы и скомпилировать у себя в Visual Studio). Релиз будет включать в себя основной исполняемый файл и вспомогательные файлы для работы инструмента. Доступные параметры:
-s, --server Required. URL to the server. -a, --appname App to load (using app name) -i, --appid App to load (using app ID) -p, --proxy Virtual Proxy to use -o, --objects (Default: False) cycle through all sheets and objects -f, --field field to make selections in e.g Region -v, --values values to select e.g "France","Germany","Spain" --help Display this help screen.
Обязательными параметрами являются server и app (указывается по имени или ID). Опциональные параметры позволяют администратору указать виртуальный прокси (-p или --proxy), если проверка подлинности Windows не является виртуальным прокси без префиксов, откройте объекты на каждом листе в приложении (-o или --objects), осуществите выборки (-v или --values) для заданных полей (-f or --field).
Инструмент будет использовать проверку подлинности Windows, чтобы открыть приложение от имени пользователя, выполняющего процесс. Это означает, что если этот инструмент используется, администратор должен выполнять его в контексте выделенного пользователя, у которого есть назначенная ему лицензия и необходимые разрешения для открытия приложения с использованием правил безопасности (и section access, если он используется).
Примечание
Хотя параметры имеют как краткую, так и полную форму, в этом руководстве будут использоваться длинные формы для лучшего понимания.
Примечание
В этом руководстве для удобства будет использоваться --appname. Однако, рекомендуется использовать --appid, чтобы обеспечить точность открытия приложения.
Самый простой сценарий включает открытие приложения Qlik на указанном сервере для создания кэша Базового Приложения: CacheInitializer.exe --server https://qliksense.company.com --appname "Operations Monitor", инструмент выведет результат в виде:
02:27:54 - Operations Monitor: Opening app 02:27:55 - Operations Monitor: App open 02:27:55 - Operations Monitor: App cache completed 02:27:55 - Cache initialization complete. Total time: 00:00:07.3192225
Более сложный сценарий включает открытие приложения Qlik на указанном сервере и открытие всех визуализаций в приложении Qlik. Он создаст кэш Базового Приложения, а также заполнит кэш Кэшированных наборов результатов. Пример:
CacheInitializer.exe --server https://qliksense.company.com --appname "Operations Monitor" --objects, инструмент выведет результат в виде:
02:30:49 - Operations Monitor: Opening app 02:30:50 - Operations Monitor: App open 02:30:50 - Operations Monitor: Clearing Selections 02:30:50 - Operations Monitor: Getting sheets 02:30:50 - Operations Monitor: Number of sheets - 17, getting children 02:30:50 - Operations Monitor: Number of objects - 144, caching all objects 02:30:51 - Operations Monitor: Objects cached 02:30:51 - Operations Monitor: App cache completed 02:30:51 - Cache initialization complete. Total time: 00:00:06.5812126
Следующий пример объединит предыдущий пример с указанием конкретного виртуального прокси (с именем windows) и передачей выборок для кэша кэшированных наборов результатов. Пример:
CacheInitializer.exe --server https://qliksense.company.com --proxy windows --appname "Operations Monitor" --objects --field "App Name" --values "Operations Monitor","License Monitor" инструмент выведет результат в виде:
02:33:55 - Operations Monitor: Opening app 02:33:56 - Operations Monitor: App open 02:33:56 - Operations Monitor: Clearing Selections 02:33:56 - Operations Monitor: Applying Selection: App Name = Operations Monitor 02:33:56 - Operations Monitor: Getting sheets 02:33:56 - Operations Monitor: Number of sheets - 17, getting children 02:33:56 - Operations Monitor: Number of objects - 144, caching all objects 02:33:57 - Operations Monitor: Objects cached 02:33:57 - Operations Monitor: Clearing Selections 02:33:57 - Operations Monitor: Applying Selection: App Name = License Monitor 02:33:57 - Operations Monitor: Getting sheets 02:33:57 - Operations Monitor: Number of sheets - 17, getting children 02:33:57 - Operations Monitor: Number of objects - 144, caching all objects 02:33:57 - Operations Monitor: Objects cached 02:33:57 - Operations Monitor: App cache completed 02:33:57 - Cache initialization complete. Total time: 00:00:09.1996060
В этом последнем примере конкретное приложение открывается на нескольких узлах Движка Qlik (с использованием выделенных виртуальных прокси для каждого Движка) как без выборок, так и с определенными выборками:
# Функция для регистрации function Get-TimeStamp { return "[{0:MM/dd/yyyy} {0:HH:mm:ss}]" -f (Get-Date) } <# Добавить ведение журнала #> Set-Location $PSScriptRoot $logdir = $PSScriptRoot + '\logs' $logfile = $logdir + "\" + "CacheInitializer-Deploy-" + (Get-Date -Format yyyyMMdd) + ".log" if (!(Test-Path $logdir)){ New-Item -path $logdir -type directory | Out-Null } # Установить рабочий каталог Set-Location "C:\temp\CacheInitializer" # Задайте имя сервера Qlik Sense, на котором Qlik Proxy Service размещает виртуальные прокси $server = 'https://qliksense.company.com' <# Параметры CacheInitializer: -s, --server Обязательно. URL-адрес сервера. -a, --appname Приложение для загрузки (с использованием имени приложения) -i, --appid Приложение для загрузки (с использованием идентификатора приложения) -p, --proxy Виртуальный прокси для использования -o, --objects (по умолчанию: False) цикл по всем листам и объектам -f, --field поле для выбора, например, региона -v, --values значения для выбора, например, "Франция", "Германия", "Испания" --help Показать этот экран справки. #> # Определить префиксы виртуального прокси $vps = @( "02windows" , "03windows" , "04windows" ) # Определить приложение $appid = '40c69bba-1825-4109-985c-399af8e96e63' Write-Output "$(Get-TimeStamp): Begin Cache Warm for $($appid)" | Out-File -FilePath $logfile -Append # Перебрать каждый виртуальный прокси и выполнить CacheInitializer foreach ($vp in $vps) { Write-Output "$(Get-TimeStamp): Connecting to $($server) on $($vp)" | Out-File -FilePath $logfile -Append $results = '' $results = .\CacheInitializer.exe --server $($server) --proxy $vp --appid $appid --objects if ($results.count -gt 1) { Write-Output "Successfully cached $($appid) on $($vp)" | Out-File -FilePath $logfile -Append $results | Out-File -FilePath $logfile -Append } else { Write-Output "Cache Failure on $($vp) for $($appid) on $($vp)" | Out-File -FilePath $logfile -Append } # Пример передачи состояний выбора для данного поля и сопутствующих значений Write-Output "$(Get-TimeStamp): Connecting to $($server) on $($vp)" | Out-File -FilePath $logfile -Append $results = '' $results = .\CacheInitializer.exe --server $($server) --proxy $vp --appid $appid --objects --field "Country" --values "United States","Germany" if ($results.count -gt 1) { Write-Output "Successfully cached $($appid) on $($vp) with selections" | Out-File -FilePath $logfile -Append $results | Out-File -FilePath $logfile -Append } else { Write-Output "Cache Failure on $($vp) for $($appid) on $($vp) with selections" | Out-File -FilePath $logfile -Append }}
Результирующий файл журнала:
cacheinitializer_deploy.log
ОГРАНИЧЕНИЯ
- Согласованность (Concurrency): поскольку этот инструмент открывает приложения через сервис Qlik Proxy, пользователь, выполняющий процесс, будет ограничен 5 выполнениями за 5-минутный период. Это связано с ограничением количества параллельных сеансов, которые может использовать лицензия. Для большинства сценариев прогрева кэша это не является серьезной проблемой, хотя с этим ограничением можно столкнуться при первоначальном тестировании процесса.
- Несколько узлов (Multinode): если администратору необходимо открыть данное приложение на нескольких узлах Qlik Engine, ему потребуются отдельные виртуальные прокси-серверы с использованием аутентификации Windows, каждый из которых подключен к одному Qlik Engine. Это гарантирует, что приложение будет открыто на каждом узле Qlik Engine. Основываясь на указанном выше ограничении согласованности, это означает, что инструмент CacheInitializer сможет кэшировать заданное приложение только на 5 отдельных узлах Qlik Engine в течение 5-минутного периода. Если вы пытаетесь создать процесс прогрева кэша для нескольких приложений на нескольких движках, необходимо учитывать эти 5 различных ограничений сеанса.
Прогрев батлер кэша
Альтернативный проект, использующий NodeJS для взаимодействия с API-интерфейсами Qlik Engine, - это Butler-Cache Warming, разработанный Гораном Сандером (Göran Sander). Горан – консультант Qlik Luminary, который ранее работал с очень крупным клиентом Qlik, чтобы помочь развернуть Qlik в большом масштабе. Инструмент дает возможность:
- открывать приложения.
- циклически просматривайте листы, чтобы создавать кэш кэшированных наборов результатов.
- задавать расписание открытия приложений.
Инструмент взаимодействует с Qlik Engine через порт API Qlik Engine (4747) и использует внутреннюю учетную запись Qlik (sa_repository) для программного открытия приложений. Благодаря этому администратору не нужно будет учитывать назначение лицензий или разрешения правил безопасности. Для доступа к приложению с использованием sa_repository (или любой внутренней учетной записи) лицензия не требуется, поскольку ни один интерактивный пользователь не может использовать эти учетные записи. Аналогичным образом, правило безопасности по умолчанию ServiceAccount гарантирует, что внутренние учетные записи имеют необходимую авторизацию для доступа к любому приложению Qlik. Если используется section access, то потребуется модификация таблицы section access, чтобы включить INTERNAL\sa_repository с конфигурацией по умолчанию, присутствующей в Butler-Cache Warming.
Использование
Поскольку настройка этого инструмента описана на странице инструмента GitHub, в этом руководстве рассматривается только необходимая конфигурация верхнего уровня.
- Откройте командную строку: set NODE_ENV=production
-
Отредактируйте butler-cw-master\config\apps.yaml
- Введите соответствующий сервер или серверы
- Введите соответствующие GUID приложения
- Введите соответствующий график (каждые X единиц, например, каждые 5 минут, каждый 1 час)
- Отредактируйте butler-cw-master\config\production.yaml
- Установите соответствующий каталог журнала
-
Если нет, возьмите client.pem и client_key.pem из C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\.Local Certificates на одном из участников
- На сервере должен быть установлен NodeJS
- Настройте clientCertPath и clientCertKeyPath пути в production.yaml на путь, по которому находятся эти сертификаты
-
Если на одном из участников Qlik Sense Cluster, это работает:
-
cd C:\temp\butler-cw-master
- где это путь к проекту
- C:\Program Files\Qlik\Sense\ServiceDispatcher\Node\"node.exe index.js
-
cd C:\temp\butler-cw-master
- Если на другом сервере
-
cd C:\temp\butler-cw-master
- где это путь к проекту
- node index.js
- Если выполняется на одном из участников кластера Qlik Sense, переходите к выполнению.
- Выполнить в командной строке:
Пример файла yaml:
apps: - server: qlikserver02 appId: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 appDescription: Cache warm big app on Node02 appStepThroughSheets: true freq: every 5 hours - server: qlikserver03 appId: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 appDescription: Cache warm big app on Node03 appStepThroughSheets: true freq: every 5 hours - server: qlikserver04 appId: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 appDescription: Cache warm big app on Node04 appStepThroughSheets: true freq: every 5 hours - server: qlikserver02 appId: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d appDescription: Cache warm app with section access on Node02 appStepThroughSheets: true freq: every 5 minutes - server: qlikserver03 appId: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d appDescription: Cache warm app with section access on Node03 appStepThroughSheets: true freq: every 5 minutes - server: qlikserver04 appId: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d appDescription: Cache warm app with section access on Node04 appStepThroughSheets: true freq: every 5 minutes
И пример результата вывода:
C:\temp\butler-cw-master>"C:\Program Files\Qlik\Sense\ServiceDispatcher\Node\"node.exe index.js 2020-02-24T00:27:14.205Z info: Starting Qlik Sense cache warmer. 2020-02-24T00:27:15.601Z info: App loaded: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d 2020-02-24T00:27:15.631Z info: App bb5b386b-9bf5-4aaf-b946-3cceb7eb409d: Cached 1 visualizations on 1 sheets. 2020-02-24T00:27:15.700Z info: App loaded: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 2020-02-24T00:27:15.756Z info: App loaded: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d 2020-02-24T00:27:15.772Z info: App bb5b386b-9bf5-4aaf-b946-3cceb7eb409d: Cached 1 visualizations on 1 sheets. 2020-02-24T00:27:16.015Z info: App 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0: Cached 3 visualizations on 1 sheets. 2020-02-24T00:27:16.036Z info: App loaded: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 2020-02-24T00:27:16.179Z info: App loaded: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d 2020-02-24T00:27:16.195Z info: App bb5b386b-9bf5-4aaf-b946-3cceb7eb409d: Cached 1 visualizations on 1 sheets. 2020-02-24T00:27:16.393Z info: App 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0: Cached 3 visualizations on 1 sheets. 2020-02-24T00:29:21.126Z info: App loaded: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 2020-02-24T00:30:00.160Z info: App loaded: 4ebe6de0-ab6e-4c35-b6dd-70cc1c27ebe0 2020-02-24T00:30:00.385Z info: App loaded: bb5b386b-9bf5-4aaf-b946-3cceb7eb409d 2020-02-24T00:30:00.408Z info: App bb5b386b-9bf5-4aaf-b946-3cceb7eb409d: Cached 1 visualizations on 1 sheets.
ОГРАНИЧЕНИЯ
- Возможность подключения: поскольку этот инструмент напрямую взаимодействует со службами Qlik Engine Services, порт 4747 Qlik Engine API должен быть открыт между сервером, выполняющим Butler-CW, и узлами Qlik Sense. Основное преимущество этого подхода заключается в том, что ограничение сеанса, существующее для CacheInitializer и Qlik Sense Scalability Tools , не повлияет на Butler-CW
- Выборки: этот инструмент не может передавать выборки в приложение Qlik. Это означает, что кэш кэшированного набора результатов не будет сохранятся с выборками.
Инструменты масштабирования Qlik Sense
Последний проект, который мы рассмотрим в этом посте – это Qlik Sense Scalability Tools. Этот проект создан командой Qlik, которая занимается вопросами производительности и масштабируемости в рамках отдела исследований и разработок. Это – релиз с открытым исходным кодом одного из ключевых инструментов, который группа R&D Qlik использует для тестирования масштабируемости и производительности Qlik Sense Enterprise. Это – скомпилированный проект с использованием .NET SDK с возможностями:
- открывать приложения
- (опционально) кэшировать визуализации на листах приложения.
- (опционально) осуществление выборок
Хотя пакет Scalability Tools в основном используется для тестирования масштабирования приложений Qlik, он позволяет выполнять функции из командной строки, и это означает, что его можно использовать для операций по прогреву кэша. При использовании этого подхода администратор должен убедиться, что моделируемые пользователи имеют назначенную им лицензию и необходимые разрешения для открытия приложения с использованием правил безопасности (и section access, если используются).
ИСПОЛЬЗОВАНИЕ
После загрузки пакета администратору необходимо настроить начальное подключение (Youtube-видео при начальной настройке) и создать сценарий (Youtube-видео о создании теста), который описывает действия, которые моделируемый пользователь будет выполнять в приложении. В этом сценарии вы можете дополнительно передать выборки в контексте всего приложения или для каждого листа.
После успешного создания сценария. Администратор может выполнить сценарий через командную строку:
C:\scalabilitytools\SDKExerciser\Sep2018\SDKExerciserConsole.exe config="C:\scalabilitytools\Scenario\app1-cachewarm.json" configname="1-app1-cachewarm" server=qliksenseserver02 app="325c3daa-1aeb-434c-9c1d-c7ce14ee201a" ssl=True headername=X-Qlik-User virtualproxyprefix=header iterations=1 usernameprefix=CacheWarmUser concurrentusers=1 rampupdelay=2.00 executiontime=3600 instancenumber=1 appmode=Open newuserforeachiteration=True afteriterationwait=NoWait afteriterationwaittime=0 logDir="C:\scalabilitytools\Results\cachewarm"
В строке определены: сценарий для запуска (config), прокси-сервер Qlik для подключения к (server), виртуальный прокси-сервер на основе заголовка для аутентификации (virtualproxyprefix + его соответствующее headername), приложение, которое нужно открыть (app), и префикс пользователя (usernameprefix).
Ограничения
- Согласованность (Concurrency): поскольку этот инструмент открывает приложения через сервис Qlik Proxy, пользователь, выполняющий процесс, будет ограничен 5 выполнениями за 5-минутный период. Это связано с ограничением количества параллельных сеансов, которые может использовать лицензия. Для большинства сценариев прогрева кэша это не является серьезной проблемой, хотя с этим ограничением можно столкнуться при первоначальном тестировании процесса..
- Несколько узлов (Multinode): если администратору необходимо открыть данное приложение на нескольких узлах Qlik Engine, им потребуются отдельные виртуальные прокси-серверы с использованием аутентификации заголовков, каждый из которых подключен к одному Qlik Engine. Это гарантирует, что приложение будет открыто на каждом узле Qlik Engine. Основываясь на указанном выше ограничении согласованности, это означает, что Qlik Sense Scalability Tool сможет кэшировать только конкретное приложение на 5 отдельных узлах Qlik Engine в течение 5-минутного периода для каждого сценария. Если вы пытаетесь создать процесс прогрева кэша для нескольких приложений на нескольких механизмах, администратор может изменить параметр usernameprefix для эмуляции разных пользователей, чтобы избежать ограничения согласованности, указанного выше, за счет дополнительного потребления лицензии.
- Аутентификация: поскольку этот инструмент использует аутентификацию заголовка для имитации пользователей, рекомендуется присоединять виртуальные прокси-серверы заголовка только ко внутренним (back-end) узлам, которые не доступны пользователю. Аутентификация заголовка по своей сути небезопасна и поэтому может представлять угрозу безопасности для большинства организаций без разделения этой аутентификации на внутренние (back-end) узлы.