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.

Let the bus go

Any Enterprise Services Bus on the market is capable of doing application integration from native adapters. Some ESBs are built on a service bus topology and some on a hub and spoke. Some are modified EAI products with web services support. Almost everyone can manage routing, transformation, logging, and other mediation services. Some have integrated rules support, but should all those features be managed as one single unit as in this picture?



Let's separate things out into a better logical architecture. First, a EAI product mainly support publish and subscribe funtonallity, which is not part of a true SOA. Let the EAI product do what it's supposed to do (i.e. integrate applications natively) and expose required functions as web services.

Secondly, break out rules, process, and service registry and make them accessable through web services. Expose web services from the master data and use a common mediation layer in between all enterprise services and the consumer layer. This way you will virtualize any application (including your EAI product) and keep all physical services under one umbrella.



Using mediation will get rid of the service bus architecture, which really is a questionable topology. With mediation, agents will not be necessary because the physical service will need no management. The mediation controls all traffic and will be the place for manage versioning, enrichment, etc.

Can we become slaves under the BPMS



At the beginning there were just common sense. Then we turned our common sense into experiences and after that routines and finally processes. People went from processes to process automation where the process were governed by IT-systems.

These systems were called BPMS which gave the impression of agility in terms of process changeability. They managed processes, measured the efficiency, simulated and improved the processes. Each new lap around the BPM cycle took away a part of the original common sense. We gave it a few laps more and then the processes were finally based on everything except common sense.

Could that be a real scenario with BPMS?

Process Orientation and Separation of Concerns

Suppose you have the following sequence of a loan process:

After pre-qualification has been made and if the value is greater than $1000, send an approvement task to a loan approver using email.

When implementing this process sequence, a couple of questions pops up related to Separation of Concerns (SoC):

- What if the approvement rule changes to "if the value is greater than $1000 and age is less then 21"?
- What if email is not enough for notification mechanism and we want to add SMS messages?
- What if loan approvers need help from other roles?

Putting to much information details into a process implementation will not result in a good SoC. Process implementations should only be modified when the process changes, not when rules or services are. Instead of implementing all details directly into a process engine, try to split your process sequence like this:

The When - "After pre-qualification has been made" goes into the process engine
The If - "if the value is greater than $1000" goes into the rules engine
The What - "send an approvment task" goes into the process engine
The Where - "a loan approver" goes into the mediator
The How - "using email" goes into the mediator

Good design often lead to less visability, and this is no exception. If the process says "using email" or "if the value is greater than $1000" then the implementation should say the same to reach good visability. But visability is not that important compared to using the right model (based on processes, rules, and services) and implementing it with a good SoC.

BPEL4People to OASIS

The BPEL4People specification has been submitted to OASIS by a number of vendors including IBM, Oracle, SAP AG, Adobe Systems Inc. and Active Endpoints Inc.

More posters

Here is a WS-* poster I found. Could be nice on the wall beside your bed.

BPMN Poster

Here is a BPMN poster I found at Keith Swanson's.

BPM - Centralized or not?

I attended a panel discussion at BPM in Action virtual conference today. I took the chance to ask whether the panel think BPM will be implemented in an enterprise centralized fashion (orchestrating enterprise services) or as a part of applications.

Dr. Jeffrey Sterllings answered by saying that the future of BPM will be a centralization of process implementations. Traditionally BPM has focused on a cross-functional process level. That means processes integrating applications within different organisational units (such as marketing, sales, finance, etc). But are those cross-functional processes really the most interesting to manage and measure, or is it the processes within a function/application?

For me it feels like a déjà vu, the whole centralization idea. EJB failed big time when trying to be the one and only point of integration to enterprise data. Will the BPMS fail for the same reasons, trying to be the one and only point of integration to enterprise services.

Vendors like PeopleSoft, SAP and other will not stand still watching their applications being disassembled into small services to be orchestrated in a centralized BPMS. They will probably provide BPM support as part of their own applications. And I'm affraid that every custom build application will host their own process implementation with more or less support for BPM. A call centre application would probably implement its own workflow engine, since the whole idea is to manage and measure the sequential activities. Same goes for a CRM and for a lot of other applications in an enterprise.

It will also be interesting to see if other vendors will follow Microsoft and provide a process engine framework for ISVs. Workflow Foundation supports process management and can be hosted in any .NET application.

How, what, when and why SOA?

After taking part in a recent discussion on SOA, I would like to say that SOA doesn't answer the questions How, What or even When in terms of use, but do answer the question Why.

How?
There is a misunderstanding that SOA has something to do with how people should implement their services or group them in types of service behaviors. SOA makes no difference between services implementing master-data, processes, use-cases, entities, identities, rules, or legacy adapters nor does it care. To SOA a service is just a service.

What?
SOA doesn't require a specific message-passing technology but Web Services is preferred for obvious reasons.

When?
SOA is not suitable in all situations - but that isn't up to SOA to decide. The answer here is dependent upon the how and the what described above.

Why?
SOA answer the why-question with - to achieve business agility. Not by how services are implemented or with what technology is used, but with service management - the things that happens between the 2 service endpoints during a call. Things like versioning, routing, filtering, virtualization, en/decryption, en/decoding, monitoring, transformation, logging, translation, billing, validation, etc - all packaged in a nice runtime governance tool.

Why patterns?!

Why can't you find a polymorphic pattern for OOD? Because it's so obvious!

Polymorphism is part of the paradigm and part of the oo-languages. It's not obvious how to use polymorphism, but there are no patterns describing it. Design patterns seems to concern ideas not really aimed for a specific software paradigm. I been thinking why patterns play such an important role today. It's just my believe that where ever there is a pattern, there is a shortcoming in the underlying paradigm/languages to solve a specific problem. I'm joining in criticism of patterns.

Cutting slices from a blob

I liked the way Mats Helander described service-orientation. To understand the good thing about SOA you really need to see it from the business perspective. From a 10000' view, IT really looks like a big blob. On a 1000' view, you can discern smaller blobs which are applications (aka black boxes or silos). The SOA will help breaking up the applications in small services that can be composed into new services based on policies. The selection for how the services will be used in a composition is up to the heart of the SOA - the mediation layer. The mediation layer (such as WCF or Synapse) will make sure that the policies are applied correctly.

Some people claims that service composition (orchestration) is part of the SOA paradigm. I would rather give credit to BPM for techniques related to service composition.

A Business-Oriented Architecture

While some people keep fighting for their knowledge domain, the world change around them. I'm talking about program languages, design tools and runtime engines, still using object-orientation as a model for implementing a business critical system. Since the early 90th object-oriented architectures have been the main technology platform for building solutions for business. What we got with us from those years is that technology driven view point of software development is bad. Whether an object-centric perspective helped the programmers understand the business or not isn't relevant. What we do know is that noone else understood the object model. Lot of initiatives have tried to bridge between the business and the OO model. Most of them have just made it worse, with really high cost as a result for software development.

No, there's a need for a new, better model for designing software. Something that the business can relate to, something that everyone can relate to. Processes and services are keys to this new model. We have all heard all the great stuff we can do with SOA and BPM, but what are the differences and can they play together?



A process-oriented architecture (POA) fits a company that's frequently changing and improving their business processes. This architecture supports a process improvement life cycle where bottle necks and bad design are found and adjusted using analyzis tools. A POA is a platform using a transparent model for business processes that aligns the business with IT very well.

A service-oriented architecture (SOA) on the other hand suites a company reorganizing their business structure frequently (such as out-sourcing, mergers and acquisitions, internal reorginization, etc). The main goal with a SOA is to control the services based on policies. These policies are defined in the service management framework. A SOA gives the agility in a business where services easily can be controlled from using service governance. A SOA will provide the virtual service mediation layer between the service consumer and the service producer where loosely coupling is crucial.

Normally a company would agree that both transparency and agility is important for their business. The only way to achieve this is by taking the road from OOA to a business-oriented architecture (BOA). This is a platform where the best from BPM and SOA is combined. People from the BPM community call this platform BPM 2.0, while some call it SOA 2.0. I think something neutral as BOA is more diplomatic.

The next question would be to ask which way is more natural to go from OOA to BOA, the red or the blue road. I would say the red because SOA is the foundation for a successfull POA.