Prepare for multitenancy

I quote from Wikipedia:

"Multitenancy refers to the architectural principle, where a single instance of the software runs on a software-as-a-service (SaaS) vendor's servers, serving multiple client organizations (tenants). Multitenancy is contrasted with a multi-instance architecture where separate software instances (or hardware systems) are set up for different client organizations. With a multitenant architecture, a software application is designed to virtually partition its data and configuration so that each client organization works with a customized virtual application instance."

A normal situation today would be a company cutting out a functional unit within in the organization to make it autonomous and reusable for new customers (Pict 1). This is the way companies do controlled out-sourcing. Another out-sourcing scenario would be to cut off the function and replace it with something total new on the market.



Picture 1: Cut-off-and-reuse scenario.


In the cut-off-and-reuse scenario the new company will most often be required to work with multiple customers. As wikipedia describes it, you can do it in several ways from a system perspective.

1) Hardware Virtualization (multiple OS-instances on the same hardware running the same application)
2) Application Virtualization (multiple application instances on the same OS running the same application)
3) Access Virtualization (multiple remote desktop users one the same OS/application instance)

These three alternatives are all shortcuts to be able to host multiple clients in the same system. The good side with this is all the operational support you get from infrastructure support like Microsoft Virtual Machine Manager and Citrix. But the bad thing is the lack of reusability and flexibility you get from these solutions.

Going from one client to multiple clients would most often result in a new architectural dimension. This new dimension will not just require more or extended database schemas, but also different UIs, different rules, processes and an open architecture where services can be composed, reused and differentiated for different customers. The fourth alternative calls for multitenancy.

4) Multitenancy (design for multiple users on the same application)

Q: How do you design a system to be prepared for multitenancy?

A: The book is not yet written, but the author who does will be rich and famous. I put my money on Full SOA Applications.

No comments: