簡體   English   中英

Apache Ignite 2.6.0-分區模式下具有6個節點集群的高延遲

[英]Apache Ignite 2.6.0 - High latency in Partition mode with 6 nodes cluster

  1. 我有一個具有分區模式的6節點點火集群(版本2.6.0),想要僅將其用於緩存以最大程度地減少數據庫的負載。 我沒有預加載任何數據。
  2. 應用程序將嘗試從緩存中讀取數據,如果丟失,它將進入數據庫,然后將其添加回緩存中。
  3. 我同時使用鍵/值和SQL緩存。 在負載測試期間,我們發現K / V和SQL緩存都需要花費500毫秒以上的時間才能從緩存中獲取數據。
  4. 但是對於Ignite節點的單個實例,結果(GET請求)在10-20ms范圍內。

如果我有任何遺漏,請告訴我。

讓我知道是否需要更多數據。

服務器配置具有3個數據區域。(與下面的配置共享)

服務器端配置

<beans xmlns="http://www.springframework.org/schema/beans"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" 
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="igniteInstanceName" value="igniteStart"/>
    <property name="discoverySpi" ref="discoverySpi"/>
    <property name="communicationSpi" ref="communicationSpi"/>
    <property name="dataStorageConfiguration" ref="dataStorageConfiguration" />
    <property name="gridLogger" ref="gridLogger" />
  </bean>

  <bean id="gridLogger" class="org.apache.ignite.logger.log4j2.Log4J2Logger">
    <constructor-arg type="java.lang.String" value="/opt/ignite/apache-ignite-fabric-2.6.0-bin/config/log4j2.xml"/>
  </bean>

  <bean id="discoverySpi" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">


    <property name="joinTimeout" value="0"/>
    <property name="reconnectCount" value="100"/>
    <property name="reconnectDelay" value="10000"/>

    <property name="ipFinder">
      <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
          <list>
            <value>127.0.0.1</value>

            <value>127.0.0.1:47500..47509</value>
          </list>
        </property>
      </bean>
    </property>

    </bean>

  <bean id="communicationSpi" class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
    <property name="messageQueueLimit" value="1024"/>
    <property name="slowClientQueueLimit" value="1000"/>
  </bean>

  <bean id="dataStorageConfiguration" class="org.apache.ignite.configuration.DataStorageConfiguration">
    <property name="defaultDataRegionConfiguration">
      <bean class="org.apache.ignite.configuration.DataRegionConfiguration">

        <property name="name" value="Default_Region"/>

        <property name="initialSize" value="#{15L * 1024 * 1024}"/>

        <property name="maxSize" value="#{20L * 1024 * 1024}"/>

        <property name="pageEvictionMode" value="RANDOM_2_LRU"/>
      </bean>
    </property>

<property name="dataRegionConfigurations">
      <list>
        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
          <property name="name" value="Big_Region"/>

          <property name="initialSize" value="#{20.0D * 1024 * 1024 *1024}"/>

          <property name="maxSize" value="#{25.0D * 1024 * 1024 *1024}"/>
          <property name="pageEvictionMode" value="RANDOM_2_LRU"/>
        </bean>


        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
          <property name="name" value="Medium_Data_Region"/>

          <property name="initialSize" value="#{8.0D * 1024 * 1024 * 1024}"/>

          <property name="maxSize" value="#{10.0D * 1024 * 1024 * 1024}"/>
          <property name="pageEvictionMode" value="RANDOM_2_LRU"/>
        </bean>

        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
          <property name="name" value="Small_Data_Region"/>

          <property name="initialSize" value="#{4.0D * 1024 * 1024 * 1024}"/>

          <property name="maxSize" value="#{5.0D * 1024 * 1024 * 1024}"/>
          <property name="pageEvictionMode" value="RANDOM_2_LRU"/>
        </bean>
      </list>
    </property>
  </bean>
</beans>

只要每次調用都一直到一個節點,鍵值操作的性能就不會降低。 因此,在單節點或多節點測試中遺漏了一些東西。 確保在單節點方案中,該節點相對於客戶端而言是遠程的(兩者之間存在網絡)。 否則,如果您看到由於添加更多節點而導致的性能下降,則客戶端會出現瓶頸。

對於SQL操作,如果使用聯接,請確保正確放置數據。 另外,請記住,在大多數情況下,將廣播SQL。 因此,如果數據量很小並且您添加了更多節點,那么您將添加額外的網絡往返。 在此處查看更多詳細信息: https : //apacheignite-sql.readme.io/docs/performance-and-debugging

最后,考慮用JFR指出瓶頸。 Spring Data或應用程序可能存在熱點: https//apacheignite.readme.io/docs/jvm-and-system-tuning#section-flightrecorder-settings

我的猜測是,您每次需要讀取內容時,都在創建一個新的連接(ODBC / JDBC連接,或更糟糕的是,胖客戶端連接)以進行集群。

這不是要走的路。 如果希望看到良好的延遲,則應嘗試重用相同的連接。

如果在緩存中找不到數據,也請重新訪問“ 緩存存儲/第三方持久性”以自動進行數據庫查找。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM