[author:alex]
A common problem with merging a SaaS application’s services into one virtual appliance is resource usage.
If your application requires a queue system, an SQL database, some background workers, and various other processes, it might be difficult to run it all in a tiny virtual machine.
One approach is to define a set of Minimum Requirements. This ensures the people using your virtual appliance are allocating sufficient RAM, CPU and DISK. The term for this is vertical scalability. Having the ability to assign a machine’s hardware resources however you want is a great benefit of virtualization. Unfortunately, scaling vertically will eventually reach a certain cost/performance limit.
Unfortunately, scaling vertically will eventually reach a certain cost/performance limit.
If your customers are forced to only scale vertically, then they will end-up performing crazy workarounds, and that’s never a good thing.
What workarounds?
If you look at GitHub Enterprise, it doesn’t provide the ability to define an external database, or to share repositories between two virtual appliances. If a company has 500 concurrent users (lots of developers), they might be required to run multiple GitHub Enterprise instances to support the load on multiple physical servers. Since it doesn’t natively support this, the admin would need to allocate repositories in different instances, and maybe even DUPLICATE repositories on each instance, along with using customĀ git remotes on each developer’s workstation, pointing to each instance. Sounds complicated?
Otherwise you’ll need to have one incredibly beefy server to handle everything, with expensive/fast disks, multiple CPU cores and maybe even bonded network interfaces to handle excess network throughput.
A nice solution
To alleviate this problem, being limited by one server’s physical/vertical scalability, we often suggest our customers to allow forĀ horizontal scalability. This entails two things:
Why limit yourself to just ONE virtual appliance? Nobody forced that upon you. If you feel your customer needs two appliances to get maximum performance for your on-premises SaaS application, then give them two appliances!
How do you do it?
The idea is simple: imagine you were your customer, and give them the ability to scale the same way you scale your hosted SaaS application.
Providing your customer with more freedom, and the ability to outgrow one simple virtual appliance has many benefits. It translates to more sales since you can support your customer’s growing business.
If you expect your customers to outgrow a virtual appliance and require more resources (across multiple physical servers), then it’s a great idea to give them the ability to change certain settings, give them a few options to easily scale out their private virtual appliance infrastructure.
Conclusion
As usual, feel free to email us if you have any questions. Stop by our chat #Jidoteki on Freenode IRC, or send me a message on Twitter. We’ll gladly answer your questions.
I also encourage you to check out Jidoteki if you’re interested in selling your SaaS, behind the firewall :)