Author Archives: evan

Blog about web scalability and performance by one of the lead engineers at Twitter.

ideal hdtv settings for xbox 360

My XBox 360 broke, and since my new one supported HDMI, I reworked the connection to the TV (a Samsung PN50A450 plasma). It’s tricky to get the best performance out of the combination so I wanted to mention it here. scalers Even though the HDMI connection is digital, both the XBox and the TV have [...]

memcached gem performance across VMs

Thanks to Evan Phoenix, memcached.gem 1.3.2 is compatible with Rubinius again. I have added Rubinius to the release QA, so it will stay this way.  The master branch is compatible with JRuby, but a JRuby segfault (as well as a mkmf bug) prevents it from working for most people. vm comparison Memcached.gem makes an unusual [...]

simplicity

Maximizing simplicity is the only guaranteed way to minimize software maintenance. Other techniques exist, but are situational. No complex system will be cheaper to maintain than a simple one that meets the same goals. ‘Simple’, pedantically, means ‘not composed of parts’. However! Whatever system you are working on may already be a part of a whole. [...]

performance engineering at twitter

A few weeks ago I gave a performance engineering talk at QCon Beijing/Tokyo. The abstract and slides are below. abstract Twitter has undergone exponential growth with very limited staff, hardware, and time. This talk discusses principles by which the wise performance engineer can make dramatic improvements in a constrained environment. Of course, these apply to [...]

distributed systems primer, updated

Well, it’s been a long time. But! I have five papers to add to my original distributed systems primer: coordination CRDTs: Consistency Without Concurrency Control, Mihai Letia, Nuno Preguiça, and Marc Shapiro, 2009. Guaranteeing eventual consistency by constraining your data structure, rather than adding heavyweight distributed algorithms. FlockDB works this way. partitioning The Little Engines [...]

object allocations on the web

How many objects does a Rails request allocate? Here are Twitter’s numbers: API: 22,700 objects per request Website: 67,500 objects per request Daemons: 27,900 objects per action I want them to be lower. Overall, we burn 20% of our front-end CPU on garbage collection, which seems high. Each process handles ~29,000 requests before getting killed [...]

scribe client

I’ve released Scribe 0.1, a Ruby client for the Scribe remote log server. sudo gem install scribe Usage is simple: client = Scribe.new client.log(“I’m lonely in a crowded room.”, “Rails”) Documentation is here. about scribe The primary benefit of Scribe over something like syslog-ng is increased scalability, because of Scribe’s fundamentally distributed architecture. Scribe also [...]

ree

We recently migrated Twitter from a custom Ruby 1.8.6 build to a Ruby Enterprise Edition release candidate, courtesy of Phusion. Our primary motivation was the integration of Brent’s MBARI patches, which increase memory stability. Some features of REE have no effect on our codebase, but we definitely benefit from the MBARI patchset, the Railsbench tunable [...]

memcached gem release

One of the hardest gems to install is no more. It’s now easy to install! Memcached 0.15 features: Update to libmemcached 0.31.1 Bundle libmemcached itself with the gem (antifuchs) UDP connection support Unix domain socket support (hellvinz) AUTO_EJECT_HOSTS bugfixes (mattknox) Install with gem install memcached. Since libmemcached is bundled in, there are no longer any [...]

up and running with cassandra

Cassandra is a hybrid non-relational database in the same class as Google’s BigTable. It is more featureful than a key/value store like Riak, but supports fewer query types than a document store like MongoDB. Cassandra was started by Facebook and later transferred to the open-source community. It is an ideal runtime database for web-scale domains [...]

Follow

Get every new post delivered to your Inbox.

Join 66 other followers