Sunday, July 7, 2013

Introduction to Service-oriented architecture (SOA)


Welcome to Manish’s blog dear friends,

Well, considering the growth of industries in deferent domains, software plays a major role in their path of growth. Obviously when the demand increases, the production should increase as well to meet and win the competition within the same domain for a particular industry. Therefore software plays a major role at increasing the productivity that cannot be achieved with tolerable number of human resources for a certain company.

If we peek into the time within a decade or two into past, software started to get over the industries making their production level excitingly high.

But eventually with the growth of the industries, productivity of a single software came to a level where no longer an valid option which led lot of leading software companies and motivated young individuals to come up with more sophisticated solutions.
Meanwhile this evolution of software taking place, object oriented programming and open source environment came to the play stage which providing more agile approach for the evolution of the software designs.  

The evolution continues, but came the concept of distributed computer workstations for both synchronize and asynchronies software systems which are comprised with HRIS (Human Resource Information Systems), CRMS (Customer Relationship Management Systems), ERPS (Enterprise Resource Planning Systems) etc.
When it comes to modern days, requirement of software systems reaches to a level of interconnection among number of systems within a company in order to achieve a single goal comprised of chain processes (figure 1.1).


When it comes to SOA, there is absolutely no stand alone software, but a system comprised of number of software. Each software in the system is regardless the programming language and deployed environment.
Assume a company which consumes services of three software as one system over service-oriented architecture. You can’t expect the design and implementation of these three software in the same programming language as well as deployed on the same environment because depending on the behaviour above parameters are subject to change.

For an example, a Service Delivery Platform written in Java and Scala may indicate higher performance than a native C# development but for another application C# could be ideal over Java.
So my point is, depending on the requirement and available resources, development and implementation of software is vary but still has to communicate with other applications within the company in order to fulfil a perfect task. 

In order to achieve the interconnectivity within software system, exposing the inputs and the outputs end points of an application to a common service is crucial. There comes the important of web services based communication.

For an example, a WSDL (Web Service Description Language) based web service which is end of the day XML, can have number of inputs and out puts which can be connected to any client service (another software). Client has no idea about the implementation of the web service, but it simply passes set of arguments expecting a response. Then again web service doesn’t worry about the arguments came from the client, but simply deliver the arguments to the end point (another software) which client pointed. Check out the figure 1.2 for more crystal understanding.



Here on figure 1.2, web service is defined for two inputs from client A and redirect the inputs to client B over ‘To Destination’. Web service doesn’t handle any business login but simply data delivery from one end point to the other. In the given example, client B execute any business logic using inputs from client A came via the web service and return the produced output to the web service. This output also an input to the web service with a destination and it will deliver whatever the output from client B to client A.
Basically the whole idea is, you can fix any number of inputs and out puts to pool of web services regardless the client language or deployed environment as far as the client is eligible to communicate with common interface (web service).

The main advantage of this approach is, you have the freedom of extending the features of the existing system without effecting or disturbing daily processes.
Assume, you’ve integrated a file based governance registry to your system, but eventually you might need to change the governance registry to something else such as WSO2-GREG. What if your system is tightly coupled with the existing governance registry instead of exposing it as a service? I see lot of work there, not to mention the interruption to daily processes. What if you had exposed it as a service? Yes, simply what remains to do is switch down existing governance registry and replaces it with the new one. Less effort, less resources my friends.

SOA gives a loosely coupled environment within a system providing flexibility of maintain, extendibility of the system and the durability with less consumption of resources. 

When you designing a SOA based application, always consider about the dynamicity of the workflows and way of exposing them as services within the boundaries of performance and available resources including time frames. One of the very bad practise of software developers and engineers are fixated to set of frameworks for years. It’s okay to select you own domain such as mobile, web, desktop etc, but always try new frameworks and approaches to your work. If you’re a software developer or an engineer, don’t look into the software in your perspective at first sight, but from the user perspective. 

Hope you got a basic idea about how SOA works and all, I’ll continue my posts on SOA with little bit more weight very soon friends.

Thank you and good luck guys..!

No comments:

Post a Comment