monolith to microservices transformation
this was the second large project i worked on at bizigo. we worked on transforming the company’s existing corporate travel planning platform from a monolithic structure into a microservice-based architecture.
it was mainly a transformation project. the goal was to split the existing monolithic web application into two main parts: frontend and bff api. after that, the bff api became the layer that communicated with the other microservices.
the main parts i worked on were:
backend and frontend were separated from each other.
the data needed by the frontend was moved behind different microservices and exposed through the bff api. so the frontend only had to communicate with bff api endpoints.
some sql queries were rewritten from scratch. especially read-heavy parts were moved to dapper for better performance and more control over the queries.
some full-text search logic that was previously handled in sql was moved to elasticsearch. we defined custom analyzers for these scenarios and reduced the search load on the sql side.
flight and hotel search results were dynamically indexed into elasticsearch and served from there. this improved search speed and reduced unnecessary provider calls.
elasticsearch was also used more actively for listing and filtering scenarios. many filter options were generated on the elasticsearch side, so sql queries became simpler and list pages became faster.
existing email templates were rewritten and integrated with the related microservices.
some reservation flow data was moved from database-based handling to redis.
some multi-language data was also moved to redis.
after these changes, frontend and backend teams were able to work more independently. since the frontend was fed through the bff api, ui changes became faster and easier to manage.
the system also became faster, easier to maintain, and easier to troubleshoot. since it was split into smaller services, we could deploy only the affected parts when needed. with blue-green deployment, we were able to release changes without users really feeling the transition.