diff options
Diffstat (limited to 'content/go-at-heroku.article')
-rw-r--r-- | content/go-at-heroku.article | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/content/go-at-heroku.article b/content/go-at-heroku.article index 6663b6c..7fe67ef 100644 --- a/content/go-at-heroku.article +++ b/content/go-at-heroku.article @@ -1,17 +1,18 @@ -Go at Heroku +# 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._ Keith Rarick Blake Mizerany -* Introduction +## -_This_week’s_blog_post_is_written_by_ [[http://xph.us/][_Keith_Rarick_]] -_and_ [[http://itsbonus.heroku.com/][_Blake_Mizerany_]], -_systems_engineers_at_ [[http://www.heroku.com/][Heroku]]. -_In_their_own_words,_they_"eat,_drink,_and_sleep_distributed_systems."_Here_they_discuss_their_experiences_using_Go._ +_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. @@ -19,10 +20,10 @@ 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 [[http://xph.us/2011/04/13/introducing-doozer.html][Doozer]], +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 [[http://en.wikipedia.org/wiki/Paxos_(computer_science)][Paxos]], +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. @@ -36,7 +37,7 @@ 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 [[https://blog.golang.org/2010/07/share-memory-by-communicating.html][goroutines and channels]] +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 @@ -44,7 +45,7 @@ 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 [[https://golang.org/pkg/websocket/][websocket]]. +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 @@ -52,7 +53,7 @@ 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: -[[https://golang.org/cmd/gofmt/][gofmt]]. +[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. |