Last week we had the chance to get in touch with Aleksandar, one of the creators of the very first and most useful microservices that we’ve developed. We interviewed him and we found out that while working on MyGreatRecipes, the digital platform for sharing and searching recipes, Microtica’s team managed to create a powerful Search engine microservice.
CAN YOU DESCRIBE THE PROCESS OF CREATING THE SEARCH ENGINE MICROSERVICE SHORTLY? WHAT WAS THE NEED AND WHERE DID IT ALL BEGIN?
When we were laying down the architecture for the MyGreatRecipes project, the need arose for isolating the search function for the recipes into a separate microservice. This decision allowed us to develop and scale this important function separately from the other app functionalities. Additionally, this enabled us to reuse the same codebase for other projects.
WHAT WAS THE MOTIVATION BEHIND CREATING THE SEARCH FUNCTION AS A SEPARATE MICROSERVICE?
The main purpose was to isolate the business logic of the search function into a distinct service, one that will scale on its own and can be reused for other projects.
WHAT PROBLEMS DID YOU FACE WHEN CREATING THE SEARCH SERVICE AND HOW DID YOU SOLVE THEM?
One problem was the indexing of the content distributed in different databases. Another issue was the prioritization of the content i.e. placing appropriate weights on the search results based on recipe title, description, ingredients, and preparation sequence. We used the REST API of the search engine to allow us to use these functionalities. Thus, we were able to provide the most relevant search results to the users.
WHAT MAKES THIS SEARCH ENGINE UNIQUE?
This Search engine offers higher flexibility and sustainability by itself. Furthermore, our search function is independent from the other services that impose certain rules, restrictions on the small stacks of shared functionalities.
HOW DID THE IMPLEMENTATION OF THE SEARCH FUNCTION IMPACT THE WHOLE PROJECT?
The search functionality was one of the main customer demands on this project. This enabled more content to be easily reached by the users.
WHAT WERE THE MAIN DIFFERENCES BETWEEN BUILDING THIS FUNCTIONALITY AS A PART OF A MONOLITH APPLICATION AND BUILDING IT AS A MICROSERVICE?
Building microservice architecture is less time consuming and cost effective because of the reusability of the code/microservice in other projects. Additionally, by using microservices, the codebase navigation is made easier. This is important when new team members join because they will be able to come up to speed quickly and start working on improving the functionalities of the search engine. Finally, building a highly interdependent system/app that is hard to manage and maintain is avoided by using microservices architecture.
WHAT IF THIS FUNCTIONALITY WAS BUILT INTO A MONOLITH STRUCTURE?
There would be two possible problems with that. We know that the quality code that was produced would not be reusable in other projects. Another problem is the horizontal scalability, i.e. the distribution of the service on multiple servers when needed.