Skip to content

Instantly share code, notes, and snippets.

@renatamarques97
Last active June 4, 2020 18:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renatamarques97/a30c44c2250a0f7a753b3d758fa4817f to your computer and use it in GitHub Desktop.
Save renatamarques97/a30c44c2250a0f7a753b3d758fa4817f to your computer and use it in GitHub Desktop.

Microservices

Advantages

  • Independent components. Firstly, all the services can be deployed and updated independently, which gives more flexibility. Secondly, a bug in one microservice has an impact only on a particular service and does not influence the entire application. Also, it is much easier to add new features to a microservice application than a monolithic one.
  • Easier understanding. Split up into smaller and simpler components, a microservice application is easier to understand and manage. You just concentrate on a specific service that is related to a business goal you have.
  • Better scalability. Another advantage of the microservices approach is that each element can be scaled independently. So the entire process is more cost- and time-effective than with monoliths when the whole application has to be scaled even if there is no need in it. In addition, every monolith has limits in terms of scalability, so the more users you acquire, the more problems you have with your monolith. Therefore, many companies, end up rebuilding their monolithic architectures.
  • Multiple teams contribute to the project
  • Individual parts should be activated, deactivated, or rolled out on specific users or groups
  • External developers should be able to extend features
  • The feature set of the project is growing on a daily or weekly basis — without impacting the rest of the system
  • Development speed should be a constant despite a growing application
  • Different teams should be able to use their own tooling

Disadvantages

  • Extra complexity. Since a microservices architecture is a distributed system, you have to choose and set up the connections between all the modules and databases. Also, as long as such an application includes independent services, all of them have to be deployed independently.
  • System distribution. A microservices architecture is a complex system of multiple modules and databases so all the connections have to be handled carefully.
  • Cross-cutting concerns. When creating a microservices application, you will have to deal with a number of cross-cutting concerns. They include externalized configuration, logging, metrics, health checks, and others.
  • Testing. A multitude of independently deployable components makes testing a microservices-based solution much harder.
  • In Front-end, microservices are slow because the browser needs to search for code in multiple locations.

Scenario

  • Microservices expertise. Without proper skills and knowledge, building a microservice application is extremely risky. Still, just having the architecture knowledge is not enough. You need to have DevOps and Containers experts since the concepts are tightly coupled with microservices. Also, domain modelling expertise is a must. Dealing with microservices means splitting the system into separate functionalities and dividing responsibilities.
  • A complex and scalable application. The microservices architecture will make scaling and adding new capabilities to your application much easier. So if you plan to develop a large application with multiple modules and user journeys, a microservice pattern would be the best way to handle it.
  • Enough engineering skills. Since a microservice project comprises multiple teams responsible for multiple services, you need to have enough resources to handle all the processes.

Monolith

Advantages

  • Less cross-cutting concerns. Cross-cutting concerns are the concerns that affect the whole application such as logging, handling, caching, and performance monitoring. In a monolithic application, this area of functionality concerns only one application so it is easier to handle it. Easier debugging and testing. In contrast to the microservices architecture, monolithic applications are much easier to debug and test. Since a monolithic app is a single indivisible unit, you can run end-to-end testing much faster. Simple to deploy. Another advantage associated with the simplicity of monolithic apps is easier deployment. When it comes to monolithic applications, you do not have to handle many deployments – just one file or directory. Simple to develop. As long as the monolithic approach is a standard way of building applications, any engineering team has the right knowledge and capabilities to develop a monolithic application.

Disadvantages

  • Understanding. When a monolithic application scales up, it becomes too complicated to understand. Also, a complex system of code within one application is hard to manage.
  • Making changes. It is harder to implement changes in such a large and complex application with highly tight coupling. Any code change affects the whole system so it has to be thoroughly coordinated. This makes the overall development process much longer.
  • Scalability. You cannot scale components independently, only the whole application.
  • New technology barriers. It is extremely problematic to apply a new technology in a monolithic application because then the entire application has to be rewritten.

Scenario

  • Smaller team. If you are a startup and your team is small, you may not need to deal with the complexity of the microservices architecture. A monolith can meet all your business needs so there is no emergency to follow the hype and start with microservices.
  • A simple application. Small applications which do not demand much business logic, superior scalability, and flexibility work better with monolithic architectures.
  • No microservices expertise. Microservices require profound expertise to work well and bring business value. If you want to start a microservices application from scratch with no technical expertise in it, most probably, it will not pay off.
  • Quick launch. If you want to develop your application and launch it as soon as possible, a monolithic model is the best choice. It works well when you aim to spend less initially and validate your business idea.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment