jBilling is designed to allow for many different deployment options. You can start small, with only one inexpensive server running everything needed for your billing solution. This can be enough for a start-up company, or as a proof of concept for a larger project.
As more customers are added to the system, you will need better performance. You might have the option of upgrading the single server to one with a faster CPU and more RAM, but this will not scale in the long run. jBilling scales by adding more servers to a cluster of billing nodes that act as a single 'billing system'.
Each node can handle one or more 'roles': payment processing, invoice generations, web server, etc. There are nine roles, some of them can run in many servers simultaneously.
The following are three deployment examples, from a very simple scenario to one that needs many servers in the billing cluster:
In this scenario, everything runs in the same physical server:
Here we run the database in a different server. We also have batch processes in one dedicated server, leaving the run-time requests for serving the GUI and web-services in its own.
We now have 6 servers running jBilling, plus a cluster for the database. Heavy processes are distributed in one or more servers: there are two for mediation. Payment processing is now in its own server as well, sending payment request asynchronously through three message queues: