Настройка «внешней» очереди регистрации изменений на REDIS

В стандартной поставке Экстрактора 1С, в качестве хранилища списка «Очереди изменений» используется «Регистр сведений».

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

  1. Когда скорости записи в регистр сведений “Очередь изменений” не хватает

  2. Когда Регистрация изменений выполняется в “Рабочей” базе 1С, а выгрузка данных в БД-приемник должна делаться из “ночной копии” этой базы 1С

Так как у 1С нет нативного подключения к СУБД Redis, то мы сделали специальный прокси-сервис, которые транслирует команды Экстрактора 1С из/в 1С в/из Redis - “http-api-redis”:

Для работы http-api-redis требуется:

  • отдельная виртуальная машина на Linux, на которой разворачивается docker-образ http_api_redis

  • Установленный кластер Redis (конфигурируется Заказчиком исходя из его нагрузки и потребностей)

  • сетевая связность между Кластером 1С <→ http-api-redis <→ Redis

http-api-redis - это специализированное решение для Экстрактора 1С, позволяющее взаимодействовать 1С и Redis в любой операционной системе (именно по этому и выбран http-протокол).

Подключить «внешнюю» очередь регистрации изменений на REDIS можно в разделе «Настройки» Экстрактора 1С.

1

2

Общий принцип работы

Каждая работающая «Подписка на события» в 1С Экстрактора 1С делает серверный вызов через http-api-redis и формирует «ключ-значение» для комбинации:

  • Проект

  • Строка проекта

  • Партиция

  • И в “значение” пишет "набор “параметров” для выгрузки партиции

Что важно:

При использовании Redis и при использовании Регистра сведений используется режим “грязной” записи

Т.е. при записи в “Очередь изменений”, инициированного подпиской, система не проверяет дубли, а просто добавляет новую запись.

Все проверки на “дубли”, чистка их делается уже в процессе выгрузки (исполнения) Проекта

Это позволяет:

  • Избежать блокировок на Регистре сведений

  • Фиксировать события максимально быстро

Когда приходит время выгрузки Проекта в Экстракторе 1С, то Экстрактор 1С делает

  • выборку по маске GUIDПроекта*

  • получает текущий список изменений

  • “схлопывает” повторяющиеся значения

  • и по полученному списку выгружаемых “партиций” с “отборами” делает выгрузку

  • далее, из Redis успешно выгруженные записи

Используемые Экстрактором 1С - методы (внутри http-api-redis):

В htp-api-redis встроен Swagger, доступный по адресу: http://IP-адрес:Port/swagger/index.html

С помощью метода POST(/api/v1/Redis) мы передаем комбинацию:

  • В заголовке - ключ (составной ключ Guid проекта + СтрокаПроекта + Партиция + РандомныйХвост)

  • В Data - Набор параметров (в json/xml)

В результате в Redis записывается уникальная запись Ключ: Значение

Далее, когда Экстрактор 1С запускает Проект на выполнение, то Экстрактор 1С

а) сначала вычитывает накопленный ранее массив ключей по методу GET (/api/v1/Redis) по маске ключей: Ключ*

б) Перебирает все ключи, группирует их и обрабатывает как “Очередь изменений”

в) и потом удаляет обработанные ключи методом DELETE (/api/v1/Redis)

Есть еще следующий кейс (но учтите, что на больших базах он еще не проверялся. Сначала проверяйте на тестовых средах):

  1. Создается реплика базы 1С

  2. И «рабочая 1С» и «реплика 1С» подключаются к одному сервису Redis

  3. И «рабочая 1С» - сохраняет в Redis данные очереди изменений

  4. А «реплика 1С» - эту очередь из Redis читает и исполняет в части выполнения проектов выгрузки Экстрактора 1С