How BuzzFeed Migrated From a Perl Monolith to Go and Python Microservices

How BuzzFeed Migrated from a Perl Monolith to Go and Python Microservices

BuzzFeed have recently migrated from a monolithic Perl application to a set of around 500 microservices written in a mixture of Python and Go. Initially their routing logic was implemented in the CDN but that proved difficult to test and maintain. They subsequently switched to using NGINX for routing.

The site router service is designed to run on top of BuzzFeed’s own Rig platform, which facilitates easy deployment to each of the services in each Amazon Elastic Container Service environment (ECS) they run (test, stage and production). BuzzFeed have built an abstraction layer that allows configuration of the routing service using YAML.

Starting in 2016 BuzzFeed began a re-architecture project moving from a single monolithic application written in Perl to a set of microservices. The main reason for the move was that the Perl application was proving hard to scale, essential given that alone serves about 7 billion page views/month, and the organisation also publishes content to around 30 different social platforms and language editions.