Microservices

Hi, today’s entry is going to talk about an article written by James Lewis and Martin Fowler called “Microservices” in 2014. Basically, by calling microservices, they are referring to like a particular way of designing software applications as suites of independently deployable services. But something interesting is that there is not a precise definition of that type of architectural style, there are only common characteristics around distinct organizations, business capability, automated deployment, intelligence in endpoints and also decentralized control of languages and data. This was the first time I heard this term, and something strange is that despite I didn’t notice about its existence I’d used them sometimes.
Later in the articles, the authors gave us some characteristics that any Microservice Architecture must have. They are the following:
1.     Componentization via Services: This is telling us that by building software, we put together components. So, this architecture uses libraries (with components as a unit of software that in independent) that are broke down into services. (the out-of-process component that communicates with a mechanism as a web service request). 

2.     Organized around Business Capabilities: The microservice approach applies a division splitting up into services organized around business capability. This includes user-interface, persistent storage, and any external collaboration.

3.     Products not Projects: When creating software, we should be looking at them as a group of qualities that are looking for business capability rather than just a bunch of functional code.

4.     Smart endpoints and dumb pipes:  This are telling us that the endpoints must take care of all the domain logic (receive a request, apply logic, produce a response) and pipes must be lightweight message bus that acts as a message router only.

5.     Decentralized Governance: Here programmers should take advantage of any tool they can have access to, so they should be able to use any programming language or use any technology when needed. Also, a programmer should build based on an interface and not on the language.

6.     Decentralized Data Management: As the world’s conceptual model will be different between each system, we should let each service to manage its own database rather that different instances of the same database. (Polyglot Persistence).

7.     Infrastructure Automation: This is simple, it refers to the fact that automated test adds automated deployment.

8.     Design for failure: We should design and create software to be able to tolerate failure, both internal and external services.

9.     Evolutionary Design: We should design and build software capable of evolving over time.

I’m not sure if microservices architecture is the future, but I liked it and I think that using it there would be better quality software out there.



Comments

Popular posts from this blog

Hidden Figures

An Introduction to Metaprogramming