mirror of
https://github.com/viq/NewsBlur.git
synced 2025-04-13 09:38:09 +00:00
181 lines
18 KiB
HTML
181 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en"><head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="shortcut icon" href="https://newsblur.com/media/img/favicon.ico" type="image/png" />
|
||
<link rel="icon" href="https://newsblur.com/media/img/favicon_32.png" sizes="32x32"/>
|
||
<link rel="icon" href="https://newsblur.com/media/img/favicon_64.png" sizes="64x64"/>
|
||
<link rel="alternate" type="application/rss+xml"
|
||
title="The NewsBlur Blog RSS feed"
|
||
href="/feed.xml" /><!-- Begin Jekyll SEO tag v2.8.0 -->
|
||
<title>Three Months to Scale NewsBlur | The NewsBlur Blog</title>
|
||
<meta name="generator" content="Jekyll v4.3.4" />
|
||
<meta property="og:title" content="Three Months to Scale NewsBlur" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta name="description" content="At 4:16pm last Wednesday I got a short and to-the-point email from Nilay Patel at The Verge with only a link that started with the host “googlereader.blogspot.com”. The sudden spike in NewsBlur’s visitors immediately confirmed — Google was shutting down Reader." />
|
||
<meta property="og:description" content="At 4:16pm last Wednesday I got a short and to-the-point email from Nilay Patel at The Verge with only a link that started with the host “googlereader.blogspot.com”. The sudden spike in NewsBlur’s visitors immediately confirmed — Google was shutting down Reader." />
|
||
<link rel="canonical" href="https://blog.newsblur.com/2013/03/17/three-months-to-scale-newsblur/" />
|
||
<meta property="og:url" content="https://blog.newsblur.com/2013/03/17/three-months-to-scale-newsblur/" />
|
||
<meta property="og:site_name" content="The NewsBlur Blog" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="article:published_time" content="2013-03-17T17:24:00-04:00" />
|
||
<meta name="twitter:card" content="summary" />
|
||
<meta property="twitter:title" content="Three Months to Scale NewsBlur" />
|
||
<script type="application/ld+json">
|
||
{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2013-03-17T17:24:00-04:00","datePublished":"2013-03-17T17:24:00-04:00","description":"At 4:16pm last Wednesday I got a short and to-the-point email from Nilay Patel at The Verge with only a link that started with the host “googlereader.blogspot.com”. The sudden spike in NewsBlur’s visitors immediately confirmed — Google was shutting down Reader.","headline":"Three Months to Scale NewsBlur","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.newsblur.com/2013/03/17/three-months-to-scale-newsblur/"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://blog.newsblur.com/assets/newsblur_logo_512.png"}},"url":"https://blog.newsblur.com/2013/03/17/three-months-to-scale-newsblur/"}</script>
|
||
<!-- End Jekyll SEO tag -->
|
||
<link rel="stylesheet" href="/assets/main.css">
|
||
<link rel="stylesheet" type="text/css" href="https://cloud.typography.com/6565292/711824/css/fonts.css" />
|
||
<link rel="stylesheet" type="text/css" href="https://cloud.typography.com/6565292/731824/css/fonts.css" /><link type="application/atom+xml" rel="alternate" href="https://blog.newsblur.com/feed.xml" title="The NewsBlur Blog" /></head>
|
||
<body><header class="site-header" role="banner">
|
||
|
||
<div class="wrapper"><a class="site-title" rel="author" href="/">
|
||
<div class="site-title-image">
|
||
<img src="/assets/newsblur_logo_512.png">
|
||
</div>
|
||
<div class="site-title-text">The NewsBlur Blog</div>
|
||
</a><nav class="site-nav">
|
||
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
||
<label for="nav-trigger">
|
||
<span class="menu-icon">
|
||
<svg viewBox="0 0 18 15" width="18px" height="15px">
|
||
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
|
||
</svg>
|
||
</span>
|
||
</label>
|
||
|
||
<div class="trigger"><a class="page-link" href="https://www.newsblur.com">Visit NewsBlur ➤</a></div>
|
||
</nav></div>
|
||
</header>
|
||
|
||
<header class="site-subheader" role="banner">
|
||
|
||
<div class="wrapper">
|
||
<div class="top">
|
||
NewsBlur is a personal news reader that brings people together to talk about the world.
|
||
</div>
|
||
<div class="bottom">
|
||
A new sound of an old instrument.
|
||
</div>
|
||
</div>
|
||
|
||
</header>
|
||
<main class="page-content" aria-label="Content">
|
||
<div class="wrapper">
|
||
<article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">
|
||
|
||
<header class="post-header">
|
||
<h1 class="post-title p-name" itemprop="name headline">Three Months to Scale NewsBlur</h1>
|
||
<p class="post-meta">
|
||
<time class="dt-published" datetime="2013-03-17T17:24:00-04:00" itemprop="datePublished">Mar 17, 2013
|
||
</time></p>
|
||
</header>
|
||
|
||
<div class="post-content e-content" itemprop="articleBody">
|
||
<p>At 4:16pm last Wednesday I got a short and to-the-point email from Nilay Patel at The Verge with only a link that started with the host “googlereader.blogspot.com”. The sudden spike in NewsBlur’s visitors immediately confirmed — Google was shutting down Reader.</p>
|
||
|
||
<figure class="tmblr-full" data-orig-height="800" data-orig-width="600" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Late%20night%20at%20the%20office.jpeg"><img width="500" style="margin: 0 auto;" data-orig-height="800" data-orig-width="600" src="https://s3.amazonaws.com/static.newsblur.com/blog/Late%20night%20at%20the%20office.jpeg" /></figure>
|
||
|
||
<h5 id="late-night-at-the-office">Late night at the office</h5>
|
||
|
||
<p>I had been preparing for a black swan event like this for the last four years since I began NewsBlur. With the deprecation of their social features a year ago I knew it was only a matter of time before Google stopped supporting Reader entirely. I did not expect it to come this soon.</p>
|
||
|
||
<p>As the <a href="http://storify.com/mattrose/reader-o-calypse-from-the-pov-of-a-competitor">Storify history of the Reader-o-calypse</a>, NewsBlur suffered a number of hurdles with the onslaught of new subscribers.</p>
|
||
|
||
<h2 id="a-few-of-my-challenges-and-solutions">A few of my challenges and solutions</h2>
|
||
|
||
<p>I was able to handle the 1,500 users who were using the service everyday, but when 50,000 users hit an uncachable and resource intensive backend, unless you’ve done your homework and load tested the living crap out of your entire stack, there’s going to be trouble brewing. Here’s just a few of the immediate challenges I faced over the past four days:</p>
|
||
|
||
<ul>
|
||
<li>My hosting provider, Reliable Hosting Services, was neither reliable, able to host my increasing demands, or a service I could count on. I switched to Digital Ocean and immediately got to <a href="https://github.com/samuelclay/NewsBlur/blob/master/fabfile.py#L934-L970">writing new Fabric scripts</a> so I could deploy a new app/task server by issuing a single command and having it serve requests automatically within 10 minutes of bootstrapping.</li>
|
||
<li>It didn’t take long to max out my Amazon Simple Email Service (SES) account’s quota of 10,000 emails a day. So a few hours into the melee I switched to Mailgun, which unfortunately resulted in emailing myself 250,000 error reports. If you tried to email me and couldn’t get through, it’s because 50,000 emails about lost database connections made their way ahead of you in line.</li>
|
||
<li>Eventually, I was just plain blacklisted on SES for sending too many emails.</li>
|
||
<li>Fortunately, when the PayPal fraud department called because of an unprecedented spike in payments, I was prepared.</li>
|
||
</ul>
|
||
|
||
<blockquote>
|
||
<p>Paypal’s fraud department just called, asked me what’s going on. Asked the rep from Omaha if she’s heard of Reader, and then a big Ohhh.</p>
|
||
|
||
<p>— NewsBlur (@NewsBlur) <a href="https://twitter.com/NewsBlur/status/313354032083259394">March 17, 2013</a></p>
|
||
</blockquote>
|
||
|
||
<script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||
|
||
<ul>
|
||
<li>HAProxy would serve errors (site is down, maintenance, timeouts, etc) with a 200 OK status code instead of the proper 500 Exception status code because of a ridiculous undocumented requirement to <a href="https://github.com/samuelclay/NewsBlur/blob/master/templates/502.http#L1-L4">include HTTP Headers at the top of the error template</a>. When your webapp uses status codes to determine errors, you get extremely strange behavior when it loads utter crap into your DOM.</li>
|
||
<li>The inevitable file descriptor limits on Linux means that for every database connection you make, you use up one of the 1,024 file descriptors that are allocated to your process by default. Changing these limits is not only non-trivial, but they don’t tend to stick. This is responsible for bringing down Mongo, PostgreSQL, and the real-time Node servers, all at different times of the night.</li>
|
||
<li>The support queue is enormous and I’ve had to spend big chunks of my 16 hour days reassuring paying customers that eventually Stripe will forgive me and my unresponsive servers and will send the payment notification that is responsible for automatically upgrading their accounts to premium.</li>
|
||
</ul>
|
||
|
||
<figure class="tmblr-full" data-orig-height="450" data-orig-width="600" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/St%20Pattys%20Day%20Desk.jpeg"><img width="500" style="margin: 0 auto;" data-orig-height="450" data-orig-width="600" src="https://s3.amazonaws.com/static.newsblur.com/blog/St%20Pattys%20Day%20Desk.jpeg" /></figure>
|
||
|
||
<h5 id="the-sad-extent-of-my-st-patricks-day">The sad extent of my St. Patrick’s Day</h5>
|
||
|
||
<p>As a one-man-shop it has been humbling to receive the benefit of the doubt from many who have withheld their judgment despite the admittedly slow loadtimes and downtime NewsBlur experienced. Having the support of the amazing NewsBlur community is more than a guy could ask for. The tweets of encouragement, voting NewsBlur up on <a href="http://replacereader.com">replacereader.com</a> (If you haven’t yet, please tweet a vote for <a href="https://twitter.com/intent/tweet?source=webclient&text=I%20think%20%23NewsBlur%20should%20%23replacereader.%20http://replacereader.com">“#newsblur to #replacereader”</a>), and the many positive comments and blog posts from people who have tried NewsBlur is great.</p>
|
||
|
||
<p>It has also been a dream come true to receive accolades from the many who are trying NewsBlur for the first time and loving it. Since the announcement, NewsBlur has welcomed 5,000 new premium subscribers and 60,000 new users (from 50,000 users originally).</p>
|
||
|
||
<p><table cellpadding=”12” cellspacing=”12” width=”100%”><tr><td><figure class="tmblr-full" data-orig-height="225" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%201.jpg"><img width="300" data-orig-height="225" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%201.jpg" /></figure></td> <td><figure class="tmblr-full" data-orig-height="200" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%202.jpg"><img width="300" data-orig-height="200" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%202.jpg" /></figure></td> </tr><tr><td><figure class="tmblr-full" data-orig-height="225" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%203.jpg"><img width="300" data-orig-height="225" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%203.jpg" /></figure></td> <td><figure class="tmblr-full" data-orig-height="225" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%204.jpg"><img width="300" data-orig-height="225" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%204.jpg" /></figure></td> </tr><tr><td><figure class="tmblr-full" data-orig-height="400" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%205.jpg"><img width="300" data-orig-height="400" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%205.jpg" /></figure></td> <td><figure class="tmblr-full" data-orig-height="405" data-orig-width="300" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%206.jpg"><img width="300" data-orig-height="405" data-orig-width="300" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shirt%206.jpg" /></figure></td> </tr></table></p>
|
||
<h5 id="newsblur-users-are-intelligent-kind-and-good-looking">NewsBlur users are intelligent, kind, and good looking!</h5>
|
||
|
||
<h1 id="the-next-three-months">The next three months</h1>
|
||
|
||
<p>Over the next three months I’ll be working on:</p>
|
||
|
||
<ul>
|
||
<li>Scaling, scaling, scaling</li>
|
||
<li>Launching the redesign (<a href="http://dev.newsblur.com">which you can preview</a>)</li>
|
||
<li>Listening to all of you</li>
|
||
</ul>
|
||
|
||
<p>For those of you who are still trying to decide where to go now that you’re a Reader refugee let me tell you a few of the unique things NewsBlur has to offer:</p>
|
||
|
||
<ol>
|
||
<li>Radical transparency. <a href="https://github.com/samuelclay">NewsBlur is totally open source</a> and will remain that way.</li>
|
||
<li>It still feels like RSS, just with a few more bells and whistles. NewsBlur provides actual list of posts, as opposed to the more curated magazine format of some of the other popular replacements. This clean interface makes it easy to see the stories you want. One innovation however is the four different view options you have. NewsBlur can show you the original site, feed, text or story view.</li>
|
||
<li>It has training. NewsBlur hides stories you don’t want to read based on tags, keywords, authors, etc. It also highlights stories you want to read, based on the same criteria. This allows you to find the stories you care about, not just the stories that the hive cares about. And best of all, NewsBlur will show you why stories are either highlighted or hidden by showing the criteria in green or red.</li>
|
||
<li>NewsBlur has rebuilt the social community that Google had stripped out of Reader. Users can share stories through their Blurblog and discover new content by following friends’ Blurblogs. <a href="http://popular.newsblur.com">The People Have Spoken</a> is the blurblog of popular stories.</li>
|
||
<li>Because NewsBlur is entirely open-source, if you don’t want to pay you can host your own server. <a href="http://github.com/samuelclay/NewsBlur">Instructions are on GitHub</a>, where you can also find the source code for the <a href="https://github.com/samuelclay/NewsBlur/tree/master/media/ios">NewsBlur iPhone + iPad app</a> and <a href="https://github.com/samuelclay/NewsBlur/tree/master/media/android/NewsBlur">Android app</a>.</li>
|
||
<li>Most importantly, NewsBlur is not entirely a free app. The immediate benefits of revenue have been very clear over the past few days. Not only are NewsBlur’s interests aligned with its users, but as more users join NewsBlur, it makes more revenue that can be used to directly support the new users. Not convinced that paid is better than free? Read Pinboard’s Maciej Ceglowski’s essay <a href="http://blog.pinboard.in/2011/12/don_t_be_a_free_user/">Don’t Be a Free User</a>.</li>
|
||
</ol>
|
||
|
||
<figure class="tmblr-full" data-orig-height="450" data-orig-width="600" data-orig-src="https://s3.amazonaws.com/static.newsblur.com/blog/Shiloh%20in%20good%20times.jpeg"><img width="500" style="margin: 0 auto;" data-orig-height="450" data-orig-width="600" src="https://s3.amazonaws.com/static.newsblur.com/blog/Shiloh%20in%20good%20times.jpeg" /></figure>
|
||
|
||
<h5 id="shiloh-during-better-times-your-premium-subscription-goes-to-both-server-costs-and-feeding-her">Shiloh during better times. Your premium subscription goes to both server costs and feeding her</h5>
|
||
|
||
<p>With NewsBlur’s native iOS app and Android app, you can read your news and share it with your friends anywhere. And with the coming improvements over the next three months, you bet NewsBlur will be the #1 choice for Google Reader refugees.</p>
|
||
|
||
<p><a href="http://www.newsblur.com">Join NewsBlur for $24/year</a> and discover what RSS should have been.</p>
|
||
|
||
|
||
</div><a class="u-url" href="/2013/03/17/three-months-to-scale-newsblur/" hidden></a>
|
||
</article>
|
||
|
||
</div>
|
||
</main><footer class="site-footer h-card">
|
||
<data class="u-url" href="/"></data>
|
||
|
||
<div class="wrapper">
|
||
|
||
<h2 class="footer-heading">The NewsBlur Blog</h2>
|
||
|
||
<div class="footer-col-wrapper">
|
||
|
||
|
||
<div class="footer-col footer-col-1"><ul class="social-media-list"><li><a href="https://github.com/samuelclay"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#github"></use></svg> <span class="username">samuelclay</span></a></li><li><a href="https://www.twitter.com/newsblur"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#twitter"></use></svg> <span class="username">newsblur</span></a></li><li><a href="mailto:blog@newsblur.com?subject=Hello from the NewsBlur blog"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#email"></use></svg> <span class="username">blog@newsblur.com</span></a></li></ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-3">
|
||
<p>NewsBlur is a personal news reader that brings people together to talk about the world.<br />
|
||
A new sound of an old instrument.<br />
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</footer>
|
||
</body>
|
||
|
||
</html>
|