<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
	>
<channel>
	<title>Comments on: We haven&#8217;t changed the name of the conference to &#8220;Over Quota&#8221;</title>
	<atom:link href="http://aralbalkan.com/1471/feed" rel="self" type="application/rss+xml" />
	<link>http://aralbalkan.com/1471</link>
	<description>Passionate geekisms.</description>
	<lastBuildDate>Fri, 19 Mar 2010 19:46:31 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Aonlazio</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-187598</link>
		<dc:creator>Aonlazio</dc:creator>
		<pubDate>Thu, 25 Sep 2008 07:50:13 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-187598</guid>
		<description>So, U mean that any domain that points to google app engine results in 
Server Not Found
404 Error
Right? because that&#039;s the problem I am facing right now. I can not find what&#039;s wrong. Do u guys experience the same thing?</description>
		<content:encoded><![CDATA[<p>So, U mean that any domain that points to google app engine results in<br />
Server Not Found<br />
404 Error<br />
Right? because that&#8217;s the problem I am facing right now. I can not find what&#8217;s wrong. Do u guys experience the same thing?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Winter</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182476</link>
		<dc:creator>Nick Winter</dc:creator>
		<pubDate>Fri, 05 Sep 2008 15:03:31 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182476</guid>
		<description>Thanks, Thomas, will try that out. Appreciate the advice!</description>
		<content:encoded><![CDATA[<p>Thanks, Thomas, will try that out. Appreciate the advice!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: LBarry</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182445</link>
		<dc:creator>LBarry</dc:creator>
		<pubDate>Fri, 05 Sep 2008 09:38:43 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182445</guid>
		<description>On the contrary, it is your website that is broken! You might want to check IE7 compatibility.</description>
		<content:encoded><![CDATA[<p>On the contrary, it is your website that is broken! You might want to check IE7 compatibility.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182381</link>
		<dc:creator>Thomas</dc:creator>
		<pubDate>Fri, 05 Sep 2008 01:20:06 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182381</guid>
		<description>Nick - 

Unfortunately, for static content all you can do is set expirations, unless you route static through your application, which I wouldn&#039;t recommend.

For dynamic content however, you should make sure to generate etags and expiration times for as much stuff as possible, such as for example user avatars. What you then do is compare the etag the browser sends to you to the one you&#039;ve generated, and return a 304 if they match. I&#039;d recommend caching the generated etag but not the actual content; It is not worth it, simply pull it out of the datastore when it&#039;s actually needed; In other words when the etags don&#039;t match, or one isn&#039;t provided.

My personal experience tells me that setting expiration and etag works best for caching, the other options are not worth the bother.</description>
		<content:encoded><![CDATA[<p>Nick &#8211; </p>
<p>Unfortunately, for static content all you can do is set expirations, unless you route static through your application, which I wouldn&#8217;t recommend.</p>
<p>For dynamic content however, you should make sure to generate etags and expiration times for as much stuff as possible, such as for example user avatars. What you then do is compare the etag the browser sends to you to the one you&#8217;ve generated, and return a 304 if they match. I&#8217;d recommend caching the generated etag but not the actual content; It is not worth it, simply pull it out of the datastore when it&#8217;s actually needed; In other words when the etags don&#8217;t match, or one isn&#8217;t provided.</p>
<p>My personal experience tells me that setting expiration and etag works best for caching, the other options are not worth the bother.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Winter</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182378</link>
		<dc:creator>Nick Winter</dc:creator>
		<pubDate>Fri, 05 Sep 2008 00:59:53 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182378</guid>
		<description>Thomas, do you have any advice or resources for setting up said 304&#039;s, expirations and etags on App Engine? The only cache management method I&#039;m finding is to set expiration times in app.yaml, which seems suboptimal.</description>
		<content:encoded><![CDATA[<p>Thomas, do you have any advice or resources for setting up said 304&#8217;s, expirations and etags on App Engine? The only cache management method I&#8217;m finding is to set expiration times in app.yaml, which seems suboptimal.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mixtura</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182189</link>
		<dc:creator>mixtura</dc:creator>
		<pubDate>Thu, 04 Sep 2008 05:43:57 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182189</guid>
		<description>A funny and intriguing list of &lt;a href=&quot;http://www.dreamnut.com/greatest-web-hosting-disasters/&quot; rel=&quot;nofollow&quot;&gt; web hosting disasters &lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>A funny and intriguing list of <a href="http://www.dreamnut.com/greatest-web-hosting-disasters/" rel="nofollow"> web hosting disasters </a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182073</link>
		<dc:creator>Thomas</dc:creator>
		<pubDate>Wed, 03 Sep 2008 18:06:51 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182073</guid>
		<description>Hi Aral, fellow App Engine dev here.

I&#039;ve run into some of the same issues. Looking at your site, I notice that none of your static files return 304&#039;s on subsequent requests, resulting in firefox requesting them on every single request. You might want to look into generating proper expirations and etags - I found this to help a metric ton on app engine, particularly for e.g. uploaded images (since they come from the datastore). Your 10 min expirations doesn&#039;t seem to make firefox actually bother caching anything.

In addition to this; The short term cpu quota is extremely easy to saturate during spikes if your site does not run with a good deal of headroom to the ~350ms google considers the max for a reasonable request. The reason for this is that google will spawn up new processes, and this is very expensive (typically 3x as long - if not more, depending on complexity). At the same time request handling time will increase on existing processes (why that counts in the request time I don&#039;t know; It&#039;s in their framework/infrastructure, not in our code).

All in all, the quota system is funky as hell, and I struggle to understand how they expect us to ever use those 200k gigacycles you get every ~5 hours (the stats shown on the dash is for a 5 hour window), since any reasonable load to come near that will end up triggering enough high cpu warnings to exhaust that separate quota before even getting close. I suspect the quota works in this way so they can charge you for spikes, and use the free quota as a buffer for real sites, so you end up paying for getting slashdotted, but not normally.

How many requests have you been getting out of curiosity?</description>
		<content:encoded><![CDATA[<p>Hi Aral, fellow App Engine dev here.</p>
<p>I&#8217;ve run into some of the same issues. Looking at your site, I notice that none of your static files return 304&#8217;s on subsequent requests, resulting in firefox requesting them on every single request. You might want to look into generating proper expirations and etags &#8211; I found this to help a metric ton on app engine, particularly for e.g. uploaded images (since they come from the datastore). Your 10 min expirations doesn&#8217;t seem to make firefox actually bother caching anything.</p>
<p>In addition to this; The short term cpu quota is extremely easy to saturate during spikes if your site does not run with a good deal of headroom to the ~350ms google considers the max for a reasonable request. The reason for this is that google will spawn up new processes, and this is very expensive (typically 3x as long &#8211; if not more, depending on complexity). At the same time request handling time will increase on existing processes (why that counts in the request time I don&#8217;t know; It&#8217;s in their framework/infrastructure, not in our code).</p>
<p>All in all, the quota system is funky as hell, and I struggle to understand how they expect us to ever use those 200k gigacycles you get every ~5 hours (the stats shown on the dash is for a 5 hour window), since any reasonable load to come near that will end up triggering enough high cpu warnings to exhaust that separate quota before even getting close. I suspect the quota works in this way so they can charge you for spikes, and use the free quota as a buffer for real sites, so you end up paying for getting slashdotted, but not normally.</p>
<p>How many requests have you been getting out of curiosity?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aral</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182056</link>
		<dc:creator>Aral</dc:creator>
		<pubDate>Wed, 03 Sep 2008 16:11:35 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182056</guid>
		<description>Hey Thom,

The limits, as Shane stated, are short term CPU limits. The problem is that I have no idea what is causing them. I&#039;m not doing a lot of parsing or anything. It&#039;s a simple site and I&#039;m trying to be as good a citizen as possible -- caching stuff whenever possible, etc. 

I mean I&#039;m getting over quota errors on a view that does essential nothing more than rendering a Django template -- there must be something wrong with the system.

My friends at Google just cleared the quotas again but that&#039;s just a short-term solution. This short-term quota thing has to be fixed somehow. 

I&#039;m sending over my code to the Google team in a few moments so they can look it over and make sure that I haven&#039;t implemented the KillGoogleAppEngine anti-pattern or anything so maybe something will come of that. 

But, looking at the logs, I really don&#039;t think it&#039;s my code.

@Fernando: There are several reasons I&#039;m sticking with them. First and foremost, I still believe that it&#039;s going to be a great platform and I&#039;ve learned heaps about it. When it does mature a bit more, I plan for us to take advantage of it. The way I see it, we have a group of some of the top engineers in the world working for our app every day at Google.

Also, it&#039;s not trivial to port away from Google App Engine. Yes, the site is 90% Django but the remaining 10% is the datastore and that&#039;s not trivial to port. Hosting on the SDK is not an option (it&#039;s not a deployment environment.)

There&#039;s a tax you pay for being an early adopter but, in this case, I feel that it will be a worthy investment. And, if none of us took the plunge and braved it, then there would be no innovation. Standing and pointing from the sidelines is all well and good but new platforms need early adopters and -- even more importantly -- they need to listen to them and their feedback. 

We just have to get through this rough patch -- and the Google team are helping out as much as they can so I&#039;m sure that we will.</description>
		<content:encoded><![CDATA[<p>Hey Thom,</p>
<p>The limits, as Shane stated, are short term CPU limits. The problem is that I have no idea what is causing them. I&#8217;m not doing a lot of parsing or anything. It&#8217;s a simple site and I&#8217;m trying to be as good a citizen as possible &#8212; caching stuff whenever possible, etc. </p>
<p>I mean I&#8217;m getting over quota errors on a view that does essential nothing more than rendering a Django template &#8212; there must be something wrong with the system.</p>
<p>My friends at Google just cleared the quotas again but that&#8217;s just a short-term solution. This short-term quota thing has to be fixed somehow. </p>
<p>I&#8217;m sending over my code to the Google team in a few moments so they can look it over and make sure that I haven&#8217;t implemented the KillGoogleAppEngine anti-pattern or anything so maybe something will come of that. </p>
<p>But, looking at the logs, I really don&#8217;t think it&#8217;s my code.</p>
<p>@Fernando: There are several reasons I&#8217;m sticking with them. First and foremost, I still believe that it&#8217;s going to be a great platform and I&#8217;ve learned heaps about it. When it does mature a bit more, I plan for us to take advantage of it. The way I see it, we have a group of some of the top engineers in the world working for our app every day at Google.</p>
<p>Also, it&#8217;s not trivial to port away from Google App Engine. Yes, the site is 90% Django but the remaining 10% is the datastore and that&#8217;s not trivial to port. Hosting on the SDK is not an option (it&#8217;s not a deployment environment.)</p>
<p>There&#8217;s a tax you pay for being an early adopter but, in this case, I feel that it will be a worthy investment. And, if none of us took the plunge and braved it, then there would be no innovation. Standing and pointing from the sidelines is all well and good but new platforms need early adopters and &#8212; even more importantly &#8212; they need to listen to them and their feedback. </p>
<p>We just have to get through this rough patch &#8212; and the Google team are helping out as much as they can so I&#8217;m sure that we will.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Conder</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182051</link>
		<dc:creator>Shane Conder</dc:creator>
		<pubDate>Wed, 03 Sep 2008 15:38:38 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182051</guid>
		<description>Google App Engine actually isn&#039;t in one of Google&#039;s &quot;ForeverBeta&#039;s&quot; yet. It&#039;s actually still just a preview release, as they call it (which seems more like something other companies would call a beta). It really isn&#039;t meant to be used for production sites yet.

HOWEVER, if it can&#039;t be used for production sites then how are folks supposed to figure out if it can work for them at all? The quota&#039;s the head site is hitting are not ones you can pay to get over -- they are specific limits on processing and bandwidth over a very short period of time put in place so you don&#039;t use up your quotas or overload a particular back end machine in a short period of time.

This line pretty much sums it up: &quot;All of our quotas are listed in terms of a rolling 24 [hour] window, although there are limits on the amount of resources your application can consume during shorter periods of time.&quot;

One thing is a quota and another appears to be an fixed limit of an undocumented amount.  Also read the paragraph at the bottom of this page: http://code.google.com/appengine/articles/quotas.html

The problem here is that they make it unclear if you&#039;ll ever be able to pay to get over the limits. I&#039;ve seen Google apps return errors at times and then start working again. This limiting factor may be part of how their infrastructure works to keep as much as possible running for as much time as possible.

The fact that the errors can&#039;t be caught is interesting. The fact that the limits can be hit with 404s is very bad.

If the limits hold true even in to &quot;ForeverBeta&quot; and if 404s still count against quotas and limits, then GAE may forever remain Google Toy Engine for micro-projects.

Let&#039;s just hope efforts that Aral, and others, are putting in will sway Google in a way that allows true scaling of apps under stress rather than just blocking apps under stress.</description>
		<content:encoded><![CDATA[<p>Google App Engine actually isn&#8217;t in one of Google&#8217;s &#8220;ForeverBeta&#8217;s&#8221; yet. It&#8217;s actually still just a preview release, as they call it (which seems more like something other companies would call a beta). It really isn&#8217;t meant to be used for production sites yet.</p>
<p>HOWEVER, if it can&#8217;t be used for production sites then how are folks supposed to figure out if it can work for them at all? The quota&#8217;s the head site is hitting are not ones you can pay to get over &#8212; they are specific limits on processing and bandwidth over a very short period of time put in place so you don&#8217;t use up your quotas or overload a particular back end machine in a short period of time.</p>
<p>This line pretty much sums it up: &#8220;All of our quotas are listed in terms of a rolling 24 [hour] window, although there are limits on the amount of resources your application can consume during shorter periods of time.&#8221;</p>
<p>One thing is a quota and another appears to be an fixed limit of an undocumented amount.  Also read the paragraph at the bottom of this page: <a href="http://code.google.com/appengine/articles/quotas.html" rel="nofollow">http://code.google.com/appengine/articles/quotas.html</a></p>
<p>The problem here is that they make it unclear if you&#8217;ll ever be able to pay to get over the limits. I&#8217;ve seen Google apps return errors at times and then start working again. This limiting factor may be part of how their infrastructure works to keep as much as possible running for as much time as possible.</p>
<p>The fact that the errors can&#8217;t be caught is interesting. The fact that the limits can be hit with 404s is very bad.</p>
<p>If the limits hold true even in to &#8220;ForeverBeta&#8221; and if 404s still count against quotas and limits, then GAE may forever remain Google Toy Engine for micro-projects.</p>
<p>Let&#8217;s just hope efforts that Aral, and others, are putting in will sway Google in a way that allows true scaling of apps under stress rather than just blocking apps under stress.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bjorn</title>
		<link>http://aralbalkan.com/1471/comment-page-1#comment-182048</link>
		<dc:creator>bjorn</dc:creator>
		<pubDate>Wed, 03 Sep 2008 15:17:44 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1471#comment-182048</guid>
		<description>yeah it&#039;s still beta, and so is gmail; give them both 5-6 years and they might come out of beta state ;-)</description>
		<content:encoded><![CDATA[<p>yeah it&#8217;s still beta, and so is gmail; give them both 5-6 years and they might come out of beta state ;-)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
