- 14 avril, 2021 - 5 ’ read

Advanced Queueing. Increased performance and unlimited scalability.

Regardless of businesses' starting point, scalability has become an essential requirement for any customer who wants to grow over time. I'm Italo, Software Engineer at Imagicle, and in this post, I'll tell you (with some tech-specs!) how we worked to expand the capabilities of Imagicle Advanced Queueing, making one of your top Customer Service apps even more powerful.

A quick recap.

Let’s start with a bit of story, in true “Once upon a time” style. smiling face 

  • In 2020.Spring.1, we released an improved version of Call Analytics that improved report extraction and reduced the space occupied in the database;
  • In the same release, we have also improved the performance of Contact Manager by introducing Full-Text search, making contacts’ search among your directories up to 10x faster;
  • In 2020.Summer.1 we optimized Call Recording, allowing it to up the number of calls that could be recorded simultaneously from 180 to 500, with the same amount of available server resources.
Now, let’s dive into the present and break down the steps that brought us to increase the scalability for our Advanced Queueing and how we did it. We will not dwell too much on why we did it. It’s pretty simple: this is the kind of optimization that really makes communications faster, smarter, and easier!

Lab environment.

Just like with any good optimization/scalability work, we started by thinking about what tests we should run to gather information about the resource usage (CPU, RAM, Disk, etc.) of the application that needed to be optimized. Then made a list of things we would need to do at each test run:

  • clean the database from previous executions;
  • configure the machine that hosts the suite (Licenses, Queues, Agents etc.);
  • launch an internal tool that simulates agent activity;
  • start the test by launching our Call Generator, so that calls are received by the Advanced Queueing;
  • during the test, check the results of resource usage;
  • manually save the results so as to create graphs later.
When we got to the end of the list, we said to ourselves: « Wait a minute… we need to automate everything! »
What’s more is that, while for the rest of our applications the variables at stake were few, for Advanced Queueing the variables were countless: number of agents, number of queues, distribution algorithm… we knew we needed to launch as many tests as possible to see the trend of resource usage as the variables changed. Pretty challenging!
 
After a few sprints of hard and passionate work, we managed to implement the orchestrator: an automatic tool that for each test does as follows:

  • launches our internal tool to monitor and control telephone lines, simulating the behavior of queue agents;
  • launches WireMock.GUI, which is configured to receive telemetry data from the suite under test;
  • launches another tool that has the task of cleaning up and configuring the suite (Licenses, Queues, Agents etc.);
  • starts the test by generating calls destined for Advanced Queueing;
Advanced Queueing test
  • waits a configurable time before ending the test;
  • generates graphs from the data it has collected, such as CPU usage throughout the test execution.
There are many benefits to automating test execution: tests can run 24 hours a day, there’s no room for human error, and last, but not least, we didn’t need to book a therapist for the person who would’ve launched the tests otherwise. slightly smiling face 

Push the limits. 64 bit.

Once the orchestrator was implemented, we put it to work day and night, because after all that work we needed to see some payoff on our investment. slightly smiling face 
From the first test results, we have identified a first limit to the maximum number of calls that could be queued, given by the top amount that can be handled by a 32-bit processor. So, just as we did for Call Recording, we worked to remove this impasse and by switching the Advanced Queueing service from 32 bit to 64 bit.

Dispatcher.

Once we reached a 64-bit service, we could finally push the machine to use all the available CPUs. But the result of the tests made us realize that, in some cases, with so many calls to handle, Advanced Queueing was losing calls. This issue only manifested when the limit of RAM available for a 32-bit processor was exceeded. The problem was related to the fact that the application was slow to process calls coming from the underlying layer, because those calls were removed from a single queue and processed immediately by Advanced Queueing.
In other words, some calls slowed down the processing of others if they required a long processing time. This resulted in some calls being processed late when CUCM had already pulled down the call in question. 
 
To solve this problem, we implemented a dispatcher with the aim of sorting and splitting the events on # queues, where # is the number of calls that Advanced Queueing has to handle. For each queue, there is a worker that processes the calls in that queue.
Dispatcher
This change eliminated this impasse, too. By re-launching the automated tests, we noticed that the application no longer lost calls and our goal was reached. But let’s be honest, did you have doubts? Because we didn’t! winking face 
 

Conclusions…

With the transition of the service to 64-bit and the introduction of the dispatcher, we achieved our main goal: virtually unlimited vertical scalability. This means that, from 2021.Spring.1, it is possible to increase/decrease the capacity of Advanced Queueing by increasing/decreasing the resources available on the machine. In other words, starting from this version of our Imagicle UCX Suite, you can have more Advanced Queueing channels per server, which means having fewer servers, so deployment and maintenance are easier, and consequently, costs are lower. Who doesn’t love lower costs?

…And the road ahead.

Improving application performance has always been one of the pillars of our product strategy and have no doubt: we are not going to stop here. We’ve launched our Spring Release on April 8th, but we’re already working on our Summer Release to always bring you the best you can ask for because it’s always a matter of happy people!
 
Now, I know you’re already curious about what summer has in store, but for now, just enjoy some fresh flowers and birds singing as the news of the Spring release unravel before you. 
If you want to know more, read the first two articles of the Spring series, about OAuth support and Call Analytics reports. And of course, stay tuned, because the next articles about the new features of Imagicle Spring Release 2021 are coming soon!

0 commentaires

Gardez un œil sur le monde Imagicle.
Recevez gratuitement des contenus qui sauront vous satisfaire tout en restant informé.