A little data point action... Very low traffic site (just me, occasionally experimenting with AppEngine/Python). Simple google.appengine.ext.webapp.template usage.
http://browsermodern.appspot.com/ Cold start: 500ms Cold CPU: 400ms Warm start: 10-30ms Warm CPU: 0-20ms Swap gap: 1.5-2.0 minutes While 500ms seconds isn't huge, it can be a concern (for those that want to show more than a blank page or waiting icon during the '50ms first impression window'). I agree that the static+AJAX approach is a fast architecture (coughstilllackingfibertothecurbcough), durable, and fits well with 0.1% datastore misses. Lazy imports might help, for some use cases. http://news.bbc.co.uk/2/hi/technology/4616700.stm http://www.julianbrowne.com/article/viewer/brewers-cap-theorem http://wiki.python.org/moin/PythonSpeed/PerformanceTips#ImportStatementOverhead -- G On Dec 10, 5:19 am, bFlood <bflood...@gmail.com> wrote: > hi toby > > you said: "VM timeouts are measured on the order of minutes, not > seconds" - I have not seen this in practice since over a year ago when > GAE will still young. currently, every site I've measured is collected > in seconds (10, maybe 20) > > also: "to write a "Hello World" python app that responds from a cold > start on the order of 100m" - again, I have not seen this in practice > for quite some time. the simplest of python sites, with no imports and > very little code seem to start in the 500ms to 1s range (and > sometimes, much longer). Please note Nick's post here, where he > changed his original cold-start metrics:http://bit.ly/6Fsoxv > > I'm now under the impression that slow VM startups is a GAE issue and > while user imports are critical to keep them reasonable once they are > started, there is a lot of overhead that is completely out of our > control. The only way I've found to keep low traffic sites bearable is > to use polling from the task queue, so IMO, the title of this post is > quite appropriate > > cheers > brian > > On Dec 9, 12:26 pm, Toby Reyelts <to...@google.com> wrote: > > > Responses inline. > > > On Sun, Dec 6, 2009 at 7:49 PM, Devel63 <danstic...@gmail.com> wrote: > > > Toby, you write that it doesn't usually pay to optimize loading > > > requests. > > > > I agree with this whole-heartedly when you have your own server, and > > > only load once per day or month. It's probably true using GAE when > > > you have 100K+ page views per day. > > > I think there's a misunderstanding here. What I said was that it's not worth > > optimizing loading requests in regards to quota. Latency is a separate > > concern. > > > > But for lower-volume web sites, GAE performance is atrocious. In my > > > personal case, we have optimized in all sorts of ways (js > > > minification, liberal use of memcache, image sprites, sticking with > > > Django 0.96, etc.) ... but the typical user experience is quite poor. > > > It takes 3-10 seconds for the first page to load, and then often the > > > instance is swapped out while the user reads the current page, so that > > > the next request experiences the same thing. If the app is warm, > > > performance is fine. > > > If your VM is timing out while a user is actively visiting the site, then > > your site is extremely low traffic. VM timeouts are measured on the order of > > minutes, not seconds. So, for example, that means that you didn't receive > > any traffic to your VM at all for several minutes between the time the user > > fetched the first and second pages. > > > > Maybe this gets appreciably better as traffic improves, but of course, > > > I can't see that at present. > > > Yes, as stated above, VMs are not aggressively collected. In the normal > > case, if you have an active user of your website, you shouldn't see a > > cold-start per request. Maybe in your particular case you can asynchronously > > ping your backend (for example, with an AJAX request) a few seconds before > > they continue onto the next page? > > > I love GAE in theory, but it's getting > > > > harder to ignore the reality of low-volume performance. > > > As stated above, I think you're falling into a particularly bad extreme > > (continuous cold requests for an "active" user). This might require some > > creativity (for example, as above) to work around. > > > In terms of speeding up the loading request itself, the good news that the > > bulk of of that time is directly under your control. As an existence proof > > of this, you should be able to write a "Hello World" python app that > > responds from a cold start on the order of 100ms. This means you might try > > doing things like paring down the dependencies that you load on cold > > requests. You can also take advantage of the fact that requests for static > > content bypass your VM and are never "cold". So, for example, you can serve > > a page that is comprised mostly of static content almost instantly, and let > > it make AJAX requests to asynchronously fill in its dynamic content as your > > VM warms up. > > > If you'd rather just pay to have us maintain a warm VM for you, you can vote > > on that issue. > > > > On Dec 4, 3:38 pm, Toby Reyelts <to...@google.com> wrote: > > > > On Oct 23, 3:02 pm, bugaco <ice...@gmail.com> wrote: > > > > > > I had a bit weird experience with this... > > > > > > So I wrote app (http://analytics.bugaco.com) that runs on App Engine. > > > > > Than I looked at the request logs to see how it is running. > > > > > Request logs suggested that I'm using a lot of CPU time on hitting the > > > > > home page, but after that CPU time significantly decreases. It also > > > > > had annoying red flag suggesting that servlet is using excessive > > > > > resources and that I need to optimize it. > > > > > Testing a bit, I noticed that pinging lets app be warm, and I had cron > > > > > doing the pings for a few days; while also noticing that it does not > > > > > do anything useful > > > > > > Conclusion: > > > > > 1. If log files don't suggest that you are better off pinging people > > > > > would not ping > > > > > I'm not sure what you mean here, but we have plans to change the admin > > > > console to explicitly call out loading requests, so you can take that > > > > into account when profiling your application. Until that becomes > > > > available, it's pretty easy for you to detect and log loading requests > > > > yourself. > > > > > > 2. It is stupid that google counts warming up your app toward CPU time > > > > > (leading to profiling, that leads to pinging) > > > > > A couple of things: > > > > > 1) CPU time doesn't grow on trees, it comes out of your free or paid > > > > quota. Why should we hide this from you? > > > > > 2) The number of loading requests your application receives are > > > > inversely proportional to its traffic. If you get more traffic, you'll > > > > receive fewer loading requests. This means it usually doesn't pay to > > > > optimize loading requests, unless you're just trying to reduce user > > > > latency. > > > > > > 3. It is very stupid that applications can not denote 'keep this code > > > > > path warm/cache it/or something' that will allow new users not to give > > > > > up on the up until they get first response. > > > > > Unfortunately, it takes an inordinate amount of physical hardware to > > > > keep on the order of millions of applications in memory, which is > > > > somewhat counter to free. If our startup optimizations plus your own > > > > optimizations don't satisfy you, then maybe you can voice your opinion > > > > on paying for a warm VM (http://code.google.com/p/googleappengine/ > > > > issues/detail?id=2456)? > > > > > > So, as a conclusion, I think AppEngine is AWESOME. And I also think it > > > > > SUCKS. > > > > > I love SDK, ability to deploy and test and use all the cool things. > > > > > I don't like the idea that it can not serve a (entry)page in 3-5 > > > > > seconds as I think that it leaves bad taste in users mouth, and > > > > > consequently bad taste in developers mouth. > > > > > > Finally, I am not sure I'll use AppEngine for developing other > > > > > applications as I'd rather go with paid hosting that provides some > > > > > level of performance on serving pages. I think Google would win a lot > > > > > of good will if they at least provide quick serving of static > > > > > resources. > > > > > Google App Engine already serves static resources without intervening > > > > requests to application VMs. This means that, for example, you could > > > > serve a page that was entirely static content, with a small amount of > > > > JS to ping your VM with an asynchronous dynamic request to wake it up. > > > > That page would be served instantly to the user. You need to ensure > > > > though, that the resources are indeed specified as static content in > > > > your app.yaml or appengine-web.xml. > > > > > > One may wonder how to do that, and given that they have all those yaml > > > > > files there may be yaml file that specifies a warm static resource. > > > > > This would decrease a need for pinging your app as it would allow user > > > > > to hit entry page, and google to pre-cache app much easier. > > > > -- > > > > You received this message because you are subscribed to the Google Groups > > > "Google App Engine" group. > > > To post to this group, send email to google-appeng...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib > > > e...@googlegroups.com> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/google-appengine?hl=en. -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.