Кэш развертывания

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Все определения процессов кэшируются (после их парсинга), чтобы избежать обращения к базе данных каждый раз, когда требуется определение процесса, а также потому, что данные определений процессов не изменяются. Это уменьшает задержку при обращении к определениям процессов и, тем самым, повышает производительность системы.

Настройка максимальной ёмкости кэша

Если имеется большое количество определений процессов, кэш может занимать значительный объём памяти, и рабочая память может достигать своих пределов. Поэтому после достижения максимальной ёмкости наименее недавно использовавшаяся запись определения процесса удаляется из кэша (алгоритм LRU — least recently used), чтобы соблюсти ограничение по вместимости. Однако, если проблемы с нехваткой памяти (out of memory) всё же возникают, может потребоваться уменьшить максимальную ёмкость кэша.

При изменении максимальной ёмкости конфигурация затрагивает все следующие компоненты кэша:

  • Определение процесса (Process definition)

  • Определение кейса (Case definition)

  • Определение решения (Decision definition)

  • Определение требований к решениям (Decision requirements definition)

В конфигурации процессного движка можно указать максимальную ёмкость кэша. Значение по умолчанию — 1000. При создании процессного движка это свойство будет установлено, и все ресурсы будут просканированы и развернуты соответствующим образом. Например, максимальная ёмкость может быть установлена в 120 следующим образом:

<bean id="processEngineConfiguration" class="io.openbpm.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
	<!-- Your property definitions! -->
					....

	<property name="cacheCapacity" value="120" />
</bean>

Одна и та же ёмкость используется для всех перечисленных выше компонентов, и невозможно задать размер ёмкости отдельно для каждого компонента. Кроме того, в реализации кэша по умолчанию размер ёмкости соответствует максимальному количеству элементов, которые могут находиться в кэше. Это означает, что абсолютный объём физического хранилища (например, в мегабайтах), который будет использоваться, зависит от размера, необходимого для соответствующих определений процессов.

Предоставление собственной реализации кэша

Реализация кэша по умолчанию удаляет наименее недавно использовавшуюся запись сразу после превышения максимальной ёмкости. Если требуется выбирать удаляемые записи по другому критерию, можно предоставить собственную реализацию кэша.

Это можно сделать, реализовав интерфейс Cache из пакета io.openbpm.util.commons. Предположим, например, что была реализована следующая класс:

public class MyCacheImplementation<K, V> implements Cache<K, V> {

	// implement interface methods and your own cache logic here
}

Далее необходимо подключить MyCacheImplementation в пользовательскую фабрику CacheFactory:

public class MyCacheFactory extends CacheFactory {

  @Override
  public <T> Cache<String, T> createCache(int maxNumberOfElementsInCache) {
    return new MyCacheImplementation<String, T>(maxNumberOfElementsInCache);
  }
}

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

<bean id="processEngineConfiguration" class="io.openbpm.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
	<!-- Your property definitions! -->
					....

	<property name="cacheFactory">
			<bean class="io.openbpm.bpm.engine.test.api.cfg.MyCacheFactory" />
	</property>
</bean>

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org