Following on from my post about our WSO2 Cloud announcements, I felt it was important to talk about how I see Cloud intersecting with SOA.
Before we talk about Cloud, I want to quickly review where SOA came from. Most of us who started our IT careers in the 80s and 90s will clearly remember the pre-web Enterprise environment. Of course, so will everyone else - because that legacy is still with us. The typical systems were monolithic, complex applications that were completely self-reliant. Any interfacing with other systems was done through batch dumps. Applications grew and grew and grew into monsters because the only option was to enlarge the application - inter-application connectivity was too complex and unreliable to envisage.
The web changed all that, didn't it? Well actually, no. Many web applications are actually inherently monolithic too. Of course there are plenty of web applications that do communicate well with other systems, but they are still in the minority.
How about Cloud systems? Unfortunately, as I look around at the harbingers of Cloud Computing, many of the applications I see are fundamentally built with very little concern for Enterprise Architecture. The focus has been on elasticity. Elasticity is a great feature, but for many applications it is overkill. However, connectivity, partitioning, separation of concerns, and loose coupling are all key to making applications live and grow. As I have blogged about before, the key to effective applications is to ensure that they are not static but can change and improve and re-focus as the business demands.
My strong belief is that Cloud based systems must be built on SOA and modern Enterprise Architecture principals if they are to be effective. In many ways the issue is this: today's cloud applications are often well-defined, clean, insular applications. That is because the typical messy, interconnected enterprise app simply cannot be built in the cloud today. The data isn't available and so companies looking to create cloud applications tend naturally to avoid those. But over time, as these cloud applications grow and more appear, the interconnectedness with each other and with internal data and applications will grow and we will end up with the twisted balls of spaghetti that we've spent the last 10 years unpicking in the Enterprise.
My advice? Don't do it! Start with a simple but clearly defined SOA/Enterprise Architecture for your Cloud applications and in three years time you can look smugly at your competitors as they struggle to do things you find easy.
Paul:
ReplyDeletewith all due respect, I am not sure it is fair to say:
>> Elasticity is a great feature, but for many applications it is overkill.
I agree in the general sense for applications, but for SOA and services in particular, elasticity is a key design consideration. As your service becomes popular, and reused, elasticity will prove a key success factor for reuse.
So I would advise people to design their services in the Cloud in an elastic way, unless, they have a very good reason not to.
JJ-
JJ
ReplyDeleteI do agree. I'm simply pointing out that if you did a survey of cloud applications today, and understood how many of them are motivated by elasticity vs self-service, I would venture that elasticity is important to a small number of them. Elasticity is the cool feature, but its not the real driver always.
BTW the WSO2 Amazon instances are all elastically scalable using our intelligent load balancing.
Paul