当前位置: 首页 > 知识库问答 >
问题:

Ignite性能:如何调优Ignite瘦客户机的缓存写入性能?

孟财
2023-03-14

2)如果瘦客户机和服务器驻留在不同的主机上,将500个条目保存到两个缓存中需要大约4分钟,这看起来非常糟糕。

即使我们考虑到一些网络延迟,我也无法证明在case2(我们希望采用的实现模式)中这种显著的延迟是合理的。我想知道这是否与我的缓存配置有关,如下所示?

<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">

    <property name="workDirectory" value="/path/"/>

    <property name="activeOnStart" value="true"/>

    <property name="autoActivationEnabled" value="true"/>

    <property name="deploymentMode" value="SHARED"/>

    <property name="igniteInstanceName" value="test"/>

    <property name="dataStorageConfiguration">
        <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
            <property name="defaultDataRegionConfiguration">
                <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                    <property name="persistenceEnabled" value="true"/>
                </bean>
            </property>
            <property name="storagePath" value="/path/"/>
        </bean>
    </property>

    <!--
        For better performance set this property to false in case
        peer deployment is not used.
        Default value is true.
    -->
    <property name="peerClassLoadingEnabled" value="false"/>


    <property name="cacheConfiguration">
        <!--
            Specify list of cache configurations here. Any property from
            CacheConfiguration interface can be configured here.
            Note that absolutely all configuration properties are optional.
        -->
        <list>

            <bean parent="cache-template">
                <!-- Cache name is 'testcache1'. -->
                <property name="name" value="testcache1"/>
            </bean>

            <bean parent="cache-template">
                <!-- Cache name is 'testcache2'. -->
                <property name="name" value="testcache2"/>
            </bean>

        </list>
    </property>

</bean>

<!-- Template for all example cache configurations. -->
<bean id="cache-template" abstract="true" class="org.apache.ignite.configuration.CacheConfiguration">
    <!-- REPLICATED cache mode. -->
    <property name="cacheMode" value="REPLICATED"/>

    <!-- Set synchronous rebalancing (default is asynchronous). -->
    <property name="rebalanceMode" value="SYNC"/>

    <!-- Set to FULL_SYNC for examples, default is PRIMARY_SYNC. -->
    <property name="writeSynchronizationMode" value="FULL_SYNC"/>

    <property name="atomicityMode" value="TRANSACTIONAL"/>
</bean>

瘦客户端代码:

static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

private ClientCache<String, String> testcache1;
private ClientCache<String, String> testcache2;



public IgniteDataGridApplication() {
    ClientConfiguration cfg = new ClientConfiguration().setAddresses("serverhostname.net:10800");
    IgniteClient ignite = Ignition.startClient(cfg);
    testcache1 = ignite.cache("testcache1");
    testcache2 = ignite.cache("testcache2");
}

public static void main(String[] args) throws Exception {
    IgniteDataGridApplication igniteDataGridApplication = new IgniteDataGridApplication();
    igniteDataGridApplication.load();
}

private void load() throws Exception {
    List<ThreadProducer> cacheMessages = new ArrayList<>();
    for (int i = 1; i <= 1000000; i++) {
        String testentry = i+"";
        cacheMessages.add(new ThreadProducer("testKey" + i, testentry));

    }
    ExecutorService executorService = Executors.newFixedThreadPool(1000);
    cacheMessages.forEach(executorService::submit);
    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
}


class ThreadProducer implements Runnable {
    private String String;
    private String key;

    public ThreadProducer(String key, String String) {
        this.key = key;
        this.String = String;
    }

    public void run() {
        testcache1.putIfAbsent(key, String);
        testcache2.putIfAbsent(key, String);
        System.out.println("entry :: " + key + " :: " + sdf.format(Calendar.getInstance().getTime()));
    }
}

}

共有1个答案

诸葛绍元
2023-03-14

尝试使用JFR、JProfiler或您选择的另一个探查器分析服务器节点和瘦客户机,以找到降低操作速度的瓶颈。

确保在这两种情况下,基线拓扑中存在相同数量的节点。在基线拓扑配置不当的情况下,数据可能仅加载到节点之一。

您可以尝试使用批量加载数据的API方法来提高性能。clientcache#putall()就是这样的方法之一。

 类似资料:
  • 我有一个正在运行的Ignite集群,并且我使用进行节点发现: 它工作得很好,我可以使用节点连接到这个集群。 null

  • 我有一个运行在一个系统上的java服务器,它从数据库加载数据并缓存到java缓存。我有其他的C++客户端,它正在运行使用相同的Java配置。两者都在不同的PC上运行。我希望对java和C++客户机都使用一个公共缓存,也就是说,如果我使用java加载缓存,然后我希望通过C++客户机查询这个缓存数据。我只是尝试这样设置组播选项。 如果两个客户机都在同一个系统上工作,它的工作是好的。但是当两者都在不同的

  • 我正在尝试使用apache-spark读取和写入Ignite集群,我可以使用JDBC瘦客户机,但不是本机方法,正如几个spark+Ignite示例中提到的那样。 现在,所有的spark+ignite示例都启动了一个本地ignite集群,但我希望我的代码作为客户端连接到已经存在的集群。 完整代码:-(sparkDSLExample)函数无法使用thin连接ignite远程群集 示例-default.

  • 我正在评估Apache Ignite,以检查它是否符合我们公司的需要。到目前为止还好。现在我正试图了解near cache特性在一致性方面是如何工作的。 我的问题是:除了这个文档之外,还有其他文档解释它是如何工作的吗?特别是,我想知道对任何其他实例的任何后续读请求(在写请求之后)是否会获得更新的数据(没有最终的一致性)。 谢了!

  • 我使用Apache Ignite 2.7.5作为.NET核心中服务器和瘦客户机。当我做与缓存相关的操作时,put、get和load等.net核心应用程序会自动崩溃。 因此,我想处理for循环内部的异常,例如、、等,然后从catch块抛出for循环,否则如果只有异常块,则继续循环迭代。

  • 我们在服务器和客户机模式下使用Ignite 2.7.6:两个服务器和六个客户机。 正如我们所看到的,现在所有服务器节点的CPU负载都很高,约为250%(更新前为20%),而长G1 Young Gen的停顿时间高达5毫秒(更新前为300微秒)。 服务器配置为: 在Ignite服务器节点的内存转储中,我们看到大量,大小为21MB