How has Microservices Revamped the Classic SOA Approach?

By CIOReview | Wednesday, August 10, 2016

Development teams often find themselves in distress owing to the utilization of monolithic applications. The applications created as such are not only less reliable, but also have longer development schedules. Traditionally, software developers created large, monolithic applications. Moreover, the rapid translocation to cloud infrastructure has pushed enterprise architects to consider the unlimited scope of microservices, a new approach at application development. This style of architecture incorporates the use of several small microservices to build large complex software applications. The advantage of utilizing these microservices is that they are independently deployable, loosely coupled, language agnostic services designed to address specific business needs. The communication strategy employed for interaction between the microservices is based on language-agnostic APIs such as REST.

The traditional service-oriented architecture (SOA) strategy, where the application components provide service to other components through a communication protocol is an alternative to leveraging microservices. This outlook enables cooperation among software components connected over a network. Multiple services can be run on every computer, and the services are custom-built in a way as to ensure exchange of information between any number of services. However, utilization of such monolithic architectures poses challenges of their own. In scenarios where any part of the architecture would need an update, DevOps teams would have to orchestrate the update, and then redeploy the entire system. Moreover, due to storage of all the source code in the same location, the base code can end up appearing expansive and complex. The updates become more work intensive due to the drawbacks, and the system consequently slows down. As sophisticated applications can be reduced to smaller services, SOA is usually where the breaking down of monolithic applications initiates.

Microservices surface in the previous context acting as a standout solution, separating all of the pieces of functionality to run independently. The striking feature about the approach is that deployment of each microservice can be associated with specific functions, and each of those microservices can be scaled based on individual needs. The microservices can be coded in the most appropriate coding language to realize the application’s function. Single big applications were the standard form of designing applications, but innovative ideas are replacing the traditional process. The key objective envisioned by most of the teams encompassed collaboration towards producing a single deployable unit that covered all the business requirements. The utilization of microservices makes the application complete, distributed, and not monolithic. Failing to apprehend this concept has been identified as a drawback to the strategy.

Development has revolved around writing application in a monolithic layer leveraging the traditional software development lifecycles in a single app server. The concept about microservices is not altogether different from the traditional SOA technique as services form the core part of both. SOA services are designed with an aim to foster enterprise wide reuse, while microservices are created to address much smaller and more specific objectives. Microservices, are thus also coined the term “fine grained SOA”. The scope of both the processes makes them resourceful in different sets of business environment. SOA technique is highly acceptable in technical environments that employ in-house infrastructure. Moreover, the ease of deploying, managing, and collaboration with other microservices, facilitated by the cloud infrastructure, makes the microservices method a highly adoptable one across organizations. The microservices practice encourages enterprise architects to break the app in a manner to easily enable scaling of different pieces of the app. Breaking the apps into separate containers to facilitate intra-application communication rather than inter-application communications is an efficient technique of achieving it. Moreover, the smallest unit of the computer employed is a little Docker container running 10 lines of node.js.

The drive for newer approaches surface from the need for agility, better reliability, improved scalability, and security, which has forced architects to settle for newer techniques like cloud computing and microservices. Though microservices are fundamentally identical to the concept of classic SOA approach, there’s a fine line separating the two. The microservices technique replaces the enterprise-wide recycle or reuse as seen in an SOA strategy with more agile development practices. Classic SOA process focuses on creation of an organization wide architecture which ensures reuse of resources and investments across the organization. The optimum level of reuse can be realized only with orchestration of systems which help in abstraction. This process helps in tying different systems across the silos. The components of the microservices provide agility to the SOA approach for reuse across development teams. The most captivating part about the technique is that it focuses primarily on agility in place of reusability. Basically, a microservice carries the potential to be converted into a SOA, as it initiates from a particular application rather than planning for enterprise requirements and edge cases. The strategy witnesses one application team using APIs within the application to split things apart, and scale services differently.

But, as rewarding as it may seem as a solution, the strategy poses its own challenge while functioning within a dispersed architecture. Determining the precise instances that run specified services can be taxing job. Moreover, the eventual use of multiple coding languages spread out across instances, turning the architecture and its maintenance into something pretty complex. This challenge can also be tackled deploying Docker container technology which helps to isolate these instances using kernel interfaces and enabling multiple instances to run on the same kernel. Meanwhile, the instances are kept isolated from each other.