<?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; Chad Lung</title>
	<atom:link href="http://www.rackspace.com/blog/author/chad-lung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rackspace.com/blog</link>
	<description>The Official Rackspace Blog</description>
	<lastBuildDate>Fri, 24 May 2013 18:09:28 +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>Introducing Repose: The Restful Proxy Service Engine</title>
		<link>http://www.rackspace.com/blog/introducing-repose-the-restful-proxy-service-engine/</link>
		<comments>http://www.rackspace.com/blog/introducing-repose-the-restful-proxy-service-engine/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 18:00:16 +0000</pubDate>
		<dc:creator>Chad Lung</dc:creator>
				<category><![CDATA[Cloud Industry Topics]]></category>
		<category><![CDATA[atom hopper]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[repose]]></category>

		<guid isPermaLink="false">http://www.rackspace.com/blog/?p=23492</guid>
		<description><![CDATA[Repose is an open-source RESTful HTTP proxy service that scales to the cloud NS provides a solution to common API processing tasks such as rate limiting, client authentication, translation, API validation, versioning and logging so web service developers can focus on the unique features of their services.]]></description>
				<content:encoded><![CDATA[<p><a href="http://openrepose.org">Repose</a> is an <a href="https://github.com/rackerlabs/repose" target="_blank">open-source</a> RESTful HTTP proxy service that scales to the cloud. Repose provides a solution to common API processing tasks such as <strong>rate limiting</strong>, <strong>client authentication</strong>, <strong>translation,</strong> <strong>API validation</strong>, <strong>versioning</strong> and <strong>logging</strong> so web service developers can focus on the unique features of their services.</p>
<h2>Repose Within Rackspace</h2>
<p><strong></strong>To understand Repose better, let&#8217;s examine how we use Repose here at Rackspace. One of our internal applications of Repose has been to simplify development and use of <a href="http://atomhopper.org/">Atom Hopper</a>, another of our open-sourced products that I’ve <a href="http://www.rackspace.com/blog/rackspace-open-sources-atom-hopper-an-atom-publishing-server/">blogged about before</a>. We use Atom Hopper as a key tool to collect data from our deployment of <a href="http://www.openstack.org/">OpenStack</a>. We have several internal teams that want to access this data as well as to publish additional data into Atom Hopper. Naturally, all of this requires Atom Hopper to perform basic functions such as authentication, rate limiting and logging. This is where Repose steps in. Repose already has components that can do this for Atom Hopper, or for any other web based service for that matter. This lets the Atom Hopper team focus on just the core pieces of Atom Hopper while Repose deals with general-purpose functions like authentication and rate limiting. This relationship with Repose works for other web services developed by teams within Rackspace: those developers focus on  their own web service and let Repose do the other tasks that almost every web service needs. It&#8217;s no longer necessary for every development team to re-invent the wheel for client authentication, rate limiting and such functions.</p>
<p>In the same way, you can use Repose to help you focus on your own web-based service. You can use Repose no matter what programming language you used to develop your web service.</p>
<p style="text-align: center;"><img class="aligncenter" alt="Repose and Atom Hopper working together" src="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/repose-graphic.png" width="460" height="575" /></p>
<h2>Benefits And How Repose Works</h2>
<p>Repose&#8217;s design gives it several benefits. Repose is:</p>
<ul>
<li><strong>Scalable</strong>. Repose is incredibly scalable because it is designed to be stateless, allowing state to be distributed across the web.</li>
<li><strong>Flexible</strong>. Repose can be run as an executable JAR, deployed as a WAR file in any Servlet container or deployed on a separate server. Repose&#8217;s configuration allows a user to define which components to use and details for each component.</li>
<li><strong>Extensible</strong>. Repose&#8217;s functionality is delivered as separately-configurable components. New components can easily be added to Repose. You can see an ever-growing list of Repose components in our <a href="http://wiki.openrepose.org/display/REPOSE/Components">wiki</a>.</li>
<li><strong>High performance</strong>. Repose can handle high loads with high accuracy.</li>
<li><strong>Configurable.</strong> Repose&#8217;s components can be configured easily and any changes to the configuration are automatically re-loaded.</li>
</ul>
<p><a href="http://www.eaipatterns.com/eaipatterns.html">Integration patterns</a> are technology-independent designs that are robust and re-usable. Repose is a platform that can be used to implement integration patterns. In particular, Repose uses these two patterns:</p>
<ul>
<li><a href="http://www.eaipatterns.com/PipesAndFilters.html">Pipes and Filters:</a> Repose implements the pipes and filters pattern by providing a way of constructing a route by creating a chain of filters. Requests are passed through the chain so that one filter&#8217;s output becomes the next filter&#8217;s input. This pipeline structure is analogous to the UNIX pipe command. The advantage of the pipeline approach is that it enables you to combine services, some of which can be external to the application, to create more complex forms of message processing.</li>
<li><a href="http://www.eaipatterns.com/MessageRouter.html">Message Router:</a> Repose implements the message router pattern as a filter that consumes messages from a single consumer endpoint and then redirects them to the appropriate target endpoint, based on a specific decision criterion. A message router is concerned only with redirecting messages; it does not modify the message content. Repose acts as an intermediate proxy and routes accordingly. Any component can make Repose route.</li>
</ul>
<p>One year ago we launched Repose as open source software.  We&#8217;ve been very happy with Repose in production and welcome your feedback.</p>
<h2>Getting Started With Repose</h2>
<p>To learn more about Repose, the <a href="http://openrepose.org/">Open Repose</a> website is your starting point providing links to the <a href="https://github.com/rackerlabs/repose" target="_blank">source code</a> in GitHub. This is also the right place to find our <a href="http://openrepose.org/documentation.html">documentation</a>, including an <a href="http://wiki.openrepose.org/display/REPOSE/FAQ">FAQ</a> and <a href="http://wiki.openrepose.org/display/REPOSE/Home">wiki</a>; the wiki has the most current information. You might also be interested in a walkthrough on <a href="http://devops.rackspace.com/rate-limiting-with-repose-the-restful-proxy-service-engine.html" target="_blank">setting up Repose to use rate limiting</a> over on our DevOps blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rackspace.com/blog/introducing-repose-the-restful-proxy-service-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rackspace Open Sources Atom Nuke, The Fast Atom Framework</title>
		<link>http://www.rackspace.com/blog/rackspace-open-sources-atom-nuke-the-fast-atom-framework/</link>
		<comments>http://www.rackspace.com/blog/rackspace-open-sources-atom-nuke-the-fast-atom-framework/#comments</comments>
		<pubDate>Tue, 11 Sep 2012 20:30:22 +0000</pubDate>
		<dc:creator>Chad Lung</dc:creator>
				<category><![CDATA[Open Source Technologies]]></category>
		<category><![CDATA[Tips for Devs and Sys Admins]]></category>
		<category><![CDATA[atom nuke]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.rackspace.com/blog/?p=22966</guid>
		<description><![CDATA[Rackspace has open-sourced Atom Nuke to simplify management of large collections of Atom feeds and other data.]]></description>
				<content:encoded><![CDATA[<p>What if you had a tremendous mountain of data, broken up and stored across thousands of servers, and your client wanted some specific portion of that data? You could assemble the whole mountain and send the whole thing to your client, leaving the client to pick out what&#8217;s needed. But there are reasons you split it up in the first place: it’s too big to store in one place or to transfer without interruption. Additionally there are reasons you manage the data, including security and privacy, so this mountain moving might not be a good idea.</p>
<div align="center">
<div class="wp-caption aligncenter" style="width: 510px"><img src="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-inmany-outmany.png" alt="" width="500" height="330" /><p class="wp-caption-text"><em>What if you could create something as complex as this, with data in multiple formats from multiple origins stored across multiple servers but aggregated for multiple consumers, who could then repackage it for consumers of their own?</em></p></div>
</div>
<p>If you couldn&#8217;t give your client a copy of all your data, you could ask the client to describe the specific data that&#8217;s needed and then assemble those items the client needs. However, if you had many clients, each with their own mountains of data, would you have to create a direct path from every consumer to every fragment of data they need?</p>
<p>What you need is to easily create a bridge, integrating any number of data origins with any number of data consumers. Enter in Atom Nuke.</p>
<div align="center">
<div class="wp-caption aligncenter" style="width: 511px"><a href="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-inall-outall.png"><img src="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-inall-outall.png" alt="" width="501" height="217" /></a><p class="wp-caption-text"><em>With <a href="http://atomnuke.org/">Atom Nuke</a>, no matter where your data originates and who consumes the data, it could be this simple to think about.</em></p></div>
</div>
<p><strong>Atom Nuke Simplifies Integration</strong></p>
<p>We created <a href="http://atomnuke.org/">Atom Nuke</a> to give ourselves two kinds of power related to the high volumes of data produced by our Atom feeds<em>.</em></p>
<ul>
<li><em>fission</em>, making it easy to divide data in new ways<em></em></li>
<li><em>fusion</em>, making it easy to combine data in new ways</li>
</ul>
<div align="center">
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-hardway-nonuke.png"><img src="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-hardway-nonuke.png" alt="" width="500" height="317" /></a><p class="wp-caption-text"><em>A six-way integration requires eighteen paths, connecting three data origins with three data consumers so each has direct and equal access. Adding one new origin or consumer requires adding many new paths.</em></p></div>
</div>
<p>Atom Nuke is an open-source collection of utilities built on a simple, fast Atom implementation that aims for a footprint of minimal dependency. The Atom implementation has its own model and utilizes a SAX parser and a StAX writer.</p>
<ul>
<li><a href="http://www.saxproject.org/">SAX</a> (Simple API for XML) makes it simple to read existing data</li>
<li><a href="http://stax.codehaus.org/">StAX</a> (Streaming API for XML) makes it simple to stream data to and from applications</li>
</ul>
<div align="center">
<div class="wp-caption aligncenter" style="width: 510px"><img src="http://ddf912383141a8d7bbe4-e053e711fc85de3290f121ef0f0e3a1f.r87.cf1.rackcdn.com/atom-nuke-easyway-nuke.png" alt="" width="500" height="329" /><p class="wp-caption-text"><em>With Atom Nuke providing a bridge, a six-way integration requires six paths, one from each of the three origins and three clients, with each path terminating at Atom Nuke. Adding one new origin or consumer requires adding one new path.</em></p></div>
</div>
<p>We designed our Nuke implementation for immutability, maximum simplicity and memory efficiency. Nuke also contains a polling event framework that can poll multiple sources. Each source may be registered with a configured polling interval that governs how often the source is polled during normal operation. That source may have any number of Atom listeners added to its dispatch list. These listeners will begin receiving events on the next scheduled poll.</p>
<p><strong>Atom as a Building Block</strong></p>
<p><strong></strong>Atom is a self-discoverable and generic syndication protocol. The Internet Engineering Task Force (IETF) describes Atom in several ratified Requests for Comments (RFCs):</p>
<ul>
<li>the <a href="http://tools.ietf.org/html/rfc4287">Atom RFC</a></li>
<li>the <a href="http://tools.ietf.org/html/rfc5005">Atom Paging and Archiving RFC</a></li>
<li>the <a href="http://tools.ietf.org/html/rfc5023">Atom Publishing Protocol RFC</a></li>
</ul>
<p>The unique properties of the Atom specification have made it popular as a protocol for generic event distribution, syndication and aggregation. Using Atom as a common interchange format, event publishers add their domain-specific events to an Atom publication endpoint. Downstream, subscribers are notified of events they&#8217;ve pre-identified as relevant, controlling what they consume from potentially-vast collections of published data.<strong></strong></p>
<p><strong>Atom Nuke Within Rackspace</strong></p>
<p>Within Rackspace, the Cloud Integration team builds tools for all our software development teams to use. We need to provide high-quality tools but we also need them to be easy to use and work smoothly together so that we can encourage adoption throughout Rackspace.</p>
<p>Using Atom Nuke, we collect data from the Atom feeds supplied by <a href="http://atomhopper.org/">Atom Hopper</a>, another of our open-source tools. We then take that Atom data and feed it into several systems, including those that perform analytics on <a href="http://openstack.org/">OpenStack</a>  deployments throughout our data centers. The analytics engine uses Nuke to collect the entire Atom feed data so it can be marshalled into a <a href="http://hadoop.apache.org/">Hadoop</a> cluster. By combining our Atom Nuke and Atom Hopper tools, we&#8217;ve enabled complete portability of data: we can combine Atom events with data from other sources such as <a href="http://www.rabbitmq.com/">Rabbit MQ</a> messages and <a href="http://flume.apache.org/">Flume</a> logs without requiring consumers of that data to deal with the complexities of interacting with those dissimilar sources.</p>
<p><strong>Nuke Makes Working with Atom Easy</strong></p>
<p>Atom Nuke excels as a an Atom feed crawler, since you can poll multiple feeds from multiple endpoints as well as define the polling intervals down to milliseconds. In addition, you can select events in response to specific triggers, such as when a specific Atom entry contains a subscribed category. However, Nuke is much more than a feed crawler, it can create its own Atom feeds if needed.</p>
<p>We built Atom Nuke with <a href="http://java.com/">Java</a> but we recently extended support to <a href="http://python.org/">Python</a>. Nuke is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache 2 license</a> and was created by <a href="https://github.com/zinic">John Hopper</a>, a software engineer on the Rackspace Cloud Integration team. We&#8217;ve created some tutorials to get developers <a href="http://www.giantflyingsaucer.com/blog/?cat=61">started with Nuke</a>.</p>
<p><strong>Building with Boxes, Not Bricks</strong></p>
<p>Writing about a different kind of atom in a world that was just beginning to understand atomic structure and atomic energy, H.G. Wells (1866-1946) imagined a future in which using the power stored within atoms transformed many aspects of human life:</p>
<blockquote><p>&#8220;I feel that we are but beginning the list. And we know now that the atom, that once we thought hard and impenetrable, and indivisible and final and&#8211;lifeless&#8211;lifeless, is really a reservoir of immense energy. That is the most wonderful thing about all this work. A little while ago we though of the atoms as we thought of bricks, as solid building material, as substantial matter, as unit masses of lifeless stuff, and behold! these bricks are boxes, treasure boxes, boxes full of the intensest force.&#8221;</p>
<p>&#8212;H.G. Wells, <em>The World Set Free</em>, 1914</p></blockquote>
<p>We&#8217;re now at a similar point with the technology of our time. We have explored enabling technologies, such as Atom, and have begun fully using and building upon their capabilities, putting them to work in new ways to make new things possible. As we begin building with Atom Nuke, we&#8217;re using Atom not as a brick, but as a treasure box, containing amazing possibilities for fission and fusion, dividing and combining data to make new applications possible. By making Atom Nuke and some of our other projects such as <a href="http://atomhopper.org/">Atom Hopper</a> available as open source, we hope we are also creating treasure boxes filled with ideas and possibilities.</p>
<p>To learn more about Atom Nuke, visit our <a href="http://atomnuke.org/">project site</a> and check out the <a href="https://github.com/zinic/atom-nuke/">source code on GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rackspace.com/blog/rackspace-open-sources-atom-nuke-the-fast-atom-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rackspace Open Sources Atom Hopper, An Atom Publishing Server</title>
		<link>http://www.rackspace.com/blog/rackspace-open-sources-atom-hopper-an-atom-publishing-server/</link>
		<comments>http://www.rackspace.com/blog/rackspace-open-sources-atom-hopper-an-atom-publishing-server/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 18:15:38 +0000</pubDate>
		<dc:creator>Chad Lung</dc:creator>
				<category><![CDATA[Open Source Technologies]]></category>
		<category><![CDATA[Tips for Devs and Sys Admins]]></category>
		<category><![CDATA[atom hopper]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.rackspace.com/blog/?p=16395</guid>
		<description><![CDATA[Atom Hopper is an open source Java Atom publishing server for accessing, processing and aggregating Atom entries. Rackspace designed Atom Hopper to make it easy to build both generalized and specialized persistence mechanisms for Atom XML data; it’s based on the Atom Syndication Format and the Atom Publishing Protocol. We&#8217;ve started from the Apache Abdera [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Atom Hopper Website" href="http://atomhopper.org/" target="_blank">Atom Hopper</a> is an open source Java Atom publishing server for accessing, processing and aggregating Atom entries. Rackspace designed Atom Hopper to make it easy to build both generalized and specialized persistence mechanisms for Atom XML data; it’s based on the Atom Syndication Format and the Atom Publishing Protocol. We&#8217;ve started from the <a title="Apache Abdera Website" href="http://abdera.apache.org/" target="_blank">Apache Abdera</a> project and built a well-rounded Atom publishing server that is easily deployed on a Java servlet container such as <a title="Apache Tomcat Website" href="http://tomcat.apache.org/" target="_blank">Apache Tomcat 7</a>.</p>
<h3>Atom Hopper Within Rackspace</h3>
<p>Within Rackspace, the Cloud Integration team builds tools for all our software development teams to use. We created Atom Hopper to collect and disperse information that is of interest to multiple audiences, delivering consistent information to everyone who is listening. For example, activity generated by the <a title="OpenStack Nova Website" href="http://nova.openstack.org/" target="_blank">OpenStack Nova project</a> is important to that team, but just as important to the teams responsible for Usage and Billing.</p>
<p>We use Atom Hopper to capture messages once and store them in a database; teams that want to read the messages can parse the data via an Atom feed according to their own schedules. Consumers can use whatever technology they wish to get the Atom feed produced by Atom Hopper. They can use Atom Hopper to select a specific entry within the feed or to page through the feed from newest entry to oldest or from oldest to newest—whatever suits their needs.</p>
<h3>Atom Hopper 1.0</h3>
<p>Atom Hopper 1.0 is available now as open source 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 invite you to examine and contribute to our GitHub repository at <a href="https://github.com/rackerlabs/atom-hopper" target="_blank">https://github.com/rackerlabs/atom-hopper</a>. Just as we’ve found Atom Hopper to be a valuable tool for groups to manage messages at Rackspace, we hope you’ll find many uses for it in your own environment.</p>
<p>To try Atom Hopper, install it on your own server and then configure it according to your preferences. Our <a href="https://github.com/rackspace/atom-hopper/wiki" class="broken_link" rel="nofollow">wiki</a> includes instructions and suggestions to help you with installation and configuration. By following the examples provided in our <a href="http://www.atomhopper.org/">documentation</a>, you can then use Atom Hopper to get feeds, select entries from within feeds, add entries to feeds and add categories to entries.<strong></strong></p>
<h3>Pluggable Data Adapter: Choose Your Own Datastore</h3>
<p>A key feature of Atom Hopper is its pluggable data adapter, which allows Atom Hopper to communicate with a user-configured back end datastore, including relational databases, NoSQL or other options. By default, Atom Hopper ships with a <a title="Hibernate Website" href="http://www.hibernate.org/" target="_blank">Hibernate</a> data adapter. We’ve tested it with <a title="Postgresql Website" href="http://www.postgresql.org/" target="_blank">PostgreSQL</a>, <a title="MySQL Website" href="http://mysql.com/" target="_blank">MySQL</a> and <a title="H2 Database Website" href="http://www.h2database.com/" target="_blank">H2</a> databases. With the Hibernate data adapter, you can configure Atom Hopper to allow each Atom feed to store and retrieve data from completely different database servers. For example, Atom Hopper can talk to PostgreSQL on one feed and MySQL on a different feed.</p>
<h3>Scalability: Load Balancing Multiple Feeds On Multiple Datastores</h3>
<p>Atom Hopper was designed to scale. Atom Hopper holds no state, so it&#8217;s able to scale horizontally very well. Inside Rackspace, we use a load balancer to balance several Atom Hopper instances that all share the same configured Atom feeds. With the possibility of multiple Atom Hopper instances managing multiple feeds on multiple datastores, you can create an Atom Hopper configuration to suit a wide range of workloads.</p>
<p>You can use Atom Hopper to turn a large collection of Atom feeds into narrowly-targeted information, usable for a specific purpose and free of entries irrelevant to that purpose.</p>
<p><a href="http://c3414940.r40.cf0.rackcdn.com/blog/wp-content/uploads/2012/04/hopper2.png"><img class="alignnone size-full wp-image-16405" title="hopper2" alt="" src="http://c3414940.r40.cf0.rackcdn.com/blog/wp-content/uploads/2012/04/hopper2.png" width="650" height="650" /></a></p>
<h3>Fork It</h3>
<p>Atom Hopper is available as open source 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>; the source code is <a title="Atom Hopper Source Code on Github" href="https://github.com/rackerlabs/atom-hopper" target="_blank">available on GitHub</a>. Visit our project website at <a href="http://www.atomhopper.org/">www.atomhopper.org</a> for links to more information about Atom Hopper, including our <a title="Atom Hopper Wiki" href="https://github.com/rackspace/atom-hopper/wiki" target="_blank" class="broken_link" rel="nofollow">wiki</a> where we’ve posted the most current information about setting up and using Atom Hopper for your own projects.</p>
<p>Don&#8217;t forget to follow <a href="https://twitter.com/#%21/atomhopper">Atom Hopper on Twitter</a>!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rackspace.com/blog/rackspace-open-sources-atom-hopper-an-atom-publishing-server/feed/</wfw:commentRss>
		<slash:comments>0</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-24 23:15:54 by W3 Total Cache -->