Our app needs Microservices?

2 January, 2020 |

When we start creating an application, we usually select a single programming language and a single database manager, this is how we manage to develop a single back-end application. However, when the application we have developed is reaching many more users, we also need a greater number of resources and we will need to annex much more functionality.

This functionality needs to be maintained and it is right at this point where the application becomes more complex, because it is growing in both code and functionality, so it is very likely that we have to divide our application to manage it in a much more efficient.

It is there where the microservices alternative arises as a way to be able to section an application of the backend into different parts that will be communicated separately. In this way, each of these parts can communicate with each other and have a specific function and each one can evolve independently of the others, without interrupting.

What are microservices?
They are a type of architecture that serves to design applications by breaking down their main functions into independent services, which ideally will work separately (and also, will fail separately) without affecting others.
It should be noted that this architecture is one of the most recommended for large applications, because it is also possible to develop them in different programming languages, even in different databases. This is one of the ways in which you can create a giant application and manage to manage its complexity with all success.

What are microservices for? Do I need microservices for my App?
Microservices are used for software development that require a high level of scalability and availability, agile development and that are also easy to maintain, in other words, they are often used for applications that are really large.

This microservice architecture is perfect for these huge applications and is especially aimed at those that are already functioning and that need a better way to manage to continue growing, because they are generating a greater mass of users than in turn, They generate a larger volume of data. An example of the so-called huge applications can be Amazon, Ebay, Netflix, Uber, among others.

To find out if your app will need microservices, simply consider if it is beginning to expand, if it begins to have high requirements for scalability, portability, flexibility and availability. But if you’re just starting with an application, it’s probably best for you to apply a monolithic architecture to your project.

Main advantages

  • With the growth of the application, the complexity of its management does not become more difficult as it happens with a monolithic architecture where as the application expands, the number of lines also grows, the documentation becomes increasingly complicated and seems impossible make complex modifications; In addition, the inconvenience arises that new developers cannot start working on the project. All these issues that used to be a problem with microservices have been perfectly resolved.
  • It is possible to maintain development teams that work together on the same project without any difficulty. For example, you can have microservices developed in javascript using mongoDb with a specialized team for it, but it is also possible to have another microservice developed by a Java team that uses MySQL or Oracle as a database, without problems to join your work and make it work within the same application.
  • It greatly favors the reuse of code of which many can be products already packaged for use or can be their own developments that can also be used for different applications within the same company.
  • The reduction of time to market is another advantage. Thanks to microservices, it is much faster to develop functionalities that reach the customer or the end user faster.
  • The microservices support the evolution of the project in a simpler way, since it is easier to make isolated modifications because in the end each microservice has a functionality documented and normally exposed with an Api, so it is quite easy to make modifications to a small component to refactor it or to optimize it, unlike a monolithic architecture.
  • In addition, microservices allow much more efficient scalability, enables the developer to install only part of the application. For example, if it is believed that an ecommerce will receive a large number of calls, it will only be necessary to scale the front-end part and the back-end part can be left without scaling, not counting that there are a lot of solutions for scalability and the high availability of any application using microservices.

Some disadvantages

  • Difficulty organizing work at the beginning in mobile development teams: In small applications it can be much easier to develop a monolithic architecture than a microservice architecture, where it will be more complicated to lift it and much more complex to manage it.
  • It requires complex integration tests.
  • Greater complexity to achieve efficiency in software development teams: naturally, having microservices, new needs arise, for example, having a wide variety of services will require a “orchestrator”, specialized software that already has the configuration of all the application, where at any time you can press a button and the software will lift all microservices and configure them to run all at the same pace.
  • Another of the needs that arise when having microservices is a registration and discovery service, especially if your application has scalability and elasticity properties, that is, at any time you may need what service to scale according to demand or when developers do so. require.
  • Centralized log registers to integrate all the elements: a central configuration service is necessary so that it is not necessary to configure service by service, but a centralized service can be provided so that when a particular service is lifted, this register is arranged to look for the configuration that corresponds to it.
  • If you have a large number of services, integrating and managing them can be very complex: in this sense, communication in microservice architectures is much more complex since synchronous and asynchronous communication is available.

Summary
As human knowledge about software progresses, many technology companies find increasingly ingenious and creative ways to increase the quality and efficiency of the end result, thus making it possible for the end user to obtain a quality product.

The issue to consider is that consumers and users become increasingly demanding and demand superior products, forming a virtuous circle that is difficult to keep up with.

To learn more about how we can optimize your mobile application, visit our Mobility section.