Introducing the first NetflixOSS Recipe: RSS Reader
Over the past year, Netflix has open sourced many of its components such as Hystrix, Eureka, Servo, Astyanax, Ribbon, etc.
While we continue to open source more of our components, it would be useful to open source a set of applications that can tie up these components together. This is the first in the series of “Netflix OSS recipes” that we intend to open source in the coming year that showcases the various components and how they work in conjunction with each other. While we expect many users to cherry pick the parts of Netflix OSS stack, we hope to show how using some of the Netflix OSS components in unison is very advantageous for you.
Our goal is illustrate the power of the Netflix OSS platform by showing real life examples. We hope to increase adoption by building out the Netflix OSS stack, increase awareness by holding more Netflix OSS meetups, lower the barriers by working on push button deployments of our recipes in the coming months, etc.
Netflix OSS Recipe Name: RSS Reader application
This document explains how to build a simple RSS Reader application (also commonly referred to as a news aggregator application). As defined in Wikipedia, a RSS reader application does the following:
“In computing, a news aggregator, also termed a feed aggregator, feed reader, news reader, RSS reader or simply aggregator, is client software or a Web application which aggregates syndicated web content such as news headlines, blogs, podcasts, and video blogs (vlogs) in one location for easy viewing.”
The source code for this RSS recipe application can be found on Github. This application uses the following Open Source components.
- Archaius: Dynamic configurations properties client.
- Astyanax: Cassandra client and pattern library.
- Blitz4j: Non-blocking logging.
- Eureka: Service registration and discovery.
- Governator: Guice based dependency injection.
- Hystrix: Dependency fault tolerance.
- Karyon: Base server for inbound requests.
- Ribbon: REST client for outbound requests.
- Servo: Metrics collection.
RSS Reader Recipes Architecture
Recipes RSS Reader is composed of the following three major components:
All middle tier instances, upon startup, get registered to Eureka using a unique logical name. It is later used by the edge service to discover the available middle tier instances, querying by that logical name.
RSS Middle Tier Service
RSS Middle tier is responsible for fetching the contents of RSS feeds from external feed publishers, parsing the RSS feeds and returning the data via REST entry points. Ribbon’s HTTP client is used to fetch the RSS feeds from external publishers. This tier is also responsible for persisting the user’s RSS subscriptions into Cassandra or into an InMemory hash map. Astyanax is used to persist data into Cassandra. The choice of the data store, cassandra host configurations, retry policies etc are specified in a properties file, which is accessed using Archaius. Latencies, success and failure rates of the calls made to Cassandra and external publishers are captured using Servo. The base container for this middle tier is built on top of Karyon and all log events are captured using Blitz4j.
RSS Edge Service
Eureka is used to discover the middle tier instances that can fetch the RSS feeds subscribed by the user. Hystrix is used to provide greater tolerance of latency and failures when communicating with the middle tier service. The base container for this edge service is also built on top of Karyon. A simple UI, as shown below, is provided by the edge service to add, delete and display RSS feeds.
Hystrix dashboard for the Recipes RSS application during a sample run is as shown below:
Our Github page for Recipes RSS Reader has instructions for building and running the application. Full documentation is available on the wiki pages. The default configurations that come along with this application allows all these different services to run in a single machine.
In the coming months, we intend to open source other commonly used recipes that share best practices on how to integrate the various bits of Netflix OSS stack to build highly scalable and reliable cloud-based applications.
Originally published at techblog.netflix.com on March 11, 2013.