Microservice architecture is an architectural style in which applications are decomposed into loosely coupled services. With microservices we develop applications that offers
Increased modularity,
Making applications easier to develop
Making applications easier to test
Making applications easier to deploy
Easier to maintain
Faster time to market
With increased modularity we can develop different components while minimizing impact to other parts of the system. When the impact of change is low, our developers can make significant progress towards solving business problems, rather than spending time fixing the consequences of a change.
We achieve easier applications development with microservice architecture by carefully splitting up applications into independent modules.
Each module can have it’s own language which best fits the module.
We carefully consider all application requirements to choose a database for each module. There is no centralized database and we are free to use NoSql or relational database depending on a module.
Our teams work independently on services. Smaller development team is more familiar with the code
By developing applications in smaller increments we test services independently. Continuous delivery of smaller services makes the testing, debugging and deploying process easier when testing teams and developers work simultaneously on a single service.
Communication between services is done via API, typically REST service is being used, because there is a little transformation, messages are thin.
Another communication pattern that we leverage in a microservice architecture is message-based, or event-driven communication. The service does not communicate directly with each other, instead the services push messages to a message broker, that other service subscribe to.
Microservices works with loosely coupled services, we don’t need to rewrite the entire codebase to add or modify a feature. We make changes only to a specific service. By developing applications in smaller increments that are independently testable and deployable, we can get the application and services to market quicker.
Microservices architecture is not for every business. Business that have embraced microservices have significant benefits. While microservices looks promising, not every business can capitalize on the microservice architecture
Organization should be able to instantly provision resources to keep up the pace required to make the most of microservices. If it takes a days or months to provision a server, the organization could run into serious trouble. Organization should be able to quickly deploy new services or applications
Organization should incorporate devops best practices, so developers should be able to be focused on developing new features and devops team should be responsible for deployment and production.
Organizations should have robust monitoring system to effectively monitor and manage the whole infrastructure. The service could fail, or the server can go down. It might be impossible to track down the issues when they arise without a monitoring system.
https://dzone.com/articles/migration-to-microservices-architecture
https://dzone.com/articles/microservice-architecture-and-design-patterns-for
https://dzone.com/articles/microservices-tutorial-learn-all-about-microservic