SOA (Service-Oriented Architecture)
What is SOA (service-oriented architecture)?
These services can be built from scratch but are often created by exposing functions from legacy systems of record as service interfaces.
In this way, SOA represents an important stage in the evolution of application development and integration over the last few decades. Before SOA emerged in the late 1990s, connecting an application to data or functionality housed in another system required complex point-to-point integration—integration that developers had to recreate, in part or whole, for each new development project. Exposing those functions through SOA eliminates the need to recreate the deep integration every time.
Note that although SOA and the more recent micro services architecture share many words in common, they are only loosely related and, in fact, operate at different scopes, as discussed later in this article.
There are two major roles within Service-oriented Architecture:
- Service provider: The service provider is the maintainer of the service and the organization that makes available one or more services for others to use. To advertise services, the provider can publish them in a registry, together with a service contract that specifies the nature of the service, how to use it, the requirements for the service, and the fees charged.
- Service consumer: The service consumer can locate the service metadata in the registry and develop the required client components to bind and use the service.
Components of SOA:
- Standardized Service Contract - Services adhere to a service description. A service must have some sort of description which describes what the service is about. This makes it easier for client applications to understand what the service does.
- Loose Coupling – Less dependency on each other. This is one of the main characteristics of web services which just states that there should be as less dependency as possible between the web services and the client invoking the web service. So if the service functionality changes at any point in time, it should not break the client application or stop it from working.
- Service Abstraction - Services hide the logic they encapsulate from the outside world. The service should not expose how it executes its functionality; it should just tell the client application on what it does and not on how it does it.
- Service Reusability - Logic is divided into services with the intent of maximizing reuse. In any development company re-usability is a big topic because obviously one wouldn't want to spend time and effort building the same code again and again across multiple applications which require them. Hence, once the code for a web service is written it should have the ability work with various application types.
- Service Autonomy - Services should have control over the logic they encapsulate. The service knows everything on what functionality it offers and hence should also have complete control over the code it contains.
- Service Statelessness - Ideally, services should be stateless. This means that services should not withhold information from one state to the other. This would need to be done from either the client application. An example can be an order placed on a shopping site. Now you can have a web service which gives you the price of a particular item. But if the items are added to a shopping cart and the web page navigates to the page where you do the payment, the responsibility of the price of the item to be transferred to the payment page should not be done by the web service. Instead, it needs to be done by the web application.
- Service Discoverability - Services can be discovered (usually in a service registry). We have already seen this in the concept of the UDDI, which performs a registry which can hold information about the web service.
- Service Composability - Services break big problems into little problems. One should never embed all functionality of an application into one single service but instead, break the service down into modules each with a separate business functionality.
- Service Interoperability - Services should use standards that allow diverse subscribers to use the service. In web services, standards as XML and communication over HTTP is used to ensure it conforms to this principle.
Advantages of SOA:
- Service reusability: In SOA, applications are made from existing services. Thus, services can be reused to make many applications.
- Easy maintenance: As services are independent of each other they can be updated and modified easily without affecting other services.
- Platform independent: SOA allows making a complex application by combining services picked from different sources, independent of the platform.
- Availability: SOA facilities are easily available to anyone on request.
- Reliability: SOA applications are more reliable because it is easy to debug small services rather than huge codes.
- Scalability: Services can run on different servers within an environment, this increases scalability.
Disadvantages of SOA:
- High overhead: A validation of input parameters of services is done whenever services interact this decreases performance as it increases load and response time.
- High investment: A huge initial investment is required for SOA.
- Complex service management: When services interact they exchange messages to tasks. the number of messages may go in millions. It becomes a cumbersome task to handle a large number of messages.
- SOA infrastructure is used by many armies and air force to deploy situational awareness systems.
- SOA is used to improve the healthcare delivery.
- Nowadays many apps are games and they use inbuilt functions to run. For example, an app might need GPS so it uses inbuilt GPS functions of the device. This is SOA in mobile solutions.
- SOA helps maintain museums a virtualized storage pool for their information and content.
Comments
Post a Comment