For the past few weeks, part of the development team at Codacy has been working on breaking our application into small microservices, following the ideas learned from this book.
We seem to have a perfect fit; a big monolithic application, with several sub-components that have a clear bounded context; having been built on top of Akka, we can clearly identify several parts of the system that are natural candidates for this.
Historically, on Codacy, we deploy several analysis servers that are composed of several subsystems, containing all the required funcionality to properly analyse a project. When we need more computing power, we just deploy more instances of the application.
Although this enables us to quickly grow and scale our application, it is not very performant; sometimes, we just need to scale one individual component in our application. For example, when analysing big PHP projects, we only require more computing power on the PHP engine, and not on any other system.
Using microservices, we aim to be able to quickly grow the individual components that are under heavy load, not only scaling the application by launching new servers but, on each server, only launching the components required to perform quicker analysis. (more…)