<?xml version="1.0" encoding="UTF-8"?>
 <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://pinboard.in">
    <title>Pinboard (jm)</title>
    <link>https://pinboard.in/u:jm/public/</link>
    <description>recent bookmarks from jm</description>
    <items>
      <rdf:Seq>	<rdf:li rdf:resource="https://wthhyb.sacha.house/"/>
	<rdf:li rdf:resource="https://github.com/WeTransfer/prorate"/>
	<rdf:li rdf:resource="http://antirez.com/news/123"/>
	<rdf:li rdf:resource="http://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/"/>
	<rdf:li rdf:resource="https://aws.amazon.com/blogs/aws/amazon-elasticache-for-redis-update-sharded-clusters-engine-improvements-and-more/?sc_channel=em&amp;sc_campaign=global_LA_elasticache_2016_cluster_1_20161020_ampat.launch_la_ot-elasticache_2016_cluster_1_send&amp;sc_publisher=aws&amp;sc_medium=em_23618&amp;sc_content=launch_la_ot&amp;sc_country=global&amp;sc_geo=global&amp;sc_category=elasticache&amp;sc_outcome=launch&amp;trk=em_23618&amp;mkt_tok=eyJpIjoiT1dSaU56UmhOR013WXpsaiIsInQiOiIxUnY0cWRSaHlQSFhpc0RzUVdhbGxRY0c5a09iekpuZ3lGVmlyNHMrRkwyM0NVeVhDQllZeDZlT1N1dVBZZlIxeVd1aVpoRmo5YmhsZWR4VDlrc0tWQk1LZlwvdkhmek9QRVJaU1hMQXBjVHc9In0%3D"/>
	<rdf:li rdf:resource="http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html"/>
	<rdf:li rdf:resource="https://pbs.twimg.com/media/BNELF1GCUAExynU.png"/>
	<rdf:li rdf:resource="https://nchan.slact.net/"/>
	<rdf:li rdf:resource="https://amplitude.com/blog/2015/08/25/scaling-analytics-at-amplitude/"/>
	<rdf:li rdf:resource="http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html"/>
	<rdf:li rdf:resource="https://shk.io/2015/03/22/transparent-huge-pages/"/>
	<rdf:li rdf:resource="http://vaurien.readthedocs.org/en/1.8/index.html"/>
	<rdf:li rdf:resource="http://tech.forter.com/comparing-message-queue-architectures-on-aws/"/>
	<rdf:li rdf:resource="https://groups.google.com/a/jclarity.com/forum/#!topic/friends/QPXl_8ce5Fg"/>
	<rdf:li rdf:resource="https://redislabs.com/blog/testing-fork-time-on-awsxen-infrastructure#.VFJgrFOsXFd"/>
	<rdf:li rdf:resource="https://stripe.com/blog/game-day-exercises-at-stripe"/>
	<rdf:li rdf:resource="https://github.com/orbitz/roshiak"/>
	<rdf:li rdf:resource="http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html"/>
	<rdf:li rdf:resource="http://comcast.github.io/sirius/overview.html"/>
	<rdf:li rdf:resource="https://news.ycombinator.com/item?id=7506774"/>
	<rdf:li rdf:resource="http://www.roguelazer.com/2013/12/a-rant-on-redis/"/>
	<rdf:li rdf:resource="https://groups.google.com/forum/#!msg/redis-db/Oazt2k7Lzz4/-7kDmWJHXLMJ"/>
	<rdf:li rdf:resource="http://blog.meldium.com/home/2013/9/13/benchmarking-redis-on-aws-elasticache"/>
	<rdf:li rdf:resource="http://www.twilio.com/blog/2013/07/billing-incident-post-mortem.html"/>
	<rdf:li rdf:resource="http://engineering.pinterest.com/post/55272557617/building-a-follower-model-from-scratch"/>
	<rdf:li rdf:resource="http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html"/>
	<rdf:li rdf:resource="http://planetcassandra.org/blog/post/instagram-making-the-switch-to-cassandra-from-redis-75-instasavings"/>
	<rdf:li rdf:resource="http://www.crashlytics.com/blog/reducing-mongodb-traffic-by-78-with-redis-caching/"/>
	<rdf:li rdf:resource="http://aphyr.com/posts/281-call-me-maybe-carly-rae-jepsen-and-the-perils-of-network-partitions"/>
	<rdf:li rdf:resource="http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html"/>
	<rdf:li rdf:resource="https://github.com/aaw/hyperloglog-redis#readme"/>
	<rdf:li rdf:resource="http://www.devco.net/archives/2013/01/06/solving-monitoring-state-storage-problems-using-redis.php"/>
	<rdf:li rdf:resource="http://www.slideshare.net/crashlytics/crashlytics-on-redis-analytics"/>
	<rdf:li rdf:resource="http://redis.io/topics/memory-optimization"/>
	<rdf:li rdf:resource="http://highscalability.com/blog/2012/11/19/gone-fishin-tumblr-architecture-15-billion-page-views-a-mont.html"/>
	<rdf:li rdf:resource="http://whilefalse.blogspot.com/2012/04/scaling-its-not-what-it-used-to-be.html"/>
	<rdf:li rdf:resource="http://petermblair.com/fbl-n-gram-analyzer/"/>
	<rdf:li rdf:resource="http://devblog.bu.mp/how-we-use-redis-at-bump"/>
	<rdf:li rdf:resource="http://blog.zawodny.com/2011/02/26/redis-sharding-at-craigslist/"/>
	<rdf:li rdf:resource="http://github.com/blog/655-scheduled-maintenance-today-22-00-pst"/>
	<rdf:li rdf:resource="http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis/"/>
	<rdf:li rdf:resource="http://simonwillison.net/2009/Oct/22/redis/"/>
      </rdf:Seq>
    </items>
  </channel><item rdf:about="https://wthhyb.sacha.house/">
    <title>What the hell have you built.</title>
    <dc:date>2025-11-06T10:38:19+00:00</dc:date>
    <link>https://wthhyb.sacha.house/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[▪ Did you just pick things at random?
▪ Why is Redis talking to MongoDB?
▪ Why do you even use MongoDB?

A single-use-site update for the classic, now-12-year-old architecture shitpost]]></description>
<dc:subject>shitposting funny architecture riak redis mongodb ouch scalability</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:0420d47b34a3/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:shitposting"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:funny"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:riak"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mongodb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ouch"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/WeTransfer/prorate">
    <title>Prorate</title>
    <dc:date>2022-04-19T15:01:30+00:00</dc:date>
    <link>https://github.com/WeTransfer/prorate</link>
    <dc:creator>jm</dc:creator><description><![CDATA["Redis-based rate limiter (with a leaky bucket implementation in Lua)":

<blockquote>...Using a Lua script, because is the only language available which runs inside Redis. Thanks to the speed benefits of Lua the script runs fast enough to apply it on every throttle call.

Using a Lua script in Prorate helps us achieve the following guarantees:

The script will run atomically. The script is evaluated as a single Redis command. This ensures that the commands in the Lua script will never be interleaved with another client: they will always execute together.

Any usages of time will use the Redis time. Throttling requires a consistent and monotonic time source. The only monotonic and consistent time source which is usable in the context of Prorate, is the TIME result of Redis itself. We are throttling requests from different machines, which will invariably have clock drift between them. This way using the Redis server TIME helps achieve consistency.</blockquote>

]]></description>
<dc:subject>redis rate-limiting throttling apis via:cian lua</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:c9b0eb6ee68c/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rate-limiting"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:throttling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:apis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:cian"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lua"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://antirez.com/news/123">
    <title>LOLWUT: a piece of art inside a database command - &lt;antirez&gt;</title>
    <dc:date>2018-10-18T09:22:16+00:00</dc:date>
    <link>http://antirez.com/news/123</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Redis now includes a reference to "Schotter", by Georg Nees, one of the earliest pieces of computer art.  Nice one antirez :)]]></description>
<dc:subject>antirez coding art georg-nees redis lolwut</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:db63ad41a3f8/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:antirez"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:art"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:georg-nees"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lolwut"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/">
    <title>Learn redis the hard way (in production) · trivago techblog</title>
    <dc:date>2017-03-30T10:01:30+00:00</dc:date>
    <link>http://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[oh god this is pretty awful.  this just reads like "don't try to use Redis at scale" to me]]></description>
<dc:subject>redis scalability ops architecture horror trivago php</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:86839e5457c2/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:horror"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:trivago"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:php"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://aws.amazon.com/blogs/aws/amazon-elasticache-for-redis-update-sharded-clusters-engine-improvements-and-more/?sc_channel=em&amp;sc_campaign=global_LA_elasticache_2016_cluster_1_20161020_ampat.launch_la_ot-elasticache_2016_cluster_1_send&amp;sc_publisher=aws&amp;sc_medium=em_23618&amp;sc_content=launch_la_ot&amp;sc_country=global&amp;sc_geo=global&amp;sc_category=elasticache&amp;sc_outcome=launch&amp;trk=em_23618&amp;mkt_tok=eyJpIjoiT1dSaU56UmhOR013WXpsaiIsInQiOiIxUnY0cWRSaHlQSFhpc0RzUVdhbGxRY0c5a09iekpuZ3lGVmlyNHMrRkwyM0NVeVhDQllZeDZlT1N1dVBZZlIxeVd1aVpoRmo5YmhsZWR4VDlrc0tWQk1LZlwvdkhmek9QRVJaU1hMQXBjVHc9In0%3D">
    <title>Amazon ElastiCache for Redis Update – Sharded Clusters, Engine Improvements, and More | AWS Blog</title>
    <dc:date>2016-11-01T11:31:38+00:00</dc:date>
    <link>https://aws.amazon.com/blogs/aws/amazon-elasticache-for-redis-update-sharded-clusters-engine-improvements-and-more/?sc_channel=em&amp;sc_campaign=global_LA_elasticache_2016_cluster_1_20161020_ampat.launch_la_ot-elasticache_2016_cluster_1_send&amp;sc_publisher=aws&amp;sc_medium=em_23618&amp;sc_content=launch_la_ot&amp;sc_country=global&amp;sc_geo=global&amp;sc_category=elasticache&amp;sc_outcome=launch&amp;trk=em_23618&amp;mkt_tok=eyJpIjoiT1dSaU56UmhOR013WXpsaiIsInQiOiIxUnY0cWRSaHlQSFhpc0RzUVdhbGxRY0c5a09iekpuZ3lGVmlyNHMrRkwyM0NVeVhDQllZeDZlT1N1dVBZZlIxeVd1aVpoRmo5YmhsZWR4VDlrc0tWQk1LZlwvdkhmek9QRVJaU1hMQXBjVHc9In0%3D</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Elasticache now supports sharding]]></description>
<dc:subject>elasticache sharding storage aws databases redis ops</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:10191f450066/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:elasticache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sharding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:aws"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html">
    <title>How to do distributed locking</title>
    <dc:date>2016-02-09T10:08:40+00:00</dc:date>
    <link>http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[A critique of the "Redlock" locking algorithm from Redis by Martin Kleppman.  antirez responds here: http://antirez.com/news/101 ; summary of followups: https://storify.com/martinkl/redlock-discussion]]></description>
<dc:subject>distributed locking redis algorithms coding distcomp redlock martin-kleppman zookeeper</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:8a6991e635e7/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distributed"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:locking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distcomp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redlock"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:martin-kleppman"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:zookeeper"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://pbs.twimg.com/media/BNELF1GCUAExynU.png">
    <title>&quot;What the hell have you built&quot;</title>
    <dc:date>2016-01-29T12:06:11+00:00</dc:date>
    <link>https://pbs.twimg.com/media/BNELF1GCUAExynU.png</link>
    <dc:creator>jm</dc:creator><description><![CDATA[cut out and keep PNG for many occasions!  "Why is Redis talking to MongoDB?"]]></description>
<dc:subject>mongodb redis funny architecture gifs png reactiongifs</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:072d8b46b5b9/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mongodb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:funny"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gifs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:png"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reactiongifs"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://nchan.slact.net/">
    <title>Nchan</title>
    <dc:date>2016-01-12T09:58:54+00:00</dc:date>
    <link>https://nchan.slact.net/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>Nchan is a scalable, flexible pub/sub server for the modern web, built as a module for the Nginx web server. It can be configured as a standalone server, or as a shim between your application and tens, thousands, or millions of live subscribers. It can buffer messages in memory, on-disk, or via Redis. All connections are handled asynchronously and distributed among any number of worker processes. It can also scale to many nginx server instances with Redis.  Messages are published to channels with HTTP POST requests or websockets, and subscribed also through websockets, long-polling, EventSource (SSE), old-fashioned interval polling, and more. Each subscriber can listen to up to 255 channels per connection, and can be optionally authenticated via a custom application url. An events meta channel is also available for debugging.</blockquote>

Also now supports HTTP/2.  This used to be called the Nginx HTTP Push Module, and I used it with great results in that form.  This is the way to do HTTP push in all its forms....]]></description>
<dc:subject>nginx pubsub websockets sse http http-push http2 redis long-polling nchan</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:07bf4fd5598d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nginx"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:pubsub"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:websockets"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sse"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:http"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:http-push"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:http2"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:long-polling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nchan"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://amplitude.com/blog/2015/08/25/scaling-analytics-at-amplitude/">
    <title>Scaling Analytics at Amplitude</title>
    <dc:date>2015-08-31T14:06:02+00:00</dc:date>
    <link>https://amplitude.com/blog/2015/08/25/scaling-analytics-at-amplitude/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Good blog post on Amplitude's lambda architecture setup, based on S3 and a custom "real-time set database" they wrote themselves.

antirez' comment from a Redis angle on the set database: http://antirez.com/news/92

HN thread: https://news.ycombinator.com/item?id=10118413]]></description>
<dc:subject>lambda-architecture analytics via:hn redis set-storage storage databases architecture s3 realtime</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:cb0a1f26939e/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:lambda-architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:analytics"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:hn"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:set-storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:s3"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:realtime"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html">
    <title>Paper review: &quot;Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems&quot;</title>
    <dc:date>2015-03-27T09:36:04+00:00</dc:date>
    <link>http://muratbuffalo.blogspot.co.uk/2015/03/paper-review-simple-testing-can-prevent.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Race conditions, and errors at startup, seem to be particularly problematic]]></description>
<dc:subject>race-conditions startup bugs failure fault-tolerance hbase redis reliability ops papers concurrency exception-handling cassandra hdfs mapreduce</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:3dd7b48e5fed/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:race-conditions"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:startup"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failure"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fault-tolerance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hbase"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reliability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:papers"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:concurrency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:exception-handling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cassandra"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hdfs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mapreduce"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://shk.io/2015/03/22/transparent-huge-pages/">
    <title>Transparent huge pages implicated in Redis OOM</title>
    <dc:date>2015-03-23T14:00:34+00:00</dc:date>
    <link>https://shk.io/2015/03/22/transparent-huge-pages/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[A nasty real-world prod error scenario worsened by THPs:

<blockquote>jemalloc(3) extensively uses madvise(2) to notify the operating system that it's done with a range of memory which it had previously malloc'ed. The page size on this machine is 2MB because transparent huge pages are in use. As such, a lot of the memory which is being marked with madvise(..., MADV_DONTNEED) is within substantially smaller ranges than 2MB. This means that the operating system never was able to evict pages which had ranges marked as MADV_DONTNEED because the entire page has to be unneeded to allow a page to be reused. Despite initially looking like a leak, the operating system itself was unable to free memory because of madvise(2) and transparent huge pages. This led to sustained memory pressure on the machine and redis-server eventually getting OOM killed.</blockquote>

]]></description>
<dc:subject>oom-killer oom linux ops thp jemalloc huge-pages madvise redis memory</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:9b3c5ea145c2/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:oom-killer"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:oom"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:thp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jemalloc"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:huge-pages"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:madvise"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://vaurien.readthedocs.org/en/1.8/index.html">
    <title>Vaurien, the Chaos TCP Proxy — Vaurien 1.8 documentation</title>
    <dc:date>2015-02-13T11:10:44+00:00</dc:date>
    <link>http://vaurien.readthedocs.org/en/1.8/index.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>Vaurien is basically a Chaos Monkey for your TCP connections. Vaurien acts as a proxy between your application and any backend. You can use it in your functional tests or even on a real deployment through the command-line.

Vaurien is a TCP proxy that simply reads data sent to it and pass it to a backend, and vice-versa. It has built-in protocols: TCP, HTTP, Redis & Memcache. The TCP protocol is the default one and just sucks data on both sides and pass it along.

Having higher-level protocols is mandatory in some cases, when Vaurien needs to read a specific amount of data in the sockets, or when you need to be aware of the kind of response you’re waiting for, and so on.

Vaurien also has behaviors. A behavior is a class that’s going to be invoked everytime Vaurien proxies a request. That’s how you can impact the behavior of the proxy. For instance, adding a delay or degrading the response can be implemented in a behavior.

Both protocols and behaviors are plugins, allowing you to extend Vaurien by adding new ones.

Last (but not least), Vaurien provides a couple of APIs you can use to change the behavior of the proxy live. That’s handy when you are doing functional tests against your server: you can for instance start to add big delays and see how your web application reacts.</blockquote>

]]></description>
<dc:subject>proxy tcp vaurien chaos-monkey testing functional-testing failures sockets redis memcache http</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:c2b6d44f05b0/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:proxy"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:tcp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:vaurien"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:chaos-monkey"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:testing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:functional-testing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sockets"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:http"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://tech.forter.com/comparing-message-queue-architectures-on-aws/">
    <title>Comparing Message Queue Architectures on AWS</title>
    <dc:date>2015-02-03T00:40:40+00:00</dc:date>
    <link>http://tech.forter.com/comparing-message-queue-architectures-on-aws/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[A good overview -- I like the summary table.  tl;dr: <blockquote>If you are light on DevOps and not latency sensitive use SQS for job management and Kinesis for event stream processing. If latency is an issue, use ELB or 2 RabbitMQs (or 2 beanstalkds) for job management and Redis for event stream processing.</blockquote>

]]></description>
<dc:subject>amazon architecture aws messaging queueing elb rabbitmq beanstalk kinesis sqs redis kafka</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:ae3870806c75/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:amazon"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:aws"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:messaging"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queueing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:elb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rabbitmq"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:beanstalk"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kinesis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sqs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kafka"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://groups.google.com/a/jclarity.com/forum/#!topic/friends/QPXl_8ce5Fg">
    <title>Linux kernel's Transparent Huge Pages feature causing 300ms-800ms pauses</title>
    <dc:date>2014-11-04T18:05:19+00:00</dc:date>
    <link>https://groups.google.com/a/jclarity.com/forum/#!topic/friends/QPXl_8ce5Fg</link>
    <dc:creator>jm</dc:creator><description><![CDATA[bad news for low-latency apps.  See also its impact on redis: http://antirez.com/news/84]]></description>
<dc:subject>redis memory defrag huge-pages linux kernel ops latency performance transparent-huge-pages</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:02aad4ff8ea8/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:defrag"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:huge-pages"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:linux"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kernel"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:transparent-huge-pages"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://redislabs.com/blog/testing-fork-time-on-awsxen-infrastructure#.VFJgrFOsXFd">
    <title>Testing fork time on AWS/Xen infrastructure</title>
    <dc:date>2014-10-30T16:03:54+00:00</dc:date>
    <link>https://redislabs.com/blog/testing-fork-time-on-awsxen-infrastructure#.VFJgrFOsXFd</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Redis uses forking to perform persistence flushes, which means that once every 30 minutes it performs like crap (and kills the 99th percentile latency).  Given this, various Redis people have been benchmarking fork() times on various Xen platforms, since Xen has a crappy fork() implementation]]></description>
<dc:subject>fork xen redis bugs performance latency p99</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:097ee6064211/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fork"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:xen"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bugs"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:p99"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://stripe.com/blog/game-day-exercises-at-stripe">
    <title>Game Day Exercises at Stripe: Learning from `kill -9`</title>
    <dc:date>2014-10-28T20:52:23+00:00</dc:date>
    <link>https://stripe.com/blog/game-day-exercises-at-stripe</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>We’ve started running game day exercises at Stripe. During a recent game day, we tested failing over a Redis cluster by running kill -9 on its primary node, and ended up losing all data in the cluster. We were very surprised by this, but grateful to have found the problem in testing. This result and others from this exercise convinced us that game days like these are quite valuable, and we would highly recommend them for others.</blockquote>

Excellent post.  Game days are a great idea.  Also: massive Redis clustering fail]]></description>
<dc:subject>game-days redis testing stripe outages ops kill-9 failover</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:0de011811783/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:game-days"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:testing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:stripe"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:outages"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kill-9"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:failover"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/orbitz/roshiak">
    <title>Roshiak</title>
    <dc:date>2014-10-28T13:49:09+00:00</dc:date>
    <link>https://github.com/orbitz/roshiak</link>
    <dc:creator>jm</dc:creator><description><![CDATA[a Riak-based clone of Roshi, the CRDT server built on top of Redis.  some day I'll write up the CRDT we use on top of Voldemort in $work.

Comments: https://lobste.rs/s/tim5xc]]></description>
<dc:subject>riak roshi crdt redis storage time-series-data</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:90d10e6b1b00/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:riak"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:roshi"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:crdt"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:time-series-data"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html">
    <title>How Twitter Uses Redis to Scale</title>
    <dc:date>2014-09-09T10:52:12+00:00</dc:date>
    <link>http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA['105TB RAM, 39MM QPS, 10,000+ instances.'  Notes from a talk given by Yao Yu of Twitter's Cache team, where she's worked for 4 years.  Lots of interesting insights into large-scale Redis caching usage -- as in, large enough to max out the cluster hosts' network bandwidth.]]></description>
<dc:subject>twitter redis caching memcached yao-yu scaling</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:b7585fb83de9/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:twitter"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:yao-yu"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scaling"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://comcast.github.io/sirius/overview.html">
    <title>Sirius by Comcast</title>
    <dc:date>2014-04-24T09:16:58+00:00</dc:date>
    <link>http://comcast.github.io/sirius/overview.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>At Comcast, our applications need convenient, low-latency access to important reference datasets. For example, our XfinityTV websites and apps need to use entertainment-related data to serve almost every API or web request to our datacenters: information like what year Casablanca was released, or how many episodes were in Season 7 of Seinfeld, or when the next episode of the Voice will be airing (and on which channel!).

We traditionally managed this information with a combination of relational databases and RESTful web services but yearned for something simpler than the ORM, HTTP client, and cache management code our developers dealt with on a daily basis. As main memory sizes on commodity servers continued to grow, however, we asked ourselves: How can we keep this reference data entirely in RAM, while ensuring it gets updated as needed and is easily accessible to application developers?

The Sirius distributed system library is our answer to that question, and we're happy to announce that we've made it available as an open source project. Sirius is written in Scala and uses the Akka actor system under the covers, but is easily usable by any JVM-based language.
</blockquote>

Also includes a Paxos implementation with "fast follower" read-only slave replication. ASL2-licensed open source.

The only thing I can spot to be worried about is speed of startup; they note that apps need to replay a log at startup to rebuild state, which can be slow if unoptimized in my experience. 

Update: in a twitter conversation at https://twitter.com/jon_moore/status/459363751893139456 , Jon Moore indicated they haven't had problems with this even with 'datasets consuming 10-20GB of heap', and have 'benchmarked a 5-node Sirius ingest cluster up to 1k updates/sec write throughput.'  That's pretty solid!]]></description>
<dc:subject>open-source comcast paxos replication read-only datastores storage memory memcached redis sirius scala akka jvm libraries</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:54736b003116/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:open-source"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:comcast"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:paxos"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:replication"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:read-only"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:datastores"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sirius"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scala"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:akka"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:jvm"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:libraries"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://news.ycombinator.com/item?id=7506774">
    <title>Redis adds support for HyperLogLog</title>
    <dc:date>2014-04-02T10:38:41+00:00</dc:date>
    <link>https://news.ycombinator.com/item?id=7506774</link>
    <dc:creator>jm</dc:creator><description><![CDATA[good comment thread on HN, discussing hlld and bloomd as well]]></description>
<dc:subject>hll bloom-filters hyperloglog redis data-structures estimation cardinality probabilistic probability hashing random</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:1231febb74e0/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hll"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bloom-filters"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hyperloglog"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-structures"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:estimation"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cardinality"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:probabilistic"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:probability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:random"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.roguelazer.com/2013/12/a-rant-on-redis/">
    <title>Huge Redis rant</title>
    <dc:date>2014-02-20T21:20:18+00:00</dc:date>
    <link>http://www.roguelazer.com/2013/12/a-rant-on-redis/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>I want to emphasize that if you use redis as intended (as a slightly-persistent, not-HA cache), it's great. Unfortunately, more and more shops seem to be thinking that Redis is a full-service database and, as someone who's had to spend an inordinate amount of time maintaining such a setup, it's not. If you're writing software and you're thinking "hey, it would be easy to just put a SET key value in this code and be done," please reconsider. There are lots of great products out there that are better for the overwhelming majority of use cases.</blockquote>

Ouch. (via Aphyr)]]></description>
<dc:subject>redis storage architecture memory caching ha databases</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:aa7e82ae343e/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ha"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://groups.google.com/forum/#!msg/redis-db/Oazt2k7Lzz4/-7kDmWJHXLMJ">
    <title>Kelly &quot;kellabyte&quot; Sommers on Redis' &quot;relaxed CP&quot; approach to the CAP theorem</title>
    <dc:date>2013-12-07T21:18:08+00:00</dc:date>
    <link>https://groups.google.com/forum/#!msg/redis-db/Oazt2k7Lzz4/-7kDmWJHXLMJ</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>
Similar to ACID properties, if you partially provide properties it means the user has to _still_ consider in their application that the property doesn't exist, because sometimes it doesn't. In you're fsync example, if fsync is relaxed and there are no replicas, you cannot consider the database durable, just like you can't consider Redis a CP system. It can't be counted on for guarantees to be delivered. This is why I say these systems are hard for users to reason about. Systems that partially offer guarantees require in-depth knowledge of the nuances to properly use the tool. Systems that explicitly make the trade-offs in the designs are easier to reason about because it is more obvious and _predictable_.</blockquote>

]]></description>
<dc:subject>kellabyte redis cp ap cap-theorem consistency outages reliability ops database storage distcomp</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:07f669c99101/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kellabyte"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cp"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cap-theorem"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:consistency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:outages"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:reliability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:database"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distcomp"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://blog.meldium.com/home/2013/9/13/benchmarking-redis-on-aws-elasticache">
    <title>Benchmarking Redis on AWS ElastiCache</title>
    <dc:date>2013-09-16T22:48:55+00:00</dc:date>
    <link>http://blog.meldium.com/home/2013/9/13/benchmarking-redis-on-aws-elasticache</link>
    <dc:creator>jm</dc:creator><description><![CDATA[good data points, but could do with latency percentiles]]></description>
<dc:subject>latency redis measurement benchmarks ec2 elasticache aws storage tests</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:19ca978874ad/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:latency"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:measurement"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:benchmarks"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ec2"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:elasticache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:aws"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:tests"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.twilio.com/blog/2013/07/billing-incident-post-mortem.html">
    <title>Twilio Billing Incident Post-Mortem</title>
    <dc:date>2013-07-25T10:07:30+00:00</dc:date>
    <link>http://www.twilio.com/blog/2013/07/billing-incident-post-mortem.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[<blockquote>At 1:35 AM PDT on July 18, a loss of network connectivity caused all billing redis-slaves to simultaneously disconnect from the master. This caused all redis-slaves to reconnect and request full synchronization with the master at the same time. Receiving full sync requests from each redis-slave caused the master to suffer extreme load, resulting in performance degradation of the master and timeouts from redis-slaves to redis-master.
By 2:39 AM PDT the host’s load became so extreme, services relying on redis-master began to fail. At 2:42 AM PDT, our monitoring system alerted our on-call engineering team of a failure in the Redis cluster. Observing extreme load on the host, the redis process on redis-master was misdiagnosed as requiring a restart to recover. This caused redis-master to read an incorrect configuration file, which in turn caused Redis to attempt to recover from a non-existent AOF file, instead of the binary snapshot. As a result of that failed recovery, redis-master dropped all balance data. In addition to forcing recovery from a non-existent AOF, an incorrect configuration also caused redis-master to boot as a slave of itself, putting it in read-only mode and preventing the billing system from updating account balances.</blockquote>

See also http://antirez.com/news/60 for antirez' response.

Here's the takeaways I'm getting from it:

1. network partitions happen in production, and cause cascading failures.  this is a great demo of that.

2. don't store critical data in Redis.  this was the case for Twilio -- as far as I can tell they were using Redis as a front-line cache for billing data -- but it's worth saying anyway. ;)

3. Twilio were just using Redis as a cache, but a bug in their code meant that the writes to the backing SQL store were not being *read*, resulting in repeated billing and customer impact.  In other words, it turned a (fragile) cache into the authoritative store.

4. they should probably have designed their code so that write failures would not result in repeated billing for customers -- that's a bad failure path.

Good post-mortem anyway, and I'd say their customers are a good deal happier to see this published, even if it contains details of the mistakes they made along the way.]]></description>
<dc:subject>redis caching storage networking network-partitions twilio postmortems ops billing replication</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:2e374b3b528b/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:networking"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:network-partitions"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:twilio"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:postmortems"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ops"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:billing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:replication"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://engineering.pinterest.com/post/55272557617/building-a-follower-model-from-scratch">
    <title>Pinterest's follower graph store, built on Redis</title>
    <dc:date>2013-07-17T10:24:54+00:00</dc:date>
    <link>http://engineering.pinterest.com/post/55272557617/building-a-follower-model-from-scratch</link>
    <dc:creator>jm</dc:creator><description><![CDATA[This is a good, high-availability Redis configuration; sharded by userid across 8192 shards, with a Redis master/slave pair of instances for each set of N shards. I like their use of two redundancy systems -- hot slave and backup snapshots:

<blockquote>We run our cluster in a Redis master-slave configuration, and the slaves act as hot backups. Upon a master failure, we failover the slave as the new master and either bring up a new slave or reuse the old master as the new slave. We rely on ZooKeeper to make this as quick as possible.

Each master Redis instance (and slave instance) is configured to write to AOF on Amazon EBS. This ensures that if the Redis instances terminate unexpectedly then the loss of data is limited to 1 second of updates. The slave Redis instances also perform BGsave hourly which is then loaded to a more permanent store (Amazon S3). This copy is also used by Map Reduce jobs for analytics.

As a production system, we need many failure modes to guard ourselves. As mentioned, if the master host is down, we will manually failover to slave. If a single master Redis instance reboots, monit restart restores from AOF, implying a 1 second window of data loss on the shards on that instance. If the slave host goes down, we bring up a replacement. If a single slave Redis instance goes down, we rely on monit to restart using the AOF data. Because we may encounter AOF or BGsave file corruption, we BGSave and copy hourly backups to S3. Note that large file sizes can cause BGsave induced delays but in our cluster this is mitigated by smaller Redis data due to the sharding scheme.</blockquote>
]]></description>
<dc:subject>graph redis architecture ha high-availability design redundancy sharding</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:78c92555c7b0/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:graph"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ha"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:high-availability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:design"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redundancy"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sharding"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html">
    <title>The Architecture Twitter Uses to Deal with 150M Active Users, 300K QPS, a 22 MB/S Firehose, and Send Tweets in Under 5 Seconds</title>
    <dc:date>2013-07-09T09:01:05+00:00</dc:date>
    <link>http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Good read.

<blockquote>Twitter is primarily a consumption mechanism, not a production mechanism. 300K QPS are spent reading timelines and only 6000 requests per second are spent on writes.</blockquote>

* their approach of precomputing the timeline for the non-search case is a good example of optimizing for the more frequently-exercised path.

* MySQL and Redis are the underlying stores.  Redis is acting as a front-line in-RAM cache.  they're pretty happy with it: https://news.ycombinator.com/item?id=6011254

* these further talks go into more detail, apparently (haven't watched them yet):

http://www.infoq.com/presentations/Real-Time-Delivery-Twitter
http://www.infoq.com/presentations/Twitter-Timeline-Scalability
http://www.infoq.com/presentations/Timelines-Twitter

* funny thread of comments on HN, from a big-iron fan: https://news.ycombinator.com/item?id=6008228]]></description>
<dc:subject>scale architecture scalability twitter high-scalability redis mysql</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:5bddc42e545c/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scale"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:twitter"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:high-scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mysql"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://planetcassandra.org/blog/post/instagram-making-the-switch-to-cassandra-from-redis-75-instasavings">
    <title>Instagram: Making the Switch to Cassandra from Redis, a 75% 'Insta' Savings</title>
    <dc:date>2013-06-09T21:47:43+00:00</dc:date>
    <link>http://planetcassandra.org/blog/post/instagram-making-the-switch-to-cassandra-from-redis-75-instasavings</link>
    <dc:creator>jm</dc:creator><description><![CDATA[shifting data out of RAM and onto SSDs -- unsurprisingly, big savings.

<blockquote>a 12 node cluster of EC2 hi1.4xlarge instances; we store around 1.2TB of data across this cluster. At peak, we're doing around 20,000 writes per second to that specific cluster and around 15,000 reads per second. We've been really impressed with how well Cassandra has been able to drop into that role.</blockquote>

]]></description>
<dc:subject>ram ssd cassandra databases nosql redis instagram storage ec2</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:971263030ef5/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ram"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ssd"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cassandra"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:instagram"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ec2"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.crashlytics.com/blog/reducing-mongodb-traffic-by-78-with-redis-caching/">
    <title>Reducing MongoDB traffic by 78% with Redis | Crashlytics Blog</title>
    <dc:date>2013-05-23T09:04:10+00:00</dc:date>
    <link>http://www.crashlytics.com/blog/reducing-mongodb-traffic-by-78-with-redis-caching/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[One for @roflscaletips.  Crashlytics reduce MongoDB load by hacking in some hand-coded caching into their Rails app, instead of just using a front-line HTTP cache to reduce Rails *and* db load.  duh.  (via Oisin)]]></description>
<dc:subject>crashlytics fail roflscale rails caching redis ruby via:oisin</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:684457d967c4/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:crashlytics"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fail"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:roflscale"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:rails"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:caching"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ruby"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:oisin"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://aphyr.com/posts/281-call-me-maybe-carly-rae-jepsen-and-the-perils-of-network-partitions">
    <title>Call me maybe: Carly Rae Jepsen and the perils of network partitions</title>
    <dc:date>2013-05-20T16:28:49+00:00</dc:date>
    <link>http://aphyr.com/posts/281-call-me-maybe-carly-rae-jepsen-and-the-perils-of-network-partitions</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Kyle "aphyr" Kingsbury expands on his slides demonstrating the real-world failure scenarios that arise during some kinds of partitions (specifically, the TCP-hang, no clear routing failure, network partition scenario).  Great set of blog posts clarifying CAP]]></description>
<dc:subject>distributed network databases cap nosql redis mongodb postgresql riak crdt aphyr</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:821665f78174/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:distributed"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:network"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cap"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mongodb"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:postgresql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:riak"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:crdt"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:aphyr"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html">
    <title>High Scalability - Scaling Pinterest - From 0 to 10s of Billions of Page Views a Month in Two Years</title>
    <dc:date>2013-04-15T21:17:02+00:00</dc:date>
    <link>http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[wow, Pinterest have a pretty hardcore architecture.  Sharding to the max.  This is scary stuff for me:

<blockquote>a [Cassandra-style] Cluster Management Algorithm is a SPOF. If there’s a bug it impacts every node. This took them down 4 times.</blockquote>

yeah, so, eek ;)]]></description>
<dc:subject>clustering sharding architecture aws scalability scaling pinterest via:matt-sergeant redis mysql memcached</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:94eb7274d2de/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:clustering"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sharding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:architecture"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:aws"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scaling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:pinterest"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:matt-sergeant"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:mysql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="https://github.com/aaw/hyperloglog-redis#readme">
    <title>aaw/hyperloglog-redis - GitHub</title>
    <dc:date>2013-01-15T22:44:02+00:00</dc:date>
    <link>https://github.com/aaw/hyperloglog-redis#readme</link>
    <dc:creator>jm</dc:creator><description><![CDATA['This gem is a pure Ruby implementation of the HyperLogLog algorithm for estimating cardinalities of sets observed via a stream of events. A Redis instance is used for storing the counters.']]></description>
<dc:subject>cardinality sets redis algorithms ruby gems hyperloglog</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:a5e139c07bf4/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cardinality"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sets"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:algorithms"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:ruby"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:gems"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hyperloglog"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.devco.net/archives/2013/01/06/solving-monitoring-state-storage-problems-using-redis.php">
    <title>Solving monitoring state storage problems using Redis</title>
    <dc:date>2013-01-07T11:51:37+00:00</dc:date>
    <link>http://www.devco.net/archives/2013/01/06/solving-monitoring-state-storage-problems-using-redis.php</link>
    <dc:creator>jm</dc:creator><description><![CDATA[a nice basic Redis-in-practice post]]></description>
<dc:subject>redis storage</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:8a21db3f95fb/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://www.slideshare.net/crashlytics/crashlytics-on-redis-analytics">
    <title>Scaling Crashlytics: Building Analytics on Redis 2.6</title>
    <dc:date>2013-01-01T15:36:05+00:00</dc:date>
    <link>http://www.slideshare.net/crashlytics/crashlytics-on-redis-analytics</link>
    <dc:creator>jm</dc:creator><description><![CDATA[How one analytics/metrics co is using Redis on the backend]]></description>
<dc:subject>analytics redis presentation metrics</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:15778a5cc0f6/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:analytics"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:presentation"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:metrics"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://redis.io/topics/memory-optimization">
    <title>Special encoding of small aggregate data types in Redis</title>
    <dc:date>2012-11-26T13:06:38+00:00</dc:date>
    <link>http://redis.io/topics/memory-optimization</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Nice performance trick in Redis on hash storage:

'In theory in order to guarantee that we perform lookups in constant time (also known as O(1) in big O notation) there is the need to use a data structure with a constant time complexity in the average case, like an hash table. But many times hashes contain just a few fields. When hashes are small we can instead just encode them in an O(N) data structure, like a linear array with length-prefixed key value pairs. Since we do this only when N is small, the amortized time for HGET and HSET commands is still O(1): the hash will be converted into a real hash table as soon as the number of elements it contains will grow too much (you can configure the limit in redis.conf). This does not work well just from the point of view of time complexity, but also from the point of view of constant times, since a linear array of key value pairs happens to play very well with the CPU cache (it has a better cache locality than an hash table).']]></description>
<dc:subject>memory redis performance big-o hash-tables storage coding cache arrays</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:f7c066b4367c/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memory"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:performance"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:big-o"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hash-tables"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:coding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:cache"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:arrays"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://highscalability.com/blog/2012/11/19/gone-fishin-tumblr-architecture-15-billion-page-views-a-mont.html">
    <title>Tumblr Architecture - 15 Billion Page Views A Month And Harder To Scale Than Twitter</title>
    <dc:date>2012-11-21T21:07:08+00:00</dc:date>
    <link>http://highscalability.com/blog/2012/11/19/gone-fishin-tumblr-architecture-15-billion-page-views-a-mont.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Buckets of details on Tumblr's innards. fans of Finagle and Kafka, notably]]></description>
<dc:subject>tumblr scalability web finagle redis kafka</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:c26da999fe5c/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:tumblr"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scalability"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:web"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:finagle"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:kafka"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://whilefalse.blogspot.com/2012/04/scaling-its-not-what-it-used-to-be.html">
    <title>Scaling: It's Not What It Used To Be</title>
    <dc:date>2012-04-19T20:21:48+00:00</dc:date>
    <link>http://whilefalse.blogspot.com/2012/04/scaling-its-not-what-it-used-to-be.html</link>
    <dc:creator>jm</dc:creator><description><![CDATA[skamille's top 5 scaling apps.  "1. Redis. I was at a NoSQL meetup last night when someone asked "if you could put a million dollars behind one of the solutions presented here tonight, which one would you choose?" And the answer that one of the participants gave was "None of the above. I would choose Redis. Everyone uses one of these products and Redis."
2. Nginx. Your ops team probably already loves it. It's simple, it scales fabulously, and you don't have to be a programmer to understand how to run it.
3. HAProxy. Because if you're going to have hundreds or thousands of servers, you'd better have good load balancing.
4. Memcached. Redis can act as a cache but using a real caching product for such a purpose is probably a better call.
And finally:
5. Cloud hardware. Imagine trying to grow out to millions of users if you had to buy, install, and admin every piece of hardware you would need to do such a thing."
]]></description>
<dc:subject>scaling nginx memcached haproxy redis</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:3c6a1dbdfeb9/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scaling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nginx"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:memcached"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:haproxy"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://petermblair.com/fbl-n-gram-analyzer/">
    <title>feedback loop n-gram analyzer</title>
    <dc:date>2011-09-29T21:10:15+00:00</dc:date>
    <link>http://petermblair.com/fbl-n-gram-analyzer/</link>
    <dc:creator>jm</dc:creator><description><![CDATA['a simple parser of ARF compliant FBL complaints, which normalizes the email complaints and generates a 6-tuple n-gram version of the message. These n-grams are stored in a Redis database, keyed by the file in which they can be found. An inverse index also exists that allow you to find all messages containing a particular n-gram word.'
]]></description>
<dc:subject>anti-spam spam fbl feedback filtering n-grams similarity hashing redis searching</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:00bea3b79665/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:anti-spam"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:spam"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fbl"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:feedback"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:filtering"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:n-grams"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:similarity"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:hashing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:searching"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://devblog.bu.mp/how-we-use-redis-at-bump">
    <title>How we use Redis at Bump</title>
    <dc:date>2011-07-20T00:43:14+00:00</dc:date>
    <link>http://devblog.bu.mp/how-we-use-redis-at-bump</link>
    <dc:creator>jm</dc:creator><description><![CDATA[via Simon Willison.  some nice ideas here, particularly using a replication slave to handle the potentially latency-impacting disk writes in AOF mode]]></description>
<dc:subject>queueing redis nosql databases storage via:simonw replication bump</dc:subject>
<dc:source>https://pinboard.in/</dc:source>
<dc:identifier>https://pinboard.in/u:jm/b:70e64dd1ac5d/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:queueing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:via:simonw"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:replication"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:bump"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://blog.zawodny.com/2011/02/26/redis-sharding-at-craigslist/">
    <title>Redis Sharding at Craigslist | Jeremy Zawodny's blog</title>
    <dc:date>2011-02-27T23:31:09+00:00</dc:date>
    <link>http://blog.zawodny.com/2011/02/26/redis-sharding-at-craigslist/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[fascinating look inside serious Redis operations]]></description>
<dc:subject>redis sharding scaling craigslist</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:25694b34dca4/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sharding"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:scaling"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:craigslist"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://github.com/blog/655-scheduled-maintenance-today-22-00-pst">
    <title>GitHub scheduled maintainance due to Redis upgrade</title>
    <dc:date>2010-05-28T21:58:07+00:00</dc:date>
    <link>http://github.com/blog/655-scheduled-maintenance-today-22-00-pst</link>
    <dc:creator>jm</dc:creator><description><![CDATA[good comments on the processes useful for large-scale Redis upgrades]]></description>
<dc:subject>upgrades redis spof nosql databases github deployment</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:0740082abf7f/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:upgrades"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:spof"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:github"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:deployment"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis/">
    <title>A fast, fuzzy, full-text index using Redis</title>
    <dc:date>2010-05-05T17:08:53+00:00</dc:date>
    <link>http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[quite easy, using a Metaphone sound-like indexing scheme to provide the fuzz]]></description>
<dc:subject>metaphone sounds-like indexing python redis search full-text fuzzy</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:1a3b4637d2f5/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:metaphone"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:sounds-like"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:indexing"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:python"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:search"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:full-text"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:fuzzy"/>
</rdf:Bag></taxo:topics>
</item>
<item rdf:about="http://simonwillison.net/2009/Oct/22/redis/">
    <title>Why I like Redis</title>
    <dc:date>2009-10-22T14:21:35+00:00</dc:date>
    <link>http://simonwillison.net/2009/Oct/22/redis/</link>
    <dc:creator>jm</dc:creator><description><![CDATA[Simon Willison plugs Redis as a good datastore for quick-hack scripts with requirements for lots of fast, local data storage -- the kind of thing I'd often use a DB_File for]]></description>
<dc:subject>python storage databases schemaless nosql redis simon-willison data-store</dc:subject>
<dc:identifier>https://pinboard.in/u:jm/b:a2024135fb8e/</dc:identifier>
<taxo:topics><rdf:Bag>	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:python"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:storage"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:databases"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:schemaless"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:nosql"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:redis"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:simon-willison"/>
	<rdf:li rdf:resource="https://pinboard.in/u:jm/t:data-store"/>
</rdf:Bag></taxo:topics>
</item>
</rdf:RDF>