How to Make Apache Ignite Production Ready

Actionable guidelines to make Apache Ignite production-ready.

Photo by rigo erives on Unsplash

Apache Ignite is primarily a in-memory distributed caching and computing framework. It also provides different capabilities like service-grid, messaging etc.

1. Storage

  1. FULLY_REPLICATED caches perform better for read-operations. Thus, read-intensive caches with moderate size data should use FULLY_REPLICATED mode.
  2. PARTITIONED caches give better performance for write operations. Thus, caches with write-intensive operations should use PARTITIONED caches.
  3. Avoid using Ignite’s Native Persistence for FULLY_REPLICATED caches.
  4. To avoid data loss for PARTITIONED caches, one should use Ignite’s native persistence or third party persistence or use proper replication factor.
  5. Define separate DataRegions with appropriate DataEvictionMode (DISABLED, LRU) and sizes for caches with different needs. Avoid using the same DataRegion for all the caches.
  6. For partitioned cache, one can also use swap space instead of native persistence or third party persistence.

2. Cluster Discovery

3. Security

4. Network partitioning

5. Cache node filter

6. Miscellaneous

  1. Timeouts like failureDetectionTimeout, networkTimeout andsegmentationCheckFrequency should be configured properly through IgniteConfiguratio.
  2. The default failureHandler stops the Ignite node upon failure. For embedded Ignite, this property should be changed.
  3. The default segmentation policy is SegmentationPolicy.STOP. This should be changed to an appropriate one.
  4. IPv4: According to several discussions on Ignite user forum, different IP configuration causes network segmentation. Thus, it is advised to IPv4 over IPv6 which can be configured through java option as follows http://apache-ignite-users.70518.x6.nabble.com/Ignite-Node-failure-Node-out-of-topology-SEGMENTED-td21360.html -Djava.net.preferIPv4Stack=true
  5. Ports: Apache Ignite uses multiple network ports for different things like node discovery, node communication, REST client, SQL client. Out of these, node discovery (47500) and node communication (47100) are mandatory for it to function properly.
  6. Predicate classes: Classes used in all the predicates should be present in the classpath of all the nodes. These classes are not made available through Peerclassloading. One has to add these classes to the classpath.
  7. Client Mode: If you do not want any cache partitions on some cluster nodes, add those nodes are client nodes.
  8. EventListeners: If you have added event listeners for different events like cache events, node events, etc, make sure that user logic is not getting executed in the event thread.

Resources

  1. https://apacheignite.readme.io/docs/preparing-for-production
  2. http://apache-ignite-users.70518.x6.nabble.com/Ignite-Node-failure-Node-out-of-topology-SEGMENTED-td21360.html
  3. https://www.bugdbug.com/post/how-to-handle-network-segmentation-in-apache-ignite
  4. https://www.bugdbug.com/post/how-to-secure-apache-ignite-cluster

--

--

Technology Enthusiast | Big Data Developer | Amateur Cricketer | Technical Lead Engineer @ eQ Technologic | https://www.bugdbug.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Amar Gajbhiye

Technology Enthusiast | Big Data Developer | Amateur Cricketer | Technical Lead Engineer @ eQ Technologic | https://www.bugdbug.com