Интеграция с Сервисом межкластерной индексации#

О документе#

В документе приведено описание интеграции продукта Platform V DataSpace (APT) с компонентом Сервис межкластерной индексации (CCIX) продукта Platform V BackEnd (#BD).

Расшифровку основных понятий см. в документе "Термины и определения".

Введение#

Цели интеграции с компонентом Сервис межкластерной индексации продукта Platform V BackEnd (#BD) — обеспечить горизонтальное масштабирование приложений.

Сервис межкластерной индексации обеспечивает управление данными, необходимыми для реализации горизонтального масштабирования Платформы. Более подробную информацию можно получить в документации самого сервиса.

Настройка DataSpace для записи в Сервис межкластерной индексации#

Сервис межкластерной индексации позволяет централизованно использовать данные, находящиеся в разных зональных хранилищах.

Сервис межкластерной индексации можно разметить в описании модели (файле model.xml) следующими способами:

  • Если индекс состоит из одного поля, необходимо добавить атрибут cci-index="true" к полю (property) или внешней ссылке (reference) класса:

<class name="MyCCIEntity" label="Сущность с cci индексами">
    ...
    <property name="cciProduct" type="String" cci-index="true"/>
    <reference name="myCciReference" type="Animal" cci-index="true"/>
    <reference name="actualOperation" type="PerformedOperation" label="Операция" cci-index="true"/>
    ...
</class>
  • Если индекс составной, необходимо добавить тег <cci-index> и внутри тега перечислить входящие в индекс поля. Поля, входящие в состав cci-индекса, становятся обязательными.

<cci-index name="my_cci_index">
    <property name="id"/>
    <property name="name"/>
</cci-index>

Спецификация#

С межзональными индексами нельзя производить следующие действия:

  • Создавать пустые (не содержащие ни одного поля) индексы.

  • Указывать не существующие в классе свойства.

  • Использовать неподходящие типы. Типом поля межзонального индекса может быть: String, UnicodeString, Long, Integer, Short, Byte, а также мягкие ссылки. Нельзя использовать в качестве индекса коллекции. Для embedded-типов поля описываются только явно через тег <cci-index>.

Для добавления межзонального индекса по идентификатору объекта нужно использовать код, подобный следующему:

<cci-index name="id_cci_index">
    <property name="id"/>
</cci-index>

Описание индексации по полям embedded-сущности может выглядеть следующим образом:

<class name="MyCCIEntity" label="">
    <property name="name" type="String"/>
    <property name="document" type="Document"/>
 
    <cci-index>
        <property name="name"/>
        <property name="document.address.city"/>
    </cci-index>
</class>
 
<class name="Document" embeddable="true">
    <property name="code" type="String"/>
    <property name="address" type="Address"/>
</class>
 
<class name="Address" embeddable="true">
    <property name="city" type="String"/>
</class>

Имена межзональных индексов могут вычисляться, но крайне рекомендуется задавать их самостоятельно. Логика создания имени следующая: <Имя таблицы в верхнем регистре>_<Имя первого свойства в составе индекса>. Если в составе индекса имеется одно свойство, то имя сформировано. Иначе для каждого следующего поля в индексе, начинающегося с того же самого свойства в конец добавляется порядковый номер через символ подчеркивания.

Пример использования индексов можно найти во фрагменте ниже:

<class name="MyCCIEntity"...
    ...
    <property name="cciProduct" type="String" cci-index="true"/>
    <reference name="myCciReference" type="Animal" cci-index="true"/>
    <cci-index>
        <property name="myName"/>
        <property name="myLabel"/>
    </cci-index>
    <cci-index>
        <property name="id"/>
    </cci-index>
    ...

Для вышеуказанного примера будут сформированы имена:

  • T_MYCCIENTITY_CCIPRODUCT;

  • T_MYCCIENTITY_MYNAME_1;

  • T_MYCCIENTITY_MYCCIREFERENCE;

  • T_MYCCIENTITY_OBJECTID.

В перечисленных выше именах T_ — префикс имени таблицы в хранилище.

Межзональный индекс по идентификатору – особый случай. Имя поля заменяется на objectId.

Если имена не заданы вручную, то перечень всех имен CCI-индексов можно посмотреть в файле cciIndex.info, который сформируется при выпуске модели и будет находиться рядом с файлом model.xml.

Внимание!

Все сформированные индексы требуется зарегистрировать в Сервисе межкластерной индексации. Для этого необходимо оформить запрос администраторам данного сервиса.

Внимание!

Длина значения CCI-индекса ограничена 100 символами. То есть сумма длин, входящих в CCI-индекс полей, не должна превышать данного значения. Это вызвано ограничениями компонента Прикладной журнал (APLJ) и Сервиса межкластерной индексации (CCIX).

Настройки подключения к Cross Cluster Index#

Подключение к Сервису межкластерной индексации настраивается с помощью следующих параметров:

  • dataspace.cci.host — URL для подключения к серверу Cross Cluster Index;

  • dataspace.cci.port — Port для подключения к серверу Cross Cluster Index;

  • dataspace.cci.clusterId — название шардов Cross Cluster Index;

  • dataspace.plugin.cci.useStubCCIServer — включение режима "заглушки", когда вся функциональность CCI будет выключена.

Данные параметры можно задать следующими способами:

  • В рамках Helm-инсталляции прописать следующие их значения в value.yaml в секции overrideProperties (значения необходимо заменить на актуальные):

       overrideProperties:
         dataspace:
           plugin:
             cci:
               useStubCCIServer: false
           cci:
             cciUrl: "<адрес сервера cci>"
             cciPort: "8080"
             cciClusterId: "shard_name"
    
  • В рамках инсталляции при помощи Deploy Tools (CDJE) также можно выполнить явное переопределение параметров приложения в конфигурационных файлах dataspace-*.conf для каждого сервиса DataSpace. Пример dataspace-core-modelName.conf:

    core.cm.properties.dataspace.cci.host=<адрес сервера cci>
    core.cm.properties.dataspace.cci.port=8080
    core.cm.properties.dataspace.cci.clusterId=SHARD-ID
    core.cm.properties.dataspace.plugin.cci.useStubCCIServer=false
    

Для включения режима "заглушки" CCI необходимо использовать параметр dataspace.plugin.cci.useStubCCIServer=true.