There are many techniques to migrate your workflow to Camunda. By using the tips in this article, you can optimize the most common process types to run efficiently as possible.
What process families do we generally run into?
Transaction Processes: These are high-volume, small, directed transactions. This can be visualized by thinking of a bunch of very busy ants doing very discreet functionality. Essentially, this is what Camunda was built for.
Bulk Processes: This consists of processing millions of transactions without much variance, and often without a lot of human iteration. Camunda can easily tackle this as long as it is configured correctly and given enough horsepower.
Heterogeneous Processes: This can be a mix of transaction and bulk processing, and needs to be optimized on a case-by-case basis.
Management Processes: This requires human intervention to manage the flow of follow-on processes. Those follow-on processes can, and often are, a mixture of transactional, bulk, or heterogeneous processing.
What do we need to know about Transaction Processes?
If you have third-party integrations use the trigger or the Job Executor. As it builds, it will allow for grateful retires which enables you to optimize execution.
Do not increase maxJobsPerAcquisition too high. You don’t want one node to be hogging all the work while the others sit idle. A lower maxJobsPerAcquisition, and more Nodes, are the way to go here.
I’d set the maxPoolSize between 100-150. You’ll want all your nodes to be utilized and productive. It's important that you make sure you monitor your throughput.
What do we need to know about Bulk Processes?
When you set the start event on all such processes as Asynchronous it is important to immediately trigger the Job Executor afterward. That’s a good thing because it allows you to optimize your Job Executor exactly for this purpose.
Punch up the maxJobsPerAcquisition and queueSize pretty high. This will increase your job acquisition but could end up starving other jobs, thus, you’ll need to actively monitor that.
Punch up the maxPoolSize too, as long as your JVM can handle it. In order to make sure, the JMeter is still a good option.
How do I optimize Management Processes?
The way we optimize management processes is similar to heterogeneous processes. Both need to be treated on a case-by-case basis. A tip for optimizing these processes is to break up the bulk and transaction processes into fully discreet sub-processes. This is so that if you need to power through them, you can deploy them to their servers, each super optimized for either bulk to transaction processing. This is usually only done for critical systems where every nanosecond counts.
What else should we know about optimizing with Camunda?
As an engineer, It's important to get to know your machine. With Camunda, the heart is the job executor. It needs to be repeatedly measured, tested, observed, and refined. It may be beneficial to find an experienced partner and treat them as a resource. The construction and maintenance of this are not as much of a science as it is an art. A few other things you may want to do are:
Watch your average resource utilization per job
Watch your throughput and try to profile the applications that perform well. It is helpful to know what a “good process” looks like by working backward from results to characteristics.