Skip to main content

Introduction to SOA

SOA (Service Oriented Architecture) is a much discussed architectural model for developing loosely coupled distributed systems. If one asks two people to define SOA one is likely to receive two very different, possibly conflicting, answers. Some describe SOA as an IT infrastructure for business enablement while others look to SOA for increasing the efficiency of IT.
SOA (Service Oriented Architecture) is a much discussed architectural model for developing loosely coupled distributed systems. If one asks two people to define SOA one is likely to receive two very different, possibly conflicting, answers. Some describe SOA as an IT infrastructure for business enablement while others look to SOA for increasing the efficiency of IT. While exactly what defines an SOA is still debated, there is general agreement that it is fundamentally an architectural pattern based on interoperable Services that communicate using messages.
Simple Definition: A loosely-coupled architecture designed to meet the business needs of the organization.
At first glance this definition seems far too simplistic – where is SOAP, web services, WSDL, WS-* and other related standards? A SOA does not necessarily require the use of Web Services – Web Services are, for most organizations, the simplest approach for implementing a loosely coupled architecture.
The fundamental building block of service-oriented architecture is a service. A service is a program that can be interacted with through well-defined message exchanges. Loosely-coupled systems result in loosely-coupled business processes. One of the key benefits of service orientation is loose coupling.
Four Tenets of Service Orientation:
- Explicit Boundaries
- Service Autonomy
- Contract Sharing – Services share schema and contract, not class
- Compatibility Based on Policy
SOA Reference Model: An abstract reference model to describe the various aspects of SOA.
- Expose: A Service Implementation Architecture describes how services are developed, deployed and managed.
- Compose: A Service Integration Architecture describes a set of capabilities for composing services and other components into larger constructs such as business processes.
- Consume: A Service Oriented Application Architecture describes how “composed services” are made available for consumption through as business processes, new services or new end-user applications.
Loose Coupling Is King: Loosely coupled services (it’s actually the consumer and provider that are loosely coupled) have few well-known dependencies, whereas tightly coupled services have many known and, more importantly, unknown dependencies. A system’s degree of coupling directly affects its overall flexibility. The more tightly coupled a system, the more a change in one service will require changes in other services or service consumers.
SOA Benefits and Pitfalls: SOA offers the possibility of being able to plug in new services without disrupting existing operations (business agility). This is especially true if one is using an enterprise service bus.
The potential benefits of adopting service oriented architecture are as follows.
- Faster development and maintenance
- More reusable business logic
- Greater consistency across the enterprise
The potential pitfalls include the following:
- Modelling systems and not the business.
- Ignoring the real users.
- Abstractions at too low a level.
Conclusion: This article is an introduction to SOA. The SOA approach encourages loose coupling between the services that make up an application. While designing services it’s worthwhile to consider the Cohesion and Coupling levels. Low coupling and high Cohesion is often a sign of well structured design.
References:
http://msdn.microsoft.com

Popular posts from this blog

Error : Task Scheduler - This task requires that the user account specified has Log on as batch job rights

In one of the production environment, we were running with low disk space problem because of the logs. To cleanup the old logs created a  task within the scheduler and have specified "Run whether use is logged on or not". The user account we used was the system logged on user. The task was running fine, after few months as a security policy the password expired. Since the old password expired we had to apply the new password for the task also, but this time we decided to create a new account specifically for the task scheduler with password never expire option. While setting up the new user account and password, run into the below issue: "The task required that the user account specified has log on as batch job rights" To fix the issue follow below steps: From Run type "secpol.msc /s" and enter, the local security policy snap in will open. Select "Local Policies" in MSC snap in Select "User Rights Assignment" Righ...

ISAPI & CGI Restriction configuration missing in IIS

In windows 7 by default ISAPI & CGI Restrictions are not configured. To enable ISAPI & CGI restrictions, GoTo -> Control Panel -> Programs -> Click on "Windows features on or off -> Expand Internet Information Services - >Expand World Wide Web Services ->Select CGI and ISAPI extensions and Click OK. After enabling, Check in IIS, Open your IIS and the feature will be available. What is ISAPI and CGI restrictions : ISAPI and CGI restrictions are request handlers that allow dynamic content to execute on a server. These restrictions are either CGI files (.exe) or ISAPI extensions (.dll). You can add custom ISAPI or CGI restrictions if the IIS configuration system allows this.

Implementing Parallelism With A SearchResultCollection

Implementing Parallel.ForEach with a SearchResultCollection: The below piece of code helps to check the given user is a part of the given active directory group. To implement Parallel.ForEach with a SearchResultCollection, do the casting with the SearchResult object and covert it into a list. //// Directory Searcher var directorySearcher = new DirectorySearcher(string.Format("(CN={0})", groupName)); //// Find group var searchResultCollection = directorySearcher.FindAll().Cast ().ToList(); Parallel.ForEach(searchResultCollection, searchResult => {  // enumerate members  var resultPropColl = searchResult.Properties;  Parallel.ForEach(resultPropColl["member"].Cast ().ToList(), member =>  {    var memberEntry = new DirectoryEntry("LDAP://" + member);    var userProperties = memberEntry.Properties;    if (GetUserNameFromProperties(userProperties, "sAMAccountName") == userName)    {      return true; ...