It’s a subset of SOA style that develops 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. Those services are built and deploy independently.
|Cost effective to scale||Deep learning curve|
|Preserve modularity||Sometimes it might be hard to define boundaries|
|Availability||Have to pick a messaging mechanism|
|Multiple platforms, technology independent|
|Easy adaption to cloud|
It’s an architectural style that is widely adapted by enterprise to build applications as a collection of services.
|Easier to reuse components as services||High cost in upfront development|
|Services as contracts / interfaces||Complex service management|
|Scalability with load balancing|
|Upgradation: easier to roll out new version of services|
It is a traditional architecture type which has been widely used in the industry. It is typically technology-focused and has 3 layers for entire application – user interface, business logic and database access, and they’re usually tightly coupled.
|Simplicity||Very large code base hence hard to make changes|
|Consistency||One module failure affecting entire system|
|Inability to easily adapt to new technology|