<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Official Rackspace Blog &#187; Paul Querna</title>
	<atom:link href="http://www.rackspace.com/blog/author/paul-querna/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rackspace.com/blog</link>
	<description>The Official Rackspace Blog</description>
	<lastBuildDate>Tue, 21 May 2013 15:00:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Technology Behind Rackspace Cloud Monitoring</title>
		<link>http://www.rackspace.com/blog/technology-behind-rackspace-cloud-monitoring/</link>
		<comments>http://www.rackspace.com/blog/technology-behind-rackspace-cloud-monitoring/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 19:15:23 +0000</pubDate>
		<dc:creator>Paul Querna</dc:creator>
				<category><![CDATA[Product Discussion]]></category>
		<category><![CDATA[Tips for Devs and Sys Admins]]></category>
		<category><![CDATA[Cloud Monitoring]]></category>
		<category><![CDATA[Cloudkick]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Rackspace Cloud]]></category>

		<guid isPermaLink="false">http://www.rackspace.com/cloud/blog/?p=11119</guid>
		<description><![CDATA[This post originally appeared on Paul Querna&#8217;s blog and we have reposted it here with his permission. Earlier we announced a new product: Rackspace Cloud Monitoring. It is just starting as a (free) private beta, so if you want to try it out, be sure to sign up via the survey here. Transition from Cloudkick [...]]]></description>
				<content:encoded><![CDATA[<p><em><img class="alignright" title="Rackspace Hosting" src="http://c179631.r31.cf0.rackcdn.com/rackspace-logo-blog.png" alt="" width="268" height="82" />This post originally appeared on <a title="Paul's Journal | Blog" href="http://journal.paul.querna.org/" target="_blank">Paul Querna&#8217;s blog</a> and we have reposted it here <em>with his permission</em>.</em></p>
<div>
<p>Earlier we <a title="Announcing Rackspace Cloud Monitoring Private Beta | Rackspace Blog" href="http://www.rackspace.com/cloud/blog/2011/12/15/announcing-rackspace-cloud-monitoring-private-beta/" target="_blank">announced a new product: Rackspace Cloud Monitoring</a>. It is just starting as a (free) private beta, so if you want to try it out, be sure to <a title="Cloud Monitoring Private Beta Survey | Rackspace" href="https://surveys.rackspace.com/Survey.aspx?s=e08d057768e04f09a8cb7811d47b82da" target="_blank">sign up via the survey here</a>.</p>
<h2>Transition from Cloudkick Technology</h2>
<p>Rackspace Cloud Monitoring is based on technology built originally for the <a title="Monitoring | Cloudkick" href="https://www.cloudkick.com/features/monitoring" target="_blank">Cloudkick product</a>. Some core concepts and parts of the architecture originated from Cloudkick, but many changes were made to enable Rackspace’s scalability needs, improve operational support, and focus the Cloud Monitoring product as an API driven Monitoring as a Service, rather than all of Cloudkick’s Management and Cloud Server specific features.</p>
<p>For this purpose, Cloudkick’s product was successful in vetting many parts of the basic architecture and served as a basis on which to make a reasonable second generation system. We tried to make specific changes in technology and architecture that would get us to our goals without falling into an overengineering trap.</p>
<p>Cloudkick was primarily written in Python. Most backend services were written in <a title="Twisted Matrix Labs | Official Site" href="http://www.twistedmatrix.com/" target="_blank">Twisted Python</a>. The API endpoints and web server were written in <a title="Django Project | Official Site" href="https://www.djangoproject.com/" target="_blank">Django</a>, and used <a title="mod_wsgi | Google" href="http://code.google.com/p/modwsgi/" target="_blank">mod_wsgi</a>. We felt that while we greatly value the asynchronous abilities of Twisted Python, and they matched many of our needs well, we were unhappy with our ability to maintain Twisted Python based services. Specifically, the deferred programming model is difficult for developers to quickly grasp and debug. It tended to be ‘fail’ deadly, in that if a developer didn’t fully understand Twisted Python, they would make many innocent mistakes.</p>
<p>Django was mostly successful for our needs as an API endpoint, however, we were unhappy with our use of the Django ORM. It created many dependencies between components that were difficult to unwind later. Cloud Monitoring is primarily written in <a title="Node.js | Official Site" href="http://www.nodejs.org/" target="_blank">Node.js</a>. Our team still loves Python, and much of our secondary tooling in Cloud Monitoring uses Python. [See standalone post: <a title="The Switch: Python to Node.js | Paul's Journal" href="http://journal.paul.querna.org/articles/2011/12/18/the-switch-python-to-node-js/" target="_blank">The Switch: Python to Node.js</a>]</p>
<p>Cloudkick was reliant upon a <a title="MySQL | Official Site" href="http://www.mysql.com/" target="_blank">MySQL</a> master and slaves for most of its configuration storage. This severely limited both scalability, performance and multi-region durability. These issues aren’t necessarily a property of MySQL, but Cloudkick’s use of the Django ORM made it very difficult to use MySQL radically differently. The use of MySQL was not continued in Cloud Monitoring, where metadata is stored in Apache Cassandra.</p>
<p>Cloudkick used <a title="Cassandra | Apache" href="http://cassandra.apache.org/" target="_blank">Apache Cassandra</a> primarily for metrics storage. This was a key element in keeping up with metrics processing, and providing a high quality user experience, with fast loading graphs. Cassandra’s role was expanded in Cloud Monitoring to include both configuration data and metrics storage.</p>
<p>Cloudkick used the <a title="ESPER | Official Site" href="http://esper.codehaus.org/" target="_blank">ESPER engine</a> and a small set of EPL queries for its Complex Event Processing. These were used to trigger alerts on a monitoring state change. ESPER’s use and scope was expanded in Cloud Monitoring.</p>
<p>Cloudkick used the <a title="Reconnoiter | OmniTI Labs" href="http://labs.omniti.com/labs/reconnoiter" target="_blank">Reconnoiter</a> <code>noitd</code> program for its poller. We have contributed patches to the open source project as needed. Cloudkick borrowed some other parts of Reconnoiter early on, but over time replaced most of the Event Processing and data storage systems with customized solutions. Reconnoiter’s <code>noitd</code> poller is used by Cloud Monitoring.</p>
<p>Cloudkick used <a title="RabbitMQ | Official Site" href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a> extensively for inter-service communication and for parts of our Event Processing system. We have had mixed experiences with RabbitMQ. RabbitMQ has improved greatly in the last few years, but when it breaks we are at a severe debugging disadvantage, since it is written in Erlang. RabbitMQ itself also does not provide many primitives we felt we needed when going to a fully multi-region system, and we felt we would need to invest significantly in building systems and new services on top of RabbitMQ to fill this gap. RabbitMQ is not used by Cloud Monitoring. Its use cases are being filled by a combination of <a title="Zookeeper | Apache" href="http://zookeeper.apache.org/" target="_blank">Apache Zookeeper</a>, point to point REST or Thrift APIs, state storage in Cassandra and changes in architecture.</p>
<p>Cloudkick used an internal fork of <a title="Facebook's Scribe | github" href="https://github.com/facebook/scribe" target="_blank">Facebook’s Scribe</a> for transporting certain types of high volume messages and data. Scribe’s simple configuration model and API made it easy to extend for our bulk messaging needs. Cloudkick extended Scribe to include a write ahead journal and other features to improve durability. Cloud Monitoring continues to use Scribe for some of our event processing flows.</p>
<p>Cloudkick used <a title="Thrift | Apache" href="http://thrift.apache.org/" target="_blank">Apache Thrift</a> for some RPC and cross-process serialization. Later in Cloudkick, we started using more JSON. Cloud Monitoring continues to use Thrift when we need strong contracts between services, or are crossing a programing language boundary. We use JSON however for many data types that are only used within Node.js based systems.</p>
<h2>Node.js ecosystem</h2>
<p>We have been very happy with our choice of using Node.js. When we started this project, I considered it one of our biggest risks to being successful — what if 6 months in we are just mired in a new language and platform, and regretting sticking with the known evil of Twisted Python. The exact opposite happened. Node.js has been an awesome platform to build our product on. This is in no small part to the many modules the community has produced.</p>
<p>Here it is, the following is the list of NPM modules we have used in Cloud Monitoring, straight from our package.json:</p>
<ul>
<li><a href="http://search.npmjs.org/#/async">async</a> (rackers patched it)</li>
<li><a href="http://search.npmjs.org/#/cassandra-client">cassandra-client</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/cloudfiles">cloudfiles</a></li>
<li><a href="http://search.npmjs.org/#/command-parser">command-parser</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/elementtree">elementtree</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/express">express</a></li>
<li><a href="http://search.npmjs.org/#/ipv6">ipv6</a> (rackers patched it)</li>
<li><a href="http://search.npmjs.org/#/jade">jade</a></li>
<li><a href="http://search.npmjs.org/#/logmagic">logmagic</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/long-stack-traces">long-stack-traces</a> (rackers patched it)</li>
<li><a href="http://search.npmjs.org/#/magic-templates">magic-templates</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/metrics">metrics</a></li>
<li><a href="http://search.npmjs.org/#/node-dev">node-dev</a></li>
<li><a href="http://search.npmjs.org/#/node-int64">node-int64</a></li>
<li><a href="http://search.npmjs.org/#/node-uuid">node-uuid</a></li>
<li><a href="http://search.npmjs.org/#/nodelint">nodelint</a></li>
<li><a href="http://search.npmjs.org/#/optimist">optimist</a></li>
<li><a href="http://search.npmjs.org/#/sax">sax</a></li>
<li><a href="http://search.npmjs.org/#/showdown">showdown</a></li>
<li><a href="http://search.npmjs.org/#/simplesets">simplesets</a></li>
<li><a href="http://search.npmjs.org/#/strtok">strtok</a></li>
<li><a href="http://search.npmjs.org/#/swiz">swiz</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/terminal">terminal</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/thrift">thrift</a> (rackers patched it)</li>
<li><a href="http://search.npmjs.org/#/whiskey">whiskey</a> (rackers wrote it)</li>
<li><a href="http://search.npmjs.org/#/zookeeper">zookeeper</a> (rackers patched it)</li>
</ul>
<p>Now that our product is announced, I’m hoping to find a little more time for writing. I will try to do more posts about how we are using Node.js, and the internals of Rackspace Cloud Monitoring’s architecture.</p>
<p><em><em>Paul Querna is an engineer on the Rackspace Cloud Monitoring team.  Be sure to check out <a title="Paul's Journal | Blog" href="http://journal.paul.querna.org/" target="_blank">Paul’s blog</a> and <a title="@pquerna | Twitter" href="https://twitter.com/#%21/pquerna" target="_blank">follow @pquerna on Twitter</a>.  Paul also wanted to let you know that <em><a title="San Francisco | Racker Talent" href="http://rackertalent.com/san-francisco/" target="_blank">we are hiring</a> at our sweet new office in San Francisco.</em></em></em></p>
<p><em>Read Paul&#8217;s other post on <a title="Rackspace Open Sources Dreadnot | Rackspace Blog" href="http://www.rackspace.com/cloud/blog/2012/01/05/rackspace-open-sources-dreadnot/" target="_blank">Rackspace Open Sourcing Dreadnot</a>, a continuous deployment tool.</em></p>
<p><em><em><em></em></em><br />
</em></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rackspace.com/blog/technology-behind-rackspace-cloud-monitoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rackspace Open Sources Dreadnot</title>
		<link>http://www.rackspace.com/blog/rackspace-open-sources-dreadnot/</link>
		<comments>http://www.rackspace.com/blog/rackspace-open-sources-dreadnot/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 22:36:42 +0000</pubDate>
		<dc:creator>Paul Querna</dc:creator>
				<category><![CDATA[Product Discussion]]></category>
		<category><![CDATA[Tips for Devs and Sys Admins]]></category>
		<category><![CDATA[Cloud Monitoring]]></category>
		<category><![CDATA[Dreadnot]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Rackspace Cloud]]></category>
		<category><![CDATA[rackspace github]]></category>

		<guid isPermaLink="false">http://www.rackspace.com/cloud/blog/?p=11024</guid>
		<description><![CDATA[At Rackspace we pride ourselves on Fanatical Support in all we do. The public face of Fanatical Support is having knowledgeable people ready to help customers when they need it. But behind the scenes, Fanatical Support means leveraging technology to improve every aspect of the customer experience. The Rackspace Cloud Monitoring team has been working [...]]]></description>
				<content:encoded><![CDATA[<p>At Rackspace we pride ourselves on Fanatical Support in all we do. The public face of Fanatical Support is having knowledgeable people ready to help customers when they need it. But behind the scenes, Fanatical Support means leveraging technology to improve every aspect of the customer experience.</p>
<p>The Rackspace Cloud Monitoring team has been working on ways to improve the lives of our customers by developing tools that will not only deliver a better support experience, but will allow us to deliver the features that our customers need quickly and reliably while avoiding service interruptions. Today we are <a title="Dreadnot | github" href="https://github.com/racker/dreadnot" target="_blank">open sourcing Dreadnot</a>, a piece of technology that enables the <a title="Continuous Deployment in 5 Easy Steps | O'Reilly" href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html" target="_blank">continuous deployment</a> of software.</p>
<p><a title="Dreadnot | github" href="https://github.com/racker/dreadnot" target="_blank"><img class="aligncenter" src="http://c179631.r31.cf0.rackcdn.com/dreadnot-overview.png" alt="" width="500" height="452" /></a></p>
<h2><strong>Continuous Deployment</strong></h2>
<p>Most people who come from a background in large-scale software have a horror story about a failed deployment.  As a reaction to this, many companies have procedures for releasing new builds and manually testing them.  The Cloud Monitoring team chose a different path.</p>
<p>Rather than deploying less frequently with more manual testing, we deploy more frequently, relying upon a culture of test-driven development, code review and extensive quality assurance automation to catch bugs early and minimize service interruptions.  Our maxim is that a new engineer should be able to push code into production on their first day on the job.</p>
<p>This helps us bring the Fanatical Experience to our product by ensuring that the time between a reported bug and the production bug fix is as short as possible ensuring a continuous flow of improvement to our software.  One might assume that extra time was wasted in building more sophisticated testing and infrastructure, however it pays off with more efficiency in other areas.</p>
<p>For example, when dealing with slower deployments, there is a constant overhead associated with diverging release and development branches, which becomes more complicated as more members work on new features simultaneously.</p>
<p>As the change surface of the release increases in size, assuring that any pushed build contains the desired fixes and features without breaking old functionality becomes more difficult.  Smaller incremental builds make it easier to track down production problems because they contain only a small number of features, instead of worrying about which of the twenty features in the release actually broke.</p>
<h2><strong>Multi Region Rolling Deployments</strong></h2>
<p>Continuous deployment doesn’t have to mean constantly dumping our code to all our servers and waiting for something to break. Since its inception, the Cloud Monitoring product has been designed to withstand widespread system failure. Our motto is “First to know. Last one standing.” Monitoring can’t be allowed to fail during a major data center failure &#8211; disaster scenarios are when our customers need monitoring to work the most. Rackers around the globe work to ensure major failures are as rare as possible, but the monitoring system must always be prepared.</p>
<p>Much of Cloud Monitoring’s resilience comes in the form of cross-region redundancy. Data points are gathered from five data centers around the globe, and every data point is independently processed in three. This gives us valuable options when it comes to deploying. We can take a data center offline with no customer impact, upgrade services running there, then bring it back online while carefully monitoring the impact of the upgrade.</p>
<p>Of course this doesn’t mean we can push broken code without causing problems, it merely increases our chances of detecting certain classes of issues before they impact customers.</p>
<p>One key to maintaining our developer culture is having a single canonical way of doing things. There should be one correct way to run tests and one correct way to bundle our code. That is not to say each of these processes is simple; a cross-region rolling deployment is a many step process. But as engineers, what do we do when we encounter repetitive multi-step processes?</p>
<h2><strong>Automation</strong></h2>
<p>The Cloud Monitoring team started by using <a title="Deployinator | github" href="https://github.com/etsy/deployinator" target="_blank">Etsy’s Deployinator</a>, but it didn’t meet our needs perfectly. The Deployinator was developed for a single region product, and took some shortcuts, but the basic ideas were sound.  We were also looking at using Deployinator for multiple products inside Rackspace, and each team was faced with creating many customizations in Deployinator to fit the models we desired.  Due to this, we developed a new project that we are <a title="Dreadnot | github" href="https://github.com/racker/dreadnot" target="_blank">open sourcing today called Dreadnot</a>.</p>
<h2><strong>Dreadnot Your Deployments!</strong></h2>
<p>Dreadnot is a relatively simple Node.js application built on top of the <a title="Express | Official Site" href="http://expressjs.com/" target="_blank">Express web framework</a> and <a title="Bootstrap | github" href="http://twitter.github.com/bootstrap/" target="_blank">Twitter’s Bootstrap Javascript and CSS utilities</a>.  It provides a control mechanism and easily accessible view into the deployment process.</p>
<p>In Dreadnot there is the concept of a Stack, a series of tasks to deploy a specific piece of software.  The Stack defines how a deployment works and what code is being deployed.  For example, in Cloud Monitoring we have one stack for our monitoring pollers and another for our API services.</p>
<p><a href="http://c179631.r31.cf0.rackcdn.com/dreadnot-region-history.png"><img class="aligncenter" src="http://c179631.r31.cf0.rackcdn.com/dreadnot-region-history.png" alt="" width="500" height="358" /></a></p>
<p>Under each Stack is a set of Regions.  For each Region we track the currently deployed version of a stack with the most recent version available on Github.</p>
<p>Under each Region you can see the complete history of a deployment in that region.  For an individual deployment, you can go back and view the entire log with all the details, or view the diff link for the changes that happened in Git.</p>
<p>When a deployment is started, the log is streamed to all active clients using <a title="Socket.IO | Official Site" href="http://socket.io/" target="_blank">Socket.IO</a>, and notifications are sent to plugins, which can include <a href="https://github.com/racker/dreadnot/blob/master/lib/plugins/irc.js">IRC</a> or <a href="https://github.com/racker/dreadnot/blob/master/lib/plugins/email.js">E-Mail</a>.</p>
<p><a href="http://c179631.r31.cf0.rackcdn.com/dreadnot-deployment-log.png"><img class="aligncenter" src="http://c179631.r31.cf0.rackcdn.com/dreadnot-deployment-log.png" alt="" width="500" height="463" /></a></p>
<h2><strong>Git, Buildbot, Apache HTTPD and Chef Integrations</strong></h2>
<p>We built in a deep integration with our infrastructure to ensure both a high quality product and a seamless user experience during the deployment of a Stack. Dreadnot finds the target revision SHA we wish to deploy from Git, and then talks to <a title="Buildbot | Official Site" href="http://trac.buildbot.net/" target="_blank">Buildbot</a> about that specific revision.   It then ensures that all test cases have passed in Buildbot, and that a tarball has been generated for this revision.  If these builds haven’t started, Dreadnot will trigger Buildbot to build them, then wait for Buildbot to complete the tests and make sure the release tarball is available.</p>
<p>Once the build is tested and ready, Dreadnot reconfigures the load balancers in the target region.  Using the <a title="Enabling Balancer Manager Support | Apache" href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager" target="_blank">balancer-manger feature of mod_proxy</a>, it drains requests to the local API servers and sends all traffic to API servers located in a different region.  This temporarily increases the request latency for some customers, but they experience zero downtime at the HTTP API level.</p>
<p>Dreadnot then modifies a <a title="Databags - Chef | Opscode" href="http://wiki.opscode.com/display/chef/Data+Bags" target="_blank">databag in our Chef server</a> that references the revision it built for this deployment. The software then uses a parallel SSH and execute <code>chef-client</code> on the machines in the desired region.  Dreadnot uses a triggered <code>chef-client</code> command instead of using daemon mode because we wanted it to control exactly when other non-code changes are made.  Both code and configuration management changes introduce risk into the environment. The Cloud Monitoring teams believes the best time to roll out Chef recipe changes is when customer traffic is already shifted to another region, so we wanted to treat recipe changes similar to a code deployment.</p>
<p>Our Chef recipe downloads the remote tarball from our build servers, extracts it, updates a symbolic link and begins restarting services.  Once all of the <code>chef-client</code> runs are complete, Dreadnot runs tests against the upgraded servers and validates that the new version is running successfully.</p>
<p>If any of these steps fail, Dreadnot will stop to wait for human intervention and continue directing traffic to another region.  Dreadnot was developed to assist with the most common multiple region deployments. However, for the complicated deployments, or those deployments that experience a fatal error, you can proceed manually without interference from Dreadnot.</p>
<p>Assuming everything worked Dreadnot then reconfigures the load balancers to bring back traffic to the region it just upgraded.  This process is then repeated for the remaining regions.</p>
<p>We handle staging and other environments by giving them completely isolated and separate Dreadnot instances.  We chose to partially do this for security reasons in <a title="Today's Outage | github" href="https://github.com/blog/744-today-s-outage" target="_blank">addition to preventing accidents</a>, so that testing and staging infrastructure are completely isolated from production.</p>
<h2><strong>Fork It</strong></h2>
<p>Dreadnot is open sourced under the <a title="Apache License version 2.0 | Apache" href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache License version 2.0</a>, and we hope it can be useful in deploying your own projects.  Rackspace has started using it on two different product teams inside the company, so while there are still some areas that could be made more generic and more features to add, we believe Dreadnot is at a good starting point.  Our team would love to <a title="Ideas for Dreadnot | github" href="https://github.com/racker/dreadnot/issues" target="_blank">see ideas from the community</a> and pull requests to help make Dreadnot more helpful to everyone.</p>
<h2><strong>Conclusion</strong></h2>
<p>The Rackspace Cloud Monitoring team is fanatical about continuous deployment.  We love being able to iterate quickly on our product and believe that our customers will get the best experience possible by doing so. If you would like to try out Rackspace Cloud Monitoring product, be sure to fill out a the <a title="Cloud Monitoring Private Beta | Rackspace" href="https://surveys.rackspace.com/Survey.aspx?s=e08d057768e04f09a8cb7811d47b82da" target="_blank">Private Beta application survey</a>.  Additionally, we <a title="Racker Talent | Rackspace " href="http://rackertalent.com/san-francisco/" target="_blank">are hiring folks</a> folks who are interested in solving these kinds of problems from the inside.</p>
<p><em>Paul Querna is an engineer on the Rackspace Cloud Monitoring team.  Be sure to check out <a title="Paul's Journal | Blog" href="http://journal.paul.querna.org/" target="_blank">Paul&#8217;s blog</a> and <a title="@pquerna | Twitter" href="https://twitter.com/#!/pquerna" target="_blank">follow @pquerna on Twitter</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rackspace.com/blog/rackspace-open-sources-dreadnot/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Content Delivery Network via Rackspace Cloud Files: c3414940.r40.cf0.rackcdn.com

 Served from: www.rackspace.com @ 2013-05-22 06:27:14 by W3 Total Cache -->