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.

SOA is just an enabler

Enablers are things that realize the potential of something else. That something use the enabler as a foundation for its own success. An enabler is by it self not worth too much.

Drivers are things that see the potential in other things. A driver can be something that makes use of that other thing, and makes it interesting.

When a driver and an enabler come into a direct relationship, you got a strong pair. Let's take XML and Web Service for example. XML is an enabler for Web Services and Web Services is the biggest driver for XML. XML and Web Services is a strong pair.

Another example is SOA. SOA without Web Services is not an option in this millennium and what would Web Services be without a good organized and managed SOA?

So why are we building an SOA? What drives an SOA? Lot's of things, but the most obvious one is Business Process Management (BPM). BPM is a good driver for SOA where services are used to build up end-to-end process implementations. One could argue if BPM has a value without enabled by a SOA, and I strongly agree. A BPM should be leveraging a SOA.

Building cross-functional process implementations is interesting for a couple reasons like, visibility, agility, etc. But the one with most business value is Performance Management (CPM). CPM will definitely be enabled by BPM since process implementations are fastest way to produce accurate performance values on demand.

ODE graduated from incubation

I've only been following ODE from using Intalio but now I downloaded the bits to try it out. Together with Eclipse BPEL Editor you can build your orchestrations pretty easy. Not as a nice as ActiveBPEL and ActiveEndpoints's BPEL Designer. I will try out in more depth another time.

Read more here.