EngineYard Technology Stack
Posted by ezmobius Sun, 24 Sep 2006 19:06:00 GMT
People have been asking me for a little technology overview of how Engine Yard is structured. I’ll give a small run down here.
Our servers each have two dual-core AMD Opterons processors and 8Gigs of ram. The servers don’t have any hard drives in them, just 128Mb ATA flash chips. The servers boot up the Xen dom0(the hypervisor) off of the flash memory. And then the domU’s(user VPS’s) boot off of the Coraid SAN.
The Coraid SAN in the first cluster is 6 terrabytes and uses AoE(ATA over Ethernet) as its data transfer mechanism. So each coraid unit has dual Gbit connections to the cluster. Once the base user OS images are loaded into the domU’s, they then mount your slice’s storage space as a GFS mount off the SAN. This allows you to have multiple slices that all use the same filesystem storage so rails caching just works and the static webservers can also mount the public dir of your rails apps to serve cached and static pages.
Everything in this cluster is redundant so there are two or more of each unit. Coyote Point hardware load balancers with hardware ssl are up front and balance the traffic between the internet and your slices of the cluster. There are also two or more of every type of switch and power source in the cluster. This makes for a very reliable setup and when we need to reboot or cycle any one part of the system we have it set up to leap frog by taking one thing down and back up at a time so your sites don’t have to go down. Or if we privision more resources for you and need to reboot your slices, they do it one at a time.
Now let e explain what a ‘slice’ actually gets you. A slice consists of one Xen VPS running gentoo linux. This VPS only runs your rails application on a cluster of mongrels. So this VPS doesn’t have to run anything else except ruby, rails, your gems, a mongrel_cluster and something small like nginx or pound to balance between mongrels. This allows them to focus on your app and makes them perform very well. So also as part of each slice you get access to clustered mysql db’s, clustered front end static webservers, dns, outgoing mail, subversion and other infrastructure services. The sweet thing is that none of these other services run on your VPS. So a slice is more then just a VPS, it really is a ‘slice’ of the entire cluster architecture. So while one slice is a very nice deployment environment, the real benefits of our service happen at two or more slices. Two is the minumum number of slices to run if you want your rails app to be totally redundant.
The control panel is still under development but will manage your slices and applications easily. You will have environments like production or staging assigned to different slices. The you will take an svn revision or tag of your app and create a packge from it. A package is simply a wrapper around a certain revision of your app with all its versioned gem and unix dependencies. Then you push this package to one of your environments as a deployment. Everything uses acts_as_versioned so you can have the exact info about a certain deployment you made for QA.
EngineYard is kinda like a mini EC2 built only for rails ;)