Назначение прогрева тайлового кеша

Любое изображение в геоинформационных системах (картах) формируется из набора изображений, называемого тайлами. Тайлы генерируются на сервере картографии согласно запроса в БД и примененных стилей. Это крайне ресурсоёмкий процесс. Для ускорения отображения карты и снижения нагрузки на сервер картографии применяется кеширование тайлов. Для того, чтобы тайл попал в кеш, его необходимо один раз сформировать. Формирование может производиться при непосредственной работе с картой - пользователи своими действиями формируют соответствующий кэш тайлов.. Другой способ создания кеша превентивный -автоматическийпрогрев кеша, при котором инициируется автоматический запрос тайлов участка карты, с учетом различных прав доступа, и все (или многие) тайлы участка карты окажутся в кеше до того, как карту откроет пользователь.

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

В ORBISMap при помощи менеджера скриптов возможно производить прогрев кеша непосредственно в системе администрирования. Подготовка структуры заданий Создание карты и слоя

Подготовка структуры заданий

Создание карты и слоя

Перед созданием заданий прогрева необходимо подготовить специальные карту и слой, в которых будут располагаться задания:

  1. Создать и опубликовать карту с кодом system, доступную только администраторам каталога
  2. Создать в карте system слой с кодом cache_burner, также доступный только администраторам каталога.

Если по каким то причинам невозможно использовать указанные коды карты или слоя, то подходящие коды необходимо указать (заменить) в скрипте прогрева:

# месторасположение списка задач прогрева кеша
task_map_code = "system" # <- код карты
task_layer_code = "cache_burner" # <- код слоя

Структура слоя заданий

Структура слоя содержит поля со входными данными заданий и вспомогательные поля для отслеживания состояния выполнения заданий:

Название Код Тип Обязательность
Пример URL до тайла tile_url_example Строка Да
Bbox 4326 (mixX,minY,maxX,maxY) bbox_burn Строка Да
Диапазон масштабов (minZ-maxZ) z_range Строка Да
Список логинов (user1,user2,<пустой - public>) login_list Строка Нет
Всего тайлов для прогрева tile_url_example Число Нет
Обработано тайлов tiles_processed Число Нет
Метатайл (M,N) metatile Строка Да
Параллельных запросов concurrent Число Нет
Блокировка lock_id Строка Нет
Время обновления updated_a Дата Нет
Статистика stat Строка Нет
Завершено done Логический Нет
Примечание: Порядок следования полей в слое и наличие дополнительных полей не имеют значения. Описание и назначение полей структуры

Описание и назначение полей структуры

tile_url_example - пример URL одного из тайлов задания прогрева. Должен начинаться с http или https; значения координат (x,y,z) и наличие параметра token не имеют значения, так как будут генерироваться в процессе прогрева. Пример URL тайла можно получить, открыв настроенную целевую карту в браузере и скопировав URL одного из тайлов в средствах отладки браузера.

bbox_burn - область карты для прогрева тайлового кеша. Задается координатами в формате EPSG:4326 через запятую, в порядке <долгота нижнего левого угла>,<широта нижнего левого угла>,<долгота верхнего правого угла>,<широта верхнего правого угла> . Значения координат могут быть дробными с разделителем дробной части - точкой.

z_range - диапазон масштабов карты. Задается значением <минимальный масштаб>-<максимальный масштаб> . Минимальный не должен быть меньше 2, максимальный не должен быть больше 19. Допускается одинаковое значение минимального и максимального масштабов для прогрева области только одного масштаба.

login_list - список логинов пользователей через запятую для учета прав доступа при прогреве кеша. Незаполненный логин считается публичным пользователем карты.

tiles_total - заранее подсчитанное количество тайлов в области прогрева кеша с учетом масштабов и списка пользователей. Устанавливается автоматически скриптом обработки задания в начале его работы.

tiles_processed - количество тайлов, обработанное скриптом. Периодически автоматически обновляется скриптом в процессе прогрева. Значение может отличаться в большую сторону от tiles_total, так как при прогреве используется небольшой буфер формирования тайлов.

metatile - буфер формирования тайлов. Задается значением <кол-во тайлов по X>,<кол-во тайлов по Y>. Позволяется избежать запроса тайлов по каждой из координат, пропуская тайлы при проходе по сетке координат. Необходимое значение можно получить в соответствующих файлах конфигурации системы.

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

lock_id - вспомогательное поле идентификации скрипта прогрева. Заполняется автоматически скриптом, во избежания параллельной обработки этого же задания другим скриптом.

updated_at - время последней активности скрипта в процессе обработки задания. Периодически автоматически обновляется скриптом.

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

done - признак завершенности задания. Автоматически устанавливается скриптом в True после полного выполнения задания. Пример формирования данных задания


Пример формирования данных задания

Tile_url_example

Получение примера URL тайла из целевой настроенной карты:

https://demo.orbismap.com/tms/orbis/oms51/?layers=381,...&base=0&q=1&token=5450a842b77e39f13ca13bd4504ee0837022339d

В таком виде его необходимо указывать в задании. После обработки примера URL скриптом, он примет вид:

https://demo.orbismap.com/tms/orbis/oms51/?layers=381,...&x={x}&y={y}&z={z}&base=0&q=1

Bbox_burn

Получение области карты для прогрева тайлового кеша возможно через инструменты измерения расстояния в публичной карте, режим Координата:

Например, для выбора области Москвы в пределах МКАД, отметим точку нижнего левого угла (координаты 37.361755, 55.559709), затем точку верхнего правого угла (координаты 37.861633, 55.910734). Итоговое значение bbox_burn - 37.361755, 55.559709, 37.861633, 55.910734

Z_range

Определить масштаб можно с помощью инструмента изменения масштаба или через адресную строку браузера:

Минимальный и максимальный интересующий масштабы прогрева указываются через дефис, например 2-19 .

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

Login_list

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

,user1,user2

Интерпретируется как

<Публичный пользователь>,user1,user2 
Примечание: Список существующих пользователей доступен в Менеджере пользователей

Metatile

Размер метатайла необходимо уточнить у системного администратора. Если метатайл не используется, то значение устанавливать в 1,1 - обрабатывать каждый тайл без пропусков.

Concurrent

Количество параллельных запросов к тайлам необходимо уточнить у системного администратора, значение параметра устанавливается в <директория установки ORBISMap>/extern/tilecache/uwsgi.ini, параметр processes в секции [uwsgi]. Также стоит иметь ввиду, что при одновременном запуске обработки нескольких заданий стоит пропорционально уменьшать данный параметр. Условия обработки задания


Условия обработки задания

Во время запуска скрипт прогрева выбирает задание, done которого не установлен в True и lock_id которого пустой или принадлежит данному скрипту (т.е. не обрабатывается в данным момент каким либо другим скриптом). Скрипт по очереди будет обрабатывать все свободные задания.

Примечание: Если необходимо повторно запустить ранее завершенное задание, то необходимо отредактировать объект задания - выключить признак done (Завершено).

Запуск заданий

Для запуска обработки заданий необходимо предварительно создать скрипт из примера, подробнее про создание скриптов.

Примечание: Поле Расписание выполнения необходимо оставить пустым для запуска заданий вручную. При необходимости выполнять параллельно несколько заданий, возможно создать несколько скриптов на основе cache_burner.py.


Отслеживание процесса обработки

Для отслеживания статуса и прогресса обработки заданий необходимо перейти в карту и отобразить объекты слоя с заданиями (system/cache_burner)

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


Рекомендации