Here at Coull we’re big fans of Go. Over the years our systems have grown from small PHP apps through to geographically distributed systems serving millions of requests a minute.
Go was developed back in 2007 at Google. It was designed for systems programming, something that C++ was generally used for at the time. The language itself is strongly typed and statically compiled, as well as managing memory with a garbage collector. It also has a great concurrency system. Now nearly 9 years on, Go 1.6 has just been released and has been completely open source for some time. While some of it’s development is still done within Google, a lot more is done outside in the great community that has built up around the language.
The reasons we use Go are numerous but one of the main ones is its speed - both in operation and speed of development. We’ve found it’s pretty easy for competent developers to pick it up and be contributing to the code base in a short amount of time.
Almost all our use cases include a web server and this is one area where Go shines. Its standard library is fully featured but just big enough - it was designed so a developer could have most of it in their head. Go 1.6 also features a stable HTTP/2 server - which as I covered in a previous article (Our impressions of the IAB OpenRTB 2.4) has some advantages in the world of advertising technology.
We wrote our first app in the middle of 2014. It was a simple rewrite of one of our Ad serving systems and it proved that Go was something we should continue to look at. Over the past 2 years we’ve learnt a thing or two about how to use Go in production. It now powers most of our stack - our ad server, our data collection system, and our new exchange. Most of our apps can happily function at a few thousand requests a second on standard cloud hardware which was virtually impossible with PHP.
Our apps span a few different clouds and datacenters, giving us great availability as well as unparalleled agility when it comes to handling unexpected traffic spikes. This is all put together with a home grown cloud orchestration and management framework; we’ve even got a patent for it! Deploying Go apps to this sort of infrastructure is super easy - taking advantage of the fact that Go creates statically compiled binaries, we can push new features a few times a day with confidence.
Our entire stack has had many different faces over the last few years, but with the inclusion of Go we now have a single technology that enables us to innovate quickly and easily and lets us create technology that can drive forward advertising technology.