Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версия | |||
dpi:dpi_components:mediaserver:ccu [2020/09/21 07:14] – ↷ Страница перемещена из dpi:dpi_options:dpi_divert_spec:star:dpi:dpi_components:mediaserver:ccu в dpi:dpi_components:mediaserver:ccu lexx26 | dpi:dpi_components:mediaserver:ccu [2024/09/26 15:29] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Утилита управления КЭШем ====== | ====== Утилита управления КЭШем ====== | ||
+ | {{indexmenu_n> | ||
+ | CCU - Cache Control Utility | ||
+ | Утилита предназначена для загрузки данных в КЭШ, управления содержимым КЭШа, а также сбора статистики. Утилита поддерживает гибкую конфигурацию, | ||
+ | |||
+ | ===== CCU Конфигурация ===== | ||
+ | |||
+ | Основным файлом конфигурации является файл // | ||
+ | |||
+ | ===== Формат YAML ===== | ||
+ | Базовыми элементами формата [[https:// | ||
+ | * пара " | ||
+ | * последовательность значений, | ||
+ | |||
+ | На основе базовых элементов возможно создавать сложные структуры данных. | ||
+ | |||
+ | Одним из принципов для описания сложных структур заложенных в формат [[https:// | ||
+ | <code bash> | ||
+ | # | ||
+ | # Time classes | ||
+ | time_classes: | ||
+ | default: | ||
+ | # All others items define the names of time classes and rules for them definition | ||
+ | # Each rule is started from the name of day category and contains | ||
+ | # the list of ranges of times in form " | ||
+ | |||
+ | peak: | ||
+ | workdays: | ||
+ | - " | ||
+ | - " | ||
+ | weekend_eve: | ||
+ | - " | ||
+ | - " | ||
+ | weekend: | ||
+ | - " | ||
+ | - " | ||
+ | holidays: | ||
+ | - " | ||
+ | - " | ||
+ | </ | ||
+ | |||
+ | можно трактовать как структуру данных '' | ||
+ | |||
+ | Учитывая выше сказанное, | ||
+ | |||
+ | ===== Соглашения при описании параметров ===== | ||
+ | * Для задания имени конкретного поля в сложной вложенной структуре используется полное имя поля, которое представляет собой перечисление всех имен полей, разделенных косой чертой, | ||
+ | * Для задания имени элемента, | ||
+ | * Если не оговаривается особым образом, | ||
+ | |||
+ | ===== Параметры ===== | ||
+ | ==== Рабочие каталоги ==== | ||
+ | Следующие два параметра задают каталоги, | ||
+ | <code bash> | ||
+ | # | ||
+ | # PID files path, default: / | ||
+ | pid_files_path: | ||
+ | |||
+ | # | ||
+ | # Work files directory, default: / | ||
+ | work_files_path: | ||
+ | </ | ||
+ | |||
+ | ==== События ==== | ||
+ | По возникновению определенных событий **ccu** может выполнять действия заданные пользователем. Действия для выполнения необходимо задавать в соответствии с правилами интерпретатора командной строки.\\ | ||
+ | В настоящее время поддерживается только одно событие - создание текстового файла, содержащего информацию об объектах, | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Events | ||
+ | events: | ||
+ | # Command which should be executed after caches' | ||
+ | on_after_enumeration_creation: | ||
+ | </ | ||
+ | |||
+ | ==== Журналирование ==== | ||
+ | Параметры журналирования включают в себя путь к файлам журналов, | ||
+ | Уровни журналирования задаются отдельно для каждой команды **ccu**. | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Logging parameters | ||
+ | logging: | ||
+ | path: / | ||
+ | levels: | ||
+ | # Possible levels are: | ||
+ | # | ||
+ | # default logging level is " | ||
+ | load: " | ||
+ | purge: | ||
+ | remove: | ||
+ | online: | ||
+ | monitor: | ||
+ | </ | ||
+ | |||
+ | ==== Сбор статистики ==== | ||
+ | Поля параметра '' | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Statistics parameters | ||
+ | statistics: | ||
+ | collectors: | ||
+ | local: | ||
+ | host: | ||
+ | port: | ||
+ | </ | ||
+ | |||
+ | ==== Категории дней и классы времени ==== | ||
+ | Категории дней и классы времени используются для задания правил ограничения по загрузки данных в КЭШи. | ||
+ | Для того, чтобы задать категорию дня необходимо создать параметр '' | ||
+ | Элементом списка дней может быть название дня недели, | ||
+ | При определении категории дня для конкретной даты происходит просмотр в первую очередь более частных определений, | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Day categories | ||
+ | day_categories: | ||
+ | # Items under " | ||
+ | # To define the day categorie it is necessary to specify list of values, | ||
+ | # value can be one of following: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | workdays: | ||
+ | weekend_eve: | ||
+ | weekend: | ||
+ | |||
+ | holidays: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | </ | ||
+ | |||
+ | Классы времени делят день определенной категории на интервалы времени. Для задания класса времени необходимо создать параметр '' | ||
+ | \\ | ||
+ | В приведенном ниже примере задан класс времени '' | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Time classes | ||
+ | time_classes: | ||
+ | default: | ||
+ | # All others items define the names of time classes and rules for them definition | ||
+ | # Each rule is started from the name of day categorie and contains | ||
+ | # the list of ranges of times in form " | ||
+ | |||
+ | peak: | ||
+ | workdays: | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | weekend_eve: | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | weekend: | ||
+ | - " | ||
+ | - " | ||
+ | |||
+ | holidays: | ||
+ | - " | ||
+ | - " | ||
+ | </ | ||
+ | ==== Задачи ==== | ||
+ | Параметры задач задаются как вложенные структуры параметра '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Далее, при описании, | ||
+ | |||
+ | === Мониторинг === | ||
+ | Для задачи мониторинга необходимо задать параметры для входящего соединения ('' | ||
+ | \\ | ||
+ | Другими словами параметр '' | ||
+ | \\ | ||
+ | Задача мониторинга помимо сбора статистики процессов работающих с КЭШем, также осуществляет сбор системной информации по сетевым интерфейсам. Для того, чтобы ограничить список сетевых интерфейсов, | ||
+ | |||
+ | <code bash> | ||
+ | monitor: | ||
+ | listener: | ||
+ | # incoming/ | ||
+ | host: | ||
+ | port: 1600 | ||
+ | |||
+ | network_interfaces: | ||
+ | # incoming/ | ||
+ | # if list is empty, all interfaces except " | ||
+ | - | ||
+ | </ | ||
+ | |||
+ | === Загрузка === | ||
+ | Параметры загрузки разделяются на общие, которые задаются как поля параметра '' | ||
+ | |||
+ | **Общие параметры загрузки**: | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | ip_binding: | ||
+ | # to binding while loading | ||
+ | - | ||
+ | |||
+ | ignored_clients: | ||
+ | # list could be defined internally into configuration file as list of CIDRs | ||
+ | # under key " | ||
+ | # if list is defined externally in file, each line that file must contain | ||
+ | # only one CIDR | ||
+ | cidr_list: | ||
+ | - | ||
+ | cidr_files: | ||
+ | - | ||
+ | |||
+ | rate_limits: | ||
+ | # value can be one of following: | ||
+ | # | ||
+ | # | ||
+ | offpeak: | ||
+ | peak: 1m | ||
+ | | ||
+ | # ... skipping ... | ||
+ | </ | ||
+ | |||
+ | Параметр '' | ||
+ | \\ | ||
+ | Параметр '' | ||
+ | \\ | ||
+ | Параметр '' | ||
+ | |||
+ | **Параметры offline-загрузки**: | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | # ... skipping ... | ||
+ | offline: | ||
+ | parallel_workers: | ||
+ | job_awaiting_time: | ||
+ | # if after this time no one job is in the queue, | ||
+ | # worker finishes its execution | ||
+ | </ | ||
+ | |||
+ | Параметры online-загрузки можно разделить на следующие логические группы: | ||
+ | * Описания источников IPFIX потока | ||
+ | * Описание процессов анализа входного IPFIX потока | ||
+ | * Описание коллекторов запрашиваемых объектов | ||
+ | * Описание процессов загрузки данных | ||
+ | |||
+ | Описания источников IPFIX потока задается в структуре '' | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | online: | ||
+ | exporters: | ||
+ | main: | ||
+ | queue_size: 1000 # optional, max number of messages from exporter which is sent to analyzing queue, | ||
+ | # must be between 1 and 100000, default: 1000 | ||
+ | |||
+ | host: | ||
+ | port: | ||
+ | protocol: | ||
+ | |||
+ | information_elements: | ||
+ | # names are reserved, values must be in form " | ||
+ | timestamp: | ||
+ | host: " | ||
+ | path: " | ||
+ | login: | ||
+ | source_ip4: | ||
+ | destination_ip4: | ||
+ | referal: | ||
+ | user_agent: | ||
+ | cookie: | ||
+ | |||
+ | # ... skipping ... | ||
+ | </ | ||
+ | |||
+ | Для создания описания источника IPFIX потока необходимо создать структуру '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Описание процессов анализа входного IPFIX потока задается в структуре '' | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | online: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | analyzing: | ||
+ | # and binding URLs getting from exporters to cache' | ||
+ | # each analyzzng process sends valid URLs to collection queue | ||
+ | parallel_workers: | ||
+ | queue_size: | ||
+ | # which is sent to collecting queue, must be between 1 and 100000, | ||
+ | # default: 1000 | ||
+ | |||
+ | # ... skipping ... | ||
+ | </ | ||
+ | |||
+ | При задании параметров анализаторов следует в первую очередь обратить внимание на параметр '' | ||
+ | |||
+ | Описание коллекторов запрашиваемых объектов задается в структуре '' | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | online: | ||
+ | # ... skipping ... | ||
+ | |||
+ | collectors: | ||
+ | default: | ||
+ | # and distributes them into time windows | ||
+ | # each event could hit no more than 1 window according to event' | ||
+ | # the time window is a period of time which defines interval of time in the past | ||
+ | # it is possible to have many time windows, in this case each window is | ||
+ | # connected to previous one | ||
+ | |||
+ | slots: | ||
+ | window: | ||
+ | |||
+ | week_by_4_hours: | ||
+ | slots: | ||
+ | window: | ||
+ | |||
+ | # ... skipping ... | ||
+ | </ | ||
+ | |||
+ | Коллектор запрашиваемых объектов является основным фактором для принятия решения о старте загрузки объекта. Логически коллектор представляет собой набор счетчиков в скользящих интервалах времени в прошлом от настоящего момента. При запросе объекта, | ||
+ | \\ | ||
+ | Для того, чтобы создать описание коллектора, | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | В приведенном выше примере описано два коллектора: | ||
+ | |||
+ | Описание процессов загрузки данных задается в структуре '' | ||
+ | <code bash> | ||
+ | # | ||
+ | # Load jobs parameters | ||
+ | load: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | online: | ||
+ | # ... skipping ... | ||
+ | |||
+ | loading: | ||
+ | parallel_workers: | ||
+ | queue_size: | ||
+ | # which is sent to loading queue, must be between " | ||
+ | # default: 100 | ||
+ | unbuffered_queue_size: | ||
+ | # collecting process will put into loading queue immediately. The messages will be buffered | ||
+ | # and ordered before puting into loading queue according to URLs' weight; | ||
+ | # must be between 0 and " | ||
+ | |||
+ | # ... skipping ... | ||
+ | </ | ||
+ | |||
+ | При задании параметров процессов загрузки следует обратить внимание на количество параллельных процессов. Не следует значительно увеличивать размер очереди (параметр '' | ||
+ | |||
+ | === Сканирование === | ||
+ | Сканирование - это вспомогательная задача, | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Scannig jobs parameters | ||
+ | scan: | ||
+ | workers: | ||
+ | # each scanning process sends information about found items to scanning queue | ||
+ | parallel_workers: | ||
+ | job_queue_size: | ||
+ | # default: 5000 | ||
+ | result_queue_size: | ||
+ | # which are sent to result scanning queue, must be between 1000 and 1000000, | ||
+ | # default: 100000 | ||
+ | </ | ||
+ | |||
+ | Среди функций, | ||
+ | * начальное сканирование каталогов при старте процесса загрузки или удаления старых объектов; | ||
+ | * проверка времени жизни объекта в КЭШе и при необходимости удаление его; | ||
+ | * удаление объектов по запросу от управляющего процесса; | ||
+ | * проверка соответствия хранимого в КЭШе объекта его оригиналу; | ||
+ | |||
+ | ==== Хранилище ==== | ||
+ | Параметры хранилища задаются как поля параметра '' | ||
+ | * общие характеристики хранилища - структура '' | ||
+ | * описание параметров КЭШей - структура '' | ||
+ | |||
+ | Общие параметры задают путь к корню хранилища, | ||
+ | <code bash> | ||
+ | storage_parameters: | ||
+ | general: | ||
+ | path: "/ | ||
+ | max_size: | ||
+ | # maximum data size for all caches, possible suffixes are: | ||
+ | # Kb, Mb, Gb, Tb, Pb or without trailing " | ||
+ | </ | ||
+ | |||
+ | Параметры определенного КЭШа задаются как структура '' | ||
+ | <code bash> | ||
+ | storage_parameters: | ||
+ | # ... skipping ... | ||
+ | | ||
+ | caches: | ||
+ | youtube.com: | ||
+ | is_enabled: | ||
+ | # will not be used for loading data | ||
+ | |||
+ | # ... skipping ... | ||
+ | </ | ||
+ | задает [[# | ||
+ | |||
+ | === Описание КЭШа === | ||
+ | При описании параметров КЭШа в этом разделе имена параметров будут базироваться на параметре '' | ||
+ | \\ | ||
+ | Параметр '' | ||
+ | |||
+ | == Статистика == | ||
+ | Параметры статистики для КЭШа задаются в структуре '' | ||
+ | <code bash> | ||
+ | statistics: | ||
+ | group: | ||
+ | # all statistics in the same group is aggregated together | ||
+ | collector: | ||
+ | </ | ||
+ | |||
+ | Параметр '' | ||
+ | |||
+ | == Online-работа == | ||
+ | Для online-загрузки необходимо задать следующие параметры: | ||
+ | <code bash> | ||
+ | online: | ||
+ | collector: | ||
+ | # for online processing | ||
+ | validating: | ||
+ | interval: | ||
+ | # could be used only for caches with " | ||
+ | </ | ||
+ | |||
+ | Параметр '' | ||
+ | |||
+ | == Загрузка == | ||
+ | Для задания правил загрузки используются следующие параметры: | ||
+ | <code bash> | ||
+ | loading: | ||
+ | algorithm: | ||
+ | required_weight: | ||
+ | |||
+ | urls: | ||
+ | matching: | ||
+ | # - the " | ||
+ | # - the " | ||
+ | # | ||
+ | # - the " | ||
+ | # all items under " | ||
+ | # the " | ||
+ | # the sources URLs will not be rewritten. | ||
+ | # it is necessary to have at least one URL in sources. | ||
+ | # It is possible to use in the key and target' | ||
+ | # See RE syntax on https:// | ||
+ | |||
+ | - | ||
+ | weight: | ||
+ | sources: | ||
+ | - ' | ||
+ | - ' | ||
+ | |||
+ | ignoring: | ||
+ | - # default: all matched with matching parameters URLs will be processed | ||
+ | |||
+ | loadable_rejecting: | ||
+ | # which is obtained according to particular URL | ||
+ | # default: all " | ||
+ | # See RE syntax on https:// | ||
+ | |||
+ | - " | ||
+ | </ | ||
+ | |||
+ | * Параметр '' | ||
+ | * // | ||
+ | * // | ||
+ | * //vk.com// - загрузка видео файлов с vk.com; | ||
+ | * //general// - общий алгоритм загрузки по исходному URL; | ||
+ | * Параметр '' | ||
+ | * Параметр '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | | ||
+ | * Параметр '' | ||
+ | * Параметр '' | ||
+ | |||
+ | == Xранение == | ||
+ | Для задания правил хранения объектов используются следующие параметры: | ||
+ | <code bash> | ||
+ | storage: | ||
+ | path: " | ||
+ | levels: | ||
+ | # of md5 sum of file name | ||
+ | # possible values: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | max_size: | ||
+ | # maximum data size, possible suffixes are: | ||
+ | # Kb, Mb, Gb, Tb, Pb or without trailing " | ||
+ | expiry_time: | ||
+ | # default in seconds (without suffix) | ||
+ | # possible suffixes are: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | * Параметр '' | ||
+ | * Параметр '' | ||
+ | * Параметр '' | ||
+ | * Параметр '' | ||
+ | |||
+ | == Ограничения == | ||
+ | Для объектов КЭШа возможно задать ограничения, | ||
+ | <code bash> | ||
+ | constraints: | ||
+ | min_file_size: | ||
+ | # Kb, Mb, Gb, Tb, Pb or without trailing " | ||
+ | max_file_size: | ||
+ | # Kb, Mb, Gb, Tb, Pb or without trailing " | ||
+ | |||
+ | # optional, command which should be executed after file loading; | ||
+ | # if command returns non-zero result, the loaded file will be assumed as invalid an will be removed; | ||
+ | # the next variables could be used in the command: | ||
+ | # | ||
+ | # | ||
+ | post_load_validation: | ||
+ | </ | ||
+ | |||
+ | ==== SSD-Кэширование ===== | ||
+ | Существует возможность организовать КЭШ-ирование наиболее часто запрашиваемых объектов хранилища на SSD, для этого необходимо определить параметры: | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # SSD caching parameters | ||
+ | ssd_caching: | ||
+ | is_enabled: | ||
+ | path: "/ | ||
+ | # NOTES: | ||
+ | # - to SSD caching you have to mount SSD on specified path (or create link / | ||
+ | # - changes this parameter should be performed in cooperation with changes in web server configuration | ||
+ | # (it is recomended do not change this parameter) | ||
+ | max_size: | ||
+ | # Kb, Mb, Gb, Tb, Pb or without trailing " | ||
+ | required_weight: | ||
+ | |||
+ | uri_prefixes: | ||
+ | ssd_cache_requests: | ||
+ | main_storage_requests: | ||
+ | |||
+ | frozen_time: | ||
+ | # file cannot be replaced by another one, default: 3 * collecting window | ||
+ | # frozen time cannot be less than collecting window | ||
+ | |||
+ | collector: | ||
+ | # and distributes them into time windows | ||
+ | slots: | ||
+ | window: | ||
+ | |||
+ | workers: | ||
+ | # each process sends information about found items to result queue | ||
+ | parallel_workers: | ||
+ | job_queue_size: | ||
+ | # default: 5000 | ||
+ | result_queue_size: | ||
+ | # which is sent to result queue, must be between 1000 and 1000000, | ||
+ | # default: 100000 | ||
+ | </ | ||
+ | |||
+ | При задании параметров следует обратить внимание на количество рабочих процессов и параметры коллектора. | ||
+ | |||
+ | ===== Начальная конфигурация ===== | ||
+ | При установке **ccu** создается файл шаблона конфигурации - // | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' |