Microservices

 

you could think of the Microservices Architectural Style as a specialization of SOA. Don't forget that the generally accepted view is that all SOA really is, is four sentences:

  • Boundaries are explicit
  • Services are autonomous
  • Services share schema and contract, not class
  • Service compatibility is based on policy

These tenets of SOA were given to us by Don Box of Microsoft which is ironic since MS then went on to release WCF and then told us to Go Forth and Service Orientate.  Look where  that got us.

Then we have this, from Lewis/Fowler:

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare mininum of centralized management of these services, which may be written

in different programming languages and use different data storage technologies.

From this definition it's clear that microservices fulfill at least the first two tenets (with real emphasis on the second), but it's questionable whether they fulfill the third (I don't really understand tenet 4 so I won't comment).

The reason the third tenet may not hold for microservices is that one of the characteristics of microservices is that they are generally exposed over a RESTful API, which, one could argue, does not expose contract and schema at all (over and above the regular http verbage), as we see from Fowler:

a suite of small services, each... communicating with lightweight mechanisms, often an HTTP resource API

Another way in which a microservices style deviates from SOA is with this prescription:

These services are... independently deployable by fully automated deployment machinery

Following the original tenets of SOA does not prevent me from manually copying my service binaries into my production environment, but with the microservices approach, the service deployment and management should be fully automated.

Service-oriented architecture

A service-oriented architecture (SOA) is an architectural pattern in computer software design in which application components provide services to other components via a communications protocol, typically over a network. The principles of service-orientation are independent of any vendor, product or technology.

In computing, microservices is a software architecture style in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs. These services are small, highly decoupled and focus on doing a small task, facilitating a modular approach to system-building.

Properties of microservices architecture:

It's a kind of architecture

The services are easy to replace

Services are organized around capabilities, e.g. user interface front-end, recommendation,

logistics, billing, etc

Services can be implemented using different programming languages, databases, hardware 

and software environment, depending on what fits best

Architectures are symmetrical rather than hierarchical (producer - consumer)

A microservices-based architecture

 

lends itself to a continuous delivery software development process[citation needed]

is distinct from a Service-oriented architecture (SOA) in that the latter aims at integrating

various (business) applications whereas several microservices belong to one application

only