When we’re not working on new features, we’re often working on improving PaperCut to ensure it works well in a large variety of situations. Sometimes customers use PaperCut in ways we never intended, or encounter scenarios which we never envisioned. We take pride in listening to our customer experiences, and making improvements to ensure we meet their needs. The result is a better product, and everyone benefits.
Today I’ll explain an issue raised recently by one of our largest PaperCut ChargeBack customers, and then describe how we designed and implemented the solution.
The Problem
This customer was running PaperCut in a challenging environment:
- Around 2,000 users all running the user client to charge printing to shared accounts;
- Users are located at a number of remote sites over slower network connections;
- Printing is charged to over 30,000 shared accounts;
- All users could charge printing to any of the 30,000 accounts;
- Each night an automated process added, removed or modified hundreds of accounts.
They reported the following problems:
- The user clients on remote sites were slow to popup when first printing.
- A large amount of bandwidth was used communicating with the primary PaperCut server.
- The PaperCut server was slow to respond in the mornings.
Analysis
It was clear that the cause of all these symptoms was the large amount of account data downloaded by each of the user clients. The user client will only download the account list from the server when it detects accounts have changed. But at this customer the account list was changed nightly. This caused the client software to re-download the large account list when the user first printed each day.
The client software communicates with the server using XML web services. After some analysis we found that the the XML representation of the 30,000 accounts was about 7.5 MB. On a fast local network this size is not a problem, but with 100’s of clients running on remote sites over slower WAN connections this starts to be an issue. It causes congestion on the network, the popup is slow to appear, and the server becomes overloaded.
After a few brainstorming sessions and consulting with the customer we approached the solution from two angles.
- Reduce the size of the account download;
- Allow the account data to be efficiently distributed to remote sites.
Solution Part 1: Reducing the download size
To reduce the size of the data downloaded we changed the account file format in two ways:
- Change from verbose XML to a much more efficient binary format;
- Compress the binary data
The net result was a reduction of approximately 25 times! In the case of this customer the 7.5MB download was reduced to around 250KB. Quite an improvement!
This change alone dramatically reduced the popup speed, and bandwidth used over the WAN connections. But we could do better!
Solution Part 2: Efficient distribution
We realized that it was very inefficient for multiple clients at the same remote site to download the identical account list. What if we could only download the list once per site?
We implemented a server-side tool to save the account list to a file (in the identical format described above). We added a new option to the client software to allow it to load the account list from a file instead of downloading from the server directly. Then all that this customer need to do was:
- Schedule a task to create the account file each night (after the accounts were modified), then copy the account file to a file share on each of the remote sites.
- Configure the clients at each site to load the local account list file.
The result was that only a single 250KB transfer was required to delivery the new account list to all clients at a given remote site.
Conclusion
The result of these changes was dramatic. Previously, on a site with 20 users the daily account download would consume around 150MB of bandwidth. After these changes it was reduced to only 250KB. What an improvement!
Not only was this a great result for this customer, but the product is improved for everyone.
I hope this gave you a little insight into the work we do behind the scenes. This change wasn’t glamorous or exciting. It will only be a single bullet point in our version 8.4 release notes . However it’s often many of these small improvements that make the overall product great.