Настройка «внешней» очереди регистрации изменений на REDIS
В стандартной поставке Экстрактора 1С, в качестве хранилища списка «Очереди изменений» используется «Регистр сведений».
В некоторых случаях, может потребоваться вынос очереди изменений в внешний сервис:
Когда скорости записи в регистр сведений “Очередь изменений” не хватает
Когда Регистрация изменений выполняется в “Рабочей” базе 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С» и «реплика 1С» подключаются к одному сервису Redis
И «рабочая 1С» - сохраняет в Redis данные очереди изменений
А «реплика 1С» - эту очередь из Redis читает и исполняет в части выполнения проектов выгрузки Экстрактора 1С