Каталог решений - Копать с утра и до обеда.. или разбираем внутренний протокол 1С службы RAS (Часть первая)

Копать с утра и до обеда.. или разбираем внутренний протокол 1С службы RAS (Часть первая)

Копать с утра и до обеда.. или разбираем внутренний протокол 1С службы RAS (Часть первая)

В наличии

Для тех, кто любопытен, или есть потребность администрировать много серверов 1С.

Категория:

Описание

Для чего это нужно?

Потребность автоматизации процессов администрирования и мониторинга серверов 1С, а именно:

  • Мониторинг (снятие счетчиков, доступности и блокировки ИБ)
  • Добавление/удаление ИБ
  • Перемещение ИБ
  • Добавление рабочих серверов (настройка их по шаблону)
  • Блокировка и отключение сеансов/зависших соединений
  • Подсчет количества лицензий
  • И прочие рутинные действия

Как это сейчас работает?

Сейчас для автоматизации процессов администрирования серверов 1С используется следующие схемы работы:

  1. Служба `ras`  и клиент `rac`, а так же библиотеки обертки, которые парсят выхлоп клиента `rac` 
  • Пакеты для oscript:

— v8rac — реализация части функционала для управления серверами 1С

— irac — полноценная реализация управления серверами 1С

— hirac — HTTP интерфейс основанный на oscript.Web и пакете irac

  • Различные реализации от 1С  в типовых конфигурациях
  1. Com подключение — и различные обертки для него

Все эти инструменты требуют установленной 1С, что является их существенным недостатком.

В различных проектах используется “зоопарк” из этих решений и его поддержка занимает уже много времени, а переход на один из инструментов требует существенной доработки уже существующих механизмов и доработки самих инструментов, а самое главное не будет масштабируемым из-за общего недостатка всех этих решений, а именно требуется установленная 1С.

Что будем делать?

План решения задачи

  • Для начала предлагается сделать описание всех данных, которые необходимы для работы с серверами 1С. 
  • Научиться их сериализовать в формат RAS и читать из него, для прямого общения с 1С минуя прослойку в виде клиента `rac`, чем мы устраняем основной недостаток — установленная 1С. 
  • Реализовать единый интерфейс для всех автоматизаций по протоколу HTTP/gRPC с автоматической генерацией клиентов под любой язык программирования.

Например, для веб-сайта необходимо реализовать клиента на JS, для какой-то другой программы, возможно, потребуется требуется клиент на golang или C#, и все должно быть единообразно, клиенты под любой язык программирования должны создаваться с помощью кодогенерации на основе описания протокола RAS

  • Создать масштабируемый микросервис для решения задач администрирования и его быстрого развертывания в docker и kubernetes 

Как будем описывать формат данных

Для описания данных клиентов и серверов, а также данных получаемых от RAS предлагается использовать protobuf , как единый формат описания

Это позволит нам создавать клиентов (к RAS и/или нашему единому интерфейсу по протоколам HTTP/gRPC) под любые языки разработки с минимальными трудозатратами. C помощью плагина для генерации кодирования/декодирования в формат RAS все описанные форматы данных можно будет легко кодировать и декодировать для прямого общения с RAS. 

Немного специфики:

  • Сообщение (message) — в формате protobuf — это класс/структура в других языках. 
  • Для определения специфичности формата RAS мы будет использовать расширение данных сообщений, эти данные указаны как option или выделены в [ …. ] 

Описание формата данных RAS

На прямую формат данных описываться не будет, но будут указаны порядок сериализации и кодек который надо применить к тому или иному полю.

Эти данные можно использовать для кодирования в формат RAS в языках разработки.

Здесь будет приведены примеры для языка golang. (для java — можно взять из предоставленной 1С либы)

За основу разработки формата данных взята Java — либа от 1С, и переработана в Golang/protobuf. 

Схема работы клиента RAS

В статье будет рассмотрена следующая общая схема работы клиента RAS

Подготовка данных для сериализации в формат RAS

Для начала необходимо понять, что все сообщения к RAS и при получении ответа упакованы в специальный пакет данных. Для его описания мы создадим сообщение `packet`

Для декодирования нам необходимо ввести две дополнительные опции:

  • type_field — указание на номер поля в котором содержится тип данных

  • size_field — поле в котором указан размер данных для поля с типом bytes

Packet

Структура данных:

Название

Тип

Порядок
(order)

Кодек
(encode)

Описание

type

PacketType

1

byte

Определяет тип посылаемого пакета, задается в виде перечисления PacketType

size

int32

2

size

Задает размер получаемых и передаваемых данных в пакете

data

bytes

3

bytes

Данные передаваемые в пакете

has been added to your cart:
Оформление заказа