当我水平缩放时,我正在努力调整点火集群的性能。我的用例是将文件保存到IGFS中。中位大小约为2 M,最大大小为120G,其中95%的百分位数约为1G。向较小尺寸的倾斜较大。
我的模型是丢失数据是可以的,因为每条数据都可以在性能受到影响的情况下恢复。但是,我不希望成员掉线导致我的点火集群损坏,因为重新获取所有数据对于我的用户(乃至我)来说是非常糟糕的一天。
另一方面,我要尽快保存。因此,我采用的做法是,最好是逐出数据,如果几个节点出现故障,则可以散失一些数据,只要在中断期间我不会丢失超过10%的数据即可。
我有一个名为“ igfs”的FileSystemConfiguration,我希望它可以懒惰地持久到也名为“ igfs”的DataStorageConfiguration。
为了获得一些冗余,我将ignite设置为使用IgniteConfiguration.AtomicConfiguration.backup = 1的1个备份。我认为这意味着ignite中的每个条目都写入一个副本。但是,我希望该备份异步发生。我找不到对IGFS条目执行此操作的方法。有办法吗?
另外,是否有一种方法可以将igfs设置为延迟写入默认持久层(基于磁盘)?我真的很想完成来自客户端的写操作,并将数据保存在内存中。它可以在自己的时间内刷新到磁盘。
<?xml version = .....
<beans ....
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="marshaller">
<bean class="org.apache.ignite.internal.binary.BinaryMarshaller" />
</property>
<property name="failureDetectionTimeout" value="10000" />
<property name="clientFailureDetectionTimeout" value="10000" />
<property name="peerClassLoadingEnabled" value="true" />
<property name="metricsLogFrequency" value="#{120*1000}"/>
<property name="atomicConfiguration">
<bean class="org.apache.ignite.configuration.AtomicConfiguration">
<property name="backups" value="1" />
</bean>
</property>
<property name="fileSystemConfiguration" >
<list>
<bean class="org.apache.ignite.configuration.FileSystemConfiguration">
<property name="name" value="igfs" />
<property name="blockSize" value="262144" />
<property name="bufferSize" value="262144" />
<property name="defaultMode" value="DUAL_ASYNC" />
<property name="dataCacheConfiguration" >
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="onheapCacheEnabled" value="true" />
<property name="evictionPolicy">
<bean class="org.apache.ignite.cache.eviction.lru.LruEvictionPolicy">
<property name="maxMemorySize" value="#{10L * 1024 * 1024 * 1024}" />
</bean>
</property>
<property name="eagerTtl" value="true" />
<property name="expiryPolicyFactory">
<bean class="javax.cache.expiry.CreatedExpiryPolicy" factory-method="factoryOf"?
<constructor-arg>
<bean class="javax.cache.expiry.Duration">
<constructor-arg value="HOURS"/>
<constructor-arg value="15"/>
</bean>
</constructor-arg>
</bean>
</property>
<property name="atomicityMode" value="ATOMIC" />
<property name="statisticsEnabled" value="true" />
</bean>
</property>
</bean>
</list>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="messageQueueLimit" value="500"
</bean>
</property>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>IP:47500..47509</value>
<value>IP:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="dataRegionConfigurations">
<list>
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="igfs" />
<property name="persistenceEnabled" value="true" />
<property name="metricsEnabled" value="true" />
<property name="maxSize" value="#{35: * 1024 * 1024 * 1024}" />
</bean>
</list>
</property>
<property name="defaultDataRegionConfiguration">
<property name="persistenceEnabled" value="true" />
<property name="metricsEnabled" value="true" />
<property name="maxSize" value="#{35: * 1024 * 1024 * 1024}" />
</property>
<property name="systemRegionMaxSize" value="#{6L * 1024 * 1024 * 1024}" />
</bean>
</property>
</bean>
结束
最佳答案
默认情况下,备份是异步进行的。否则,您需要在writeSynchronizationMode
上将SYNC
指定为CacheConfiguration
。
在您的情况下,最大的加速应该是在walMode
上将LOG_ONLY
设置为DataStorageConfiguration
。