Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • In-memory batch rebalancing;
  • Historical (WAL) rebalancing (the native presistence enabled);

...

Limitations of

...

current approach

Regardless of which rebalance mode is used SYNC or ASYNC (defined in CacheRebalanceMode enum), the Apache Ignite rebalance implementation has a number of limitations caused by a memory-centric desing architecture:

  • Although all cache data is sent between peer's in batches (GridDhtPartitionSupplyMessage used) it still processes entries one by one. Such approach have the low impact with a pure in-memory use case but it leads to additional fsync's and logging WAL records with the Apache Ignite native persistence enabled. 

    By default, setRebalanceThreadPoolSize is set to 1 and setRebalanceBatchSize to 512K which means that thousands of key-value pairs will be processed single-thread and individually. Such approach impacts on: 
    • The extra unnecessary changes to keep a node data structures up to date. Adding each entry record into CacheDataStore will traverse and modify each index tree N-times. It will allocate the space N-times within FreeList structure and have to additionally store WAL page delta records with approximate complexity ~ O(N*log(N));
    • Batch with N-entries will produce N-records in WAL which might end up with N fsyncs (assume fsync WAL mode configuration enabled);
    • Increased the chance of huge JVM pauses. The more attendant objects we produces by applying changes, the more GC happens and the greater chance of JVM pauses we have;

  • Rebalancing procedure doesn't utilize the network and storage device throughput to full extent even with enough meaningful values of setRebalanceThreadPoolSize. For instance, trying to use a common recommendation of N+1 threads ( – the number of CPU cores available) to increase rebalance speed will drammatically slowdown computation performance on demander node. This can be easily shown on the graphs below.

    CPU utilization (supplier, demaner)

    setRebalanceThreadPoolSize – 9 setRebalanceBatchSize – 512KsetRebalanceThreadPoolSize – 1 setRebalanceBatchSize – 512K


Advantages of peer-2-peer balancing


Design

Objective

Apache Ignite needs to support peer-2-peer cache partition file transfer using zero-copy algorithm based on extension of communication SPI. 

...