如何在hazelcast中创建共享数据结构的异步备份?

时间:2019-06-15 21:52:01

标签: networking distributed-computing hazelcast in-memory-data-grid

我试图通过一个简单的for循环将x个对象添加到分布式hazelcast队列(IQueue)。

        HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
        BlockingQueue<String> configs = hazelcastInstance.getQueue("test"); 
        for(int i = 0; i<1000;i++) {
            configs.add("Some string"+i);
        }

更改值和在配置中(请参见下文)对执行速度没有任何影响。我假设增加将阻止插入操作,而增加将不会(实际上,循环应像#add操作在本地队列中一样快地运行)。但是,执行for循环的时间相同。即使我将两个值都设置为0。为什么会这样(这是一个两节点群集,其中一个节点位于不同的虚拟机上)?

<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation=
  "http://www.hazelcast.com/schema/config hazelcast-config-3.7.xsd"
  xmlns="http://www.hazelcast.com/schema/config"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <network>
        <port auto-increment="true" port-count="20">5701</port>
        <join>
            <multicast enabled="false">
        </multicast>
        <tcp-ip enabled="true">
            <member>172.105.66.xx</member> 
        </tcp-ip>
        </join>
    </network>

    <queue name="test">
        <statistics-enabled>false</statistics-enabled>
        <max-size>0</max-size>
        <backup-count>0</backup-count>
        <async-backup-count>1</async-backup-count>
        <empty-queue-ttl>-1</empty-queue-ttl>
    </queue>
</hazelcast>

1 个答案:

答案 0 :(得分:1)

异步备份不会阻止您的呼叫,因此设置0或1应该有最小的差异。在2个节点群集上设置另一个值是没有意义的。

与众不同的是,具有数据结构的分区的所有者是本地的还是远程的。在这种情况下,性能问题通常是由调用方(您的测试)和数据结构所有者(远程Hazelcast实例)之间的网络延迟引起的。

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue<String> configs = hazelcastInstance.getQueue("test"); 
for(int i = 0; i<1000;i++) {
    configs.add("Some string"+i);
}
Member localMember = hazelcastInstance.getCluster().getLocalMember();
Member partitionOwner = hazelcastInstance.getPartitionService().getPartition(configs.getName()).getOwner();
boolean localCall = localMember.equals(partitionOwner);
System.out.println("Local calls to IQueue: " + localCall);