Camunda cluster and hitless upgrade

Hi guys,
I have my own spring boot application which also have camunda capability by adding camunda-bpm-spring-boot-starter dependency 7.13.0 to the application. I already have a helm chart for my application, where i can increase the replica count to run it in cluster. But i want to load balance within the cluster. please suggest any best practice.

Also i wanted to have a hit-less update within the cluster. something like suspend the pod to acquire any new jobs --> wait until ongoing job completes --> then bring down pod. please suggest a best way of doing hitless upgrade.

Thanks in advance.

  • You can do client side load balancing in application layer level (Load balancing at layer 7 - based on http).

  • Since you’re using spring boot it’s easier integrate with Spring cloud using Netflix OSS components like Netflix Eureka (Service Discovery) and Netflix Ribbon (client side load balancing).

  • So client side loading balancing can be done for multiple nodes of spring-boot camunda services using Netflix Ribbon.

  • Another approach is having HA Proxy server and/or Nginx which can provide server side load balancing, proxying and acts as gateway which can provide load balancing for these nodes running in cluster.

Applying the database update scripts while not updating the library version (or in other words using a newer version of the database schema with an older version of the library) is possible since Camunda guarantees backwards compatibility of the database schema.

Check this page for What is a Rolling Update?

Hi Aravindh, Thanks for your reply. I will add more information on the second query. Here my springboot application uses the camunda engine embedded into it. I have my own java based business logic which will be executed first and then i call the engine to execute a workflow (runtimeService.startProcessInstanceByKey(workflowName(), inputMap)). So when i upgrade my application part (not the camunda upgrade), i dont want the current job being executed by the camunda job engine (in a specific pod) to be disturbed. So basically i want to wait until the current on going execution is completed. Then pull down by pod. Hope i made my application architecture clearly for you.