Entry #8: Microservices
“Microservices” is an article written by James Lewis and Martin Fowler and published in March, 2014. The article talks about the concept of microservices, their benefits and mentions some of the companies that are using this architecture approach.
The Microservices Architecture describes a way of designing software applications as suites of independently deployable services. Each one of these services is running its own process and communicating with each other, so when an update is needed, the process of implementing the changes is easier.
The characteristics of microservices are:
- Componentization via Services: The microservice's components need to be gathered into libraries, however, their primary way of componentizing is by breaking down into services that are out-of-process components who communicate with a mechanism such as a web service request or remote procedure call.
- Organized around Business Capabilities: We need to split the services in divisions that are focused on the business capability which includes characteristics like Storage and Interface.
- Products, not Projects: The software developed needs to be acknowledged not as another project, but as a potential product which can be used to improve the whole capability of the business.
- Smart Endpoints and Dumb Pipes: The endpoints should be for the logic of receiving requests and applying them accordingly, while the pipes should be like small messages buses that behave as a message router.
- Decentralized Governance: The developers can use any tool at their disposal, so the product can be done more faster and be delivered in time and form. However, they should also code in any programming language, to use the tools at their fullest, so the product is not language-based, but technology-based.
- Decentralized Data Management: We should prefer letting each service manage its own database, as it can be different instances of the same database technology, this is called Polyglot Persistence.
- Infrastructure Automation: The infrastructure should contain automatic tests and automatic deployment.
- Design for Failure: The software must tolerate the failure of external services.
- Evolutionary Design: We should design software that is capable to evolve in the future.
Article: Fowler, M, Lewis, J. (2014). Microservices. Recovered from https://martinfowler.com/articles/microservices.html
Comentarios
Publicar un comentario