# Go at Heroku
21 Apr 2011
Tags: guest
Summary: _This week’s blog post is written by_ [_Keith Rarick_](http://xph.us/) _and_ [_Blake Mizerany_](http://itsbonus.heroku.com/), _systems engineers at_ [Heroku](http://www.heroku.com/). _In their own words, they "eat, drink, and sleep distributed systems." Here they discuss their experiences using Go._
OldURL: /go-at-heroku

Keith Rarick

Blake Mizerany

##

_This week’s blog post is written by_ [_Keith Rarick_](http://xph.us/)
_and_ [_Blake Mizerany_](http://itsbonus.heroku.com/),
_systems engineers at_ [Heroku](http://www.heroku.com/).
_In their own words, they "eat, drink, and sleep distributed systems." Here they discuss their experiences using Go._

A big problem that comes with building distributed systems is the coordination
of physical servers.
Each server needs to know various facts about the system as a whole.
This critical data includes locks, configuration data,
and so on, and it must be consistent and available even during data store failures,
so we need a data store with solid consistency guarantees.
Our solution to this problem is [Doozer](http://xph.us/2011/04/13/introducing-doozer.html),
a new, consistent, highly-available data store written in Go.

At Doozer's core is [Paxos](http://en.wikipedia.org/wiki/Paxos_(computer_science)),
a family of protocols for solving consensus in an unreliable network of unreliable nodes.
While Paxos is essential to running a fault-tolerant system,
it is notorious for being difficult to implement.
Even example implementations that can be found online are complex and hard to follow,
despite being simplified for educational purposes.
Existing production systems have a reputation for being worse.

Fortunately, Go's concurrency primitives made the task much easier.
Paxos is defined in terms of independent,
concurrent processes that communicate via passing messages.
In Doozer, these processes are implemented as goroutines,
and their communications as channel operations.
In the same way that garbage collectors improve upon malloc and free,
we found that [goroutines and channels](https://blog.golang.org/2010/07/share-memory-by-communicating.html)
improve upon the lock-based approach to concurrency.
These tools let us avoid complex bookkeeping and stay focused on the problem at hand.
We are still amazed at how few lines of code it took to achieve something
renowned for being difficult.

The standard packages in Go were another big win for Doozer.
The Go team is very pragmatic about what goes into them.
For instance, a package we quickly found useful was [websocket](https://golang.org/pkg/websocket/).
Once we had a working data store, we needed an easy way to introspect it
and visualize activity.
Using the websocket package, Keith was able to add the web viewer on his
train ride home and without requiring external dependencies.
This is a real testament to how well Go mixes systems and application programming.

One of our favorite productivity gains was provided by Go's source formatter:
[gofmt](https://golang.org/cmd/gofmt/).
We never argued over where to put a curly-brace,
tabs vs. spaces, or if we should align assignments.
We simply agreed that the buck stopped at the default output from gofmt.

Deploying Doozer was satisfyingly simple.
Go builds statically linked binaries which means Doozer has no external dependencies;
it's a single file that can be copied to any machine and immediately launched
to join a cluster of running Doozers.

Finally, Go's maniacal focus on simplicity and orthogonality aligns with
our view of software engineering.
Like the Go team, we are pragmatic about what features go into Doozer.
We sweat the details, preferring to change an existing feature instead of
introducing a new one.
In this sense, Go is a perfect match for Doozer.

We already have future projects in mind for Go. Doozer is just the start of much bigger system.
