Boosting Jira Marketplace Apps development with Apache Ignite

Suppose you need to implement a Jira Cloud app with a backend written in Java that should be capable of executing both long-running calculation-heavy issue processing jobs and lightweight requests from different Jira users in parallel. And suppose that this backend needs a data persistence layer with the following properties:

  • integrates with Java natively
  • highly available and horizontally scalable
  • fault-tolerant and distributed
  • supports distributed ACID transactions
  • provides data persistence on disk
  • supports SQL for distributed data
  • supports in-memory data storage
  • can be used for caching, preferably via JCache API
  • supports user-defined distributed jobs
  • provides automatic failover both for connections to database and for distributed jobs
  • provides Transparent Data Encryption for safety reasons
  • supports native configurations for deployment in Kubernetes
  • free and open-source
  • has an optional paid technical support

Sure enough you came across some of these requirements in your projects but what if you need to fulfill all of them at the same time? In Boosting Jira Cloud app development with Apache Ignite we show how Apache Ignite distributed database combined with Spring Boot framework can be used to build services with outlined properties, including our own service Alliedium AIssistant Cloud app built as Jira Cloud app that leverages machine learning (ML) to make Jira issue processing easier. This choice of technologies has proven to be a practically viable solution that runs equally well on both AWS EKS as our production environment and our local Kubernetes cluster deployed via Kubespray used as our development environment. Moreover, we use Apache Ignite for both data persistence and fast in-memory issue processing via distributed jobs:

CloupAppWithIgniteBuildingBlocks.png

Besides having all the properties listed above, Apache Ignite:

  • provides a key-value API (as being a key-value database internally) while SQL is implemented as an extra layer on top of that
  • supports multiple partitioning and replication modes including “distributed replicated” mode that distributes data across the cluster nodes keeping a few replicas of each data partition on other nodes. This way of making a distributed database fault-tolerant storing data is widely used by other distributed storage technologies (GlusterFS for instance)
  • supports failover for distributed transactions
  • natively supports classical distributed machine learning (ML) training algorithms and has a deep integration with TensorFlow

In Boosting Jira Cloud app development with Apache Ignite paper we have demonstrated how Apache Ignite and Atlassian Connect Spring Boot can be integrated to serve as a base for a scalable distributed backend. However, many interesting challenges when building distributed services and the ways to overcome them we left out of the scope of this paper on purpose as unrelated directly to Jira and Jira apps. Thus we still have a lot to share in a few subsequent papers.

Links

0 comments

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events