Конфигурирование регионов данных#
Предусловия#
Установленный продукт DataGrid. Подробнее об установке продукта написано в документе «Руководство по установке».
Введение#
Для контроля объема доступной для кеша или группы кешей оперативной памяти в DataGrid применяется концепция регионов данных (Data Region) — расширяемых логических областей оперативной памяти, в которых располагаются данные. Изначальный размер региона данных, а также максимальный размер, который он может занимать, можно контролировать. Кроме размера, регионы данных задают настройки режима Native Persistence для кешей.
По умолчанию, если не переопределено в конфигурации, все кеши сохраняются в default data region, который создается автоматически и имеет максимальный размер 20% от свободной оперативной памяти узла. При необходимости можно указать в конфигурации несколько дополнительных регионов, например, в следующих случаях, когда:
необходимо ограничить объем оперативной памяти, доступной для определенных кешей и кеш-групп;
в кластере используются и in-memory, и persistent-кеши, так как параметры Native Persistence задаются отдельно для каждого региона данных;
требуется настроить отличные параметры для кешей — таких, как политика вытеснения страниц (
Eviction Policy), и прочих, настраиваемых в рамках конфигурации региона данных, а не кеша.
Конфигурирование региона данных по умолчанию#
По умолчанию новый кеш добавляется в регион данных, заданный по умолчанию. Воспользуйтесь конфигурацией класса IgniteConfiguration ниже для изменения настроек региона данных по умолчанию.
Примеры конфигурации:
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!--
Область памяти, к которой привязаны все кеши, если в их конфигурации не указан другой регион.
-->
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="Default_Region"/>
<!-- Максимальный размер — 40 МБ. -->
<property name="maxSize" value="#{40 * 1024 * 1024}"/>
</bean>
</property>
</bean>
</property>
<!-- Прочие свойства. -->
</bean>
</beans>
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
DataRegionConfiguration defaultRegion = new DataRegionConfiguration();
defaultRegion.setName("Default_Region");
defaultRegion.setMaxSize(100 * 1024 * 1024);
storageCfg.setDefaultDataRegionConfiguration(defaultRegion);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setDataStorageConfiguration(storageCfg);
// Запустите узел.
Ignite ignite = Ignition.start(cfg);
ignite.close();
var cfg = new IgniteConfiguration
{
DataStorageConfiguration = new DataStorageConfiguration
{
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
MaxSize = 100 * 1024 * 1024
}
}
};
// Запустите узел.
var ignite = Ignition.Start(cfg);
Добавление пользовательских регионов данных#
Возможно добавить дополнительные регионы данных с необходимыми настройками. В примере ниже приводится конфигурация класса IgniteConfiguration региона данных, занимающего до 40 МБ ОЗУ и использующего стандартную политику вытеснения Random-2-LRU.
Внимание
В конфигурации ниже создается кеш, располагающийся в новом регионе данных.
Примеры конфигурации:
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!--
Область памяти, к которой привязаны все кеши, если в их конфигурации не указан другой регион.
-->
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="Default_Region"/>
<!-- Максимальный размер — 40 МБ. -->
<property name="maxSize" value="#{40 * 1024 * 1024}"/>
</bean>
</property>
<property name="dataRegionConfigurations">
<list>
<!--
Область памяти объемом 40 МБ с включенным вытеснением.
-->
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="40MB_Region_Eviction"/>
<!-- Область памяти с начальным размером 20 МБ. -->
<property name="initialSize" value="#{20 * 1024 * 1024}"/>
<!-- Максимальный размер — 40 МБ. -->
<property name="maxSize" value="#{40 * 1024 * 1024}"/>
<!-- Включение вытеснения для данной области памяти. -->
<property name="pageEvictionMode" value="RANDOM_2_LRU"/>
</bean>
</list>
</property>
</bean>
</property>
<property name="cacheConfiguration">
<list>
<!-- Кеш, который сопоставлен с определенной областью данных. -->
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="SampleCache"/>
<!--
Присвоение кешу региона `40MB_Region_Eviction`.
-->
<property name="dataRegionName" value="40MB_Region_Eviction"/>
</bean>
</list>
</property>
<!-- Прочие свойства. -->
</bean>
</beans>
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
DataRegionConfiguration defaultRegion = new DataRegionConfiguration();
defaultRegion.setName("Default_Region");
defaultRegion.setMaxSize(100 * 1024 * 1024);
storageCfg.setDefaultDataRegionConfiguration(defaultRegion);
// Область памяти объемом 40 МБ с включенным вытеснением.
DataRegionConfiguration regionWithEviction = new DataRegionConfiguration();
regionWithEviction.setName("40MB_Region_Eviction");
regionWithEviction.setInitialSize(20 * 1024 * 1024);
regionWithEviction.setMaxSize(40 * 1024 * 1024);
regionWithEviction.setPageEvictionMode(DataPageEvictionMode.RANDOM_2_LRU);
storageCfg.setDataRegionConfigurations(regionWithEviction);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setDataStorageConfiguration(storageCfg);
CacheConfiguration cache1 = new CacheConfiguration("SampleCache");
// Данный кеш будет находиться в регионе данных `40MB_Region_Eviction`.
cache1.setDataRegionName("40MB_Region_Eviction");
cfg.setCacheConfiguration(cache1);
// Запустите узел.
Ignite ignite = Ignition.start(cfg);
var cfg = new IgniteConfiguration
{
DataStorageConfiguration = new DataStorageConfiguration
{
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
MaxSize = 100 * 1024 * 1024
},
DataRegionConfigurations = new[]
{
new DataRegionConfiguration
{
Name = "40MB_Region_Eviction",
InitialSize = 20 * 1024 * 1024,
MaxSize = 40 * 1024 * 1024,
PageEvictionMode = DataPageEvictionMode.Random2Lru
},
new DataRegionConfiguration
{
Name = "30MB_Region_Swapping",
InitialSize = 15 * 1024 * 1024,
MaxSize = 30 * 1024 * 1024,
SwapPath = "/path/to/swap/file"
}
}
}
};
Ignition.Start(cfg);
Для получения полного списка свойств класса DataStorageConfiguration обратитесь к javadoc класса.
Стратегия «разогрева» кешей#
При перезагрузках кластера DataGrid не требуется принудительный «разогрев» оперативной памяти данными с диска. Как только топология кластера собрана, а кластер активирован, он готов к работе, и можно посылать запросы к данным и производить вычисления. В таком случае данные «поднимаются» с диска в оперативную память при первом запросе, но это может вызывать задержки во время первого обращения к записи в кеше.
Для low-latency приложений, то есть приложений, требующих быстрого ответа, доступна функция «разогрева», которая позволяет загрузить все данные в оперативную память в процессе запуска кластера, чтобы в дальнейшем при их запросе не происходило обращения к диску.
В настоящий момент стратегия разогрева данных DataGrid подразумевает под собой загрузку данных во все или только в указанные регионы данных, вплоть до исчерпания свободного места в регионе. При этом в первую очередь в память загружаются индексы. Стратегия разогрева может быть сконфигурирована как для всех регионов данных (по умолчанию), так и для каждого региона данных по отдельности.
Включение функции «разогрева» для всех регионов данных#
Для включения функции «разогрева» для всех регионов данных укажите LoadAllWarmUpStrategy в DataStorageConfiguration#setDefaultWarmUpConfiguration:
Примеры конфигурации:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultWarmUpConfiguration">
<bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
</property>
</bean>
</property>
</bean>
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
// Изменение стратегии прогрева по умолчанию для всех регионов данных.
storageCfg.setDefaultWarmUpConfiguration(new LoadAllWarmUpConfiguration());
cfg.setDataStorageConfiguration(storageCfg);
Включение функции «разогрева» для определенного региона данных#
Для включения функции «разогрева» для определенного региона данных укажите LoadAllWarmUpStrategy в DataRegionConfiguration#setWarmUpConfiguration:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<property name="dataRegionConfigurations">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="NewDataRegion"/>
<property name="initialSize" value="#{100 * 1024 * 1024}"/>
<property name="persistenceEnabled" value="true"/>
<property name="warmUpConfiguration">
<bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
</property>
</bean>
</property>
</property>
</bean>
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
// Установите другую стратегию прогрева для пользовательского региона данных.
DataRegionConfiguration myNewDataRegion = new DataRegionConfiguration();
myNewDataRegion.setName("NewDataRegion");
// Можно настроить начальный размер и другие параметры.
myNewDataRegion.setInitialSize(100 * 1024 * 1024);
// Выполнение загрузки данных с диска в DRAM при перезапуске.
myNewDataRegion.setWarmUpConfiguration(new LoadAllWarmUpConfiguration());
// Подключение персистентности регионов данных. DataGrid считывает данные с диска при запросе таблиц/кешей из этого региона.
myNewDataRegion.setPersistenceEnabled(true);
// Применение настроек.
storageCfg.setDataRegionConfigurations(myNewDataRegion);
cfg.setDataStorageConfiguration(storageCfg);
Остановка работы функции «разогрева» для всех регионов данных#
Для остановки работы функции «разогрева» для всех регионов данных укажите NoOpWarmUpConfiguration в DataStorageConfiguration#setDefaultWarmUpConfiguration:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultWarmUpConfiguration">
<bean class="org.apache.ignite.configuration.NoOpWarmUpConfiguration"/>
</property>
</bean>
</property>
</bean>
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.setDefaultWarmUpConfiguration(new NoOpWarmUpConfiguration());
cfg.setDataStorageConfiguration(storageCfg);
Остановка работы функции «разогрева» для определенного региона данных#
Для остановки работы функции «разогрева» для определенного региона данных передайте параметр конфигурации NoOpWarmUpStrategy в DataRegionConfiguration#setWarmUpConfiguration:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="dataStorageConfiguration">
<property name="dataRegionConfigurations">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="NewDataRegion"/>
<property name="initialSize" value="#{100 * 1024 * 1024}"/>
<property name="persistenceEnabled" value="true"/>
<property name="warmUpConfiguration">
<bean class="org.apache.ignite.configuration.NoOpWarmUpConfiguration"/>
</property>
</bean>
</property>
</property>
</bean>
IgniteConfiguration cfg = new IgniteConfiguration();
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
// Установите другую стратегию прогрева для пользовательского региона данных.
DataRegionConfiguration myNewDataRegion = new DataRegionConfiguration();
myNewDataRegion.setName("NewDataRegion");
// Можно настроить начальный размер и другие параметры.
myNewDataRegion.setInitialSize(100 * 1024 * 1024);
// Выполнение загрузки данных с диска в DRAM при перезапуске.
myNewDataRegion.setWarmUpConfiguration(new NoOpWarmUpConfiguration());
// Подключение персистентности регионов данных. DataGrid считывает данные с диска при запросе таблиц/кешей из этого региона.
myNewDataRegion.setPersistenceEnabled(true);
// Применение настроек.
storageCfg.setDataRegionConfigurations(myNewDataRegion);
cfg.setDataStorageConfiguration(storageCfg);
Остановка работы функции «разогрева» с помощью утилиты control.sh#
Для остановки работы функции «разогрева» с помощью утилиты control.sh запустите команду:
control.sh --warm-up --stop --yes
Остановка работы функции «разогрева» с помощью JMX#
Для остановки работы функции «разогрева» с помощью JMX используйте следующий метод: org.apache.ignite.mxbean.WarmUpMXBean#stopWarmUp.