Назначение прогрева тайлового кеша
Любое изображение в геоинформационных системах (картах) формируется из набора изображений, называемого тайлами. Тайлы генерируются на сервере картографии согласно запроса в БД и примененных стилей. Это крайне ресурсоёмкий процесс. Для ускорения отображения карты и снижения нагрузки на сервер картографии применяется кеширование тайлов. Для того, чтобы тайл попал в кеш, его необходимо один раз сформировать. Формирование может производиться при непосредственной работе с картой - пользователи своими действиями формируют соответствующий кэш тайлов.. Другой способ создания кеша превентивный -автоматическийпрогрев кеша, при котором инициируется автоматический запрос тайлов участка карты, с учетом различных прав доступа, и все (или многие) тайлы участка карты окажутся в кеше до того, как карту откроет пользователь.
В ORBISmap при помощи менеджера скриптов возможно производить прогрев кеша непосредственно в системе администрирования. Подготовка структуры заданий Создание карты и слоя
Подготовка структуры заданий
Создание карты и слоя
Перед созданием заданий прогрева необходимо подготовить специальные карту и слой, в которых будут располагаться задания:
- Создать и опубликовать карту с кодом
system
, доступную только администраторам каталога - Создать в карте
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 тайла из целевой настроенной карты:
В таком виде его необходимо указывать в задании. После обработки примера 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 которого пустой или принадлежит данному скрипту (т.е. не обрабатывается в данным момент каким либо другим скриптом). Скрипт по очереди будет обрабатывать все свободные задания.
Запуск заданий
Для запуска обработки заданий необходимо предварительно создать скрипт из примера, подробнее про создание скриптов.
Отслеживание процесса обработки
Для отслеживания статуса и прогресса обработки заданий необходимо перейти в карту и отобразить объекты слоя с заданиями (system/cache_burner)
В таблице списка заданий отображаются общее и обработанное количество тайлов, признак обработки задания скриптом в данное время, статистика процесса обработки / статус завершения задания (время работы, средняя скорость обработки).
Рекомендации
- Разбивать участки прогрева и уровни масштаба при большой площади и большом диапазоне масштабов области прогрева карты.
- Не использовать много пользователей в одном задании.
- Следить за установленными количеством параллельных запросов.
- Использовать корректный размер метатайла.