Why could a start-up image not be saved and almost instantaneously loaded from disk (like PC hibernation does) ?
Would this not totally replace the need for any idle instances ? Where is the catch, considering how too obvious this is ;?) On Sep 8, 6:07 am, Tim <meer...@gmail.com> wrote: > Some of these threads are getting a bit long ("tl;dr"), but following Jon's > interesting explanations of the "15 minute minimum" issue that has had many > of us worried, let me try a brief explanation of how I see it working (I'm a > user, not a Google employee, so take this with a pinch of salt until > confirmed/refuted). > > - From when an instance starts, to when it dies, it is at any time in one > of 3 states > - ACTIVE: actively serving a request (ie from receiving an HTTP request > until it finishes serving the HTTP response) > - IDLE: inactive, not serving a request but still notionally allocated to > a machine and in memory, will NOT be killed > - FREE-IDLE: the process itself is in precisely the same state as "idle", > but is NOT billed, and is eligible to be killed at any time > > - You are billed for total instance time of all instances in states > "active" and "idle", but you are NOT billed for any time spent in "free > idle" state > > - Only "free idle" instances are truly killed (other than failure, load > balancing etc) > > - The "free idle" state is how GAE attempts to optimise scheduling and > fault tolerance without thrashing etc without costing you anything > > The question now is how an instance starts, ends, and changes from one state > to another. > > - An instance starts when either > - it is needed to serve a request (there are no IDLE or FREE-IDLE > instances available subject to max-pending-latency) - starts in ACTIVE state > - or you have specified an "always-on" count - instances will start in > IDLE state until "always-on" count is reached > - with this regards to "always-on", I don't know if what you specify > is a number of machines you in "ACTIVE or IDLE" state, or "ACTIVE or IDLE or > FREE-IDLE" state > > - Any instance becomes ACTIVE when the scheduler allocates it a request to > serve > > - An ACTIVE instance becomes IDLE when it finishes serving a request > - (with concurrency, this is actually "when it is serving 0 requests") > > - An IDLE instance becomes FREE-IDLE when either > - it has been IDLE for 15 consecutive minutes > - or the number of IDLE instances exceeds your max-idle-instances count > and this instance is chosen to become FREE-IDLE > - or something within GAE (fault tolerance, load, outages) needs to > otherwise kill your IDLE instance > - that is, they can switch any IDLE instance to FREE-IDLE and then > kill it at any time subject to their own discretion > > Now looked at in this way, you can see that "billed instance time" is not > the same as "actual instance time" (what you see on your dashboard doesn't > currently distinguish between IDLE and FREE-IDLE) but that "billed instance > time" is essentially "time spent active serving a single request, including > waiting for synchronous API calls to complete" plus "time spent in IDLE > state". This is not the same "CPU cycles consumed", but more like "share of > the capacity" (like paying for time in an internet cafe). > > But the big point is that the FREE-IDLE state is completely unbilled, and > you have some control over when an instance enters this state - it's not > true to say "all instances will be billed for a minimum of 15 minutes once > started" as we all first heard, but you should instead see that "up to > max-idle instances number of instances in the IDLE state will remain so for > 15 minutes without activity before entering FREE-IDLE" state. > > So what's the point of IDLE state for you? > Well, if you know you have a big startup time (hello Java) or you use > in-process-memory state caching (rather than, say, memcache) then IDLE > instances are your best friend, and you'll want to set a max-idle-instances > sufficient to handle the rate of traffic increases for bursts, but if your > startup time is minimal (hello python-with-webapp and handlers that only use > memcache/datastore to preserve state) then IDLE instances deliver minimal > benefit, and you'll want to set IDLE instances to a low number, maybe 1 or > even 0 if GAE agree to allow such a setting. > > This mental model is what's put the smile back on my face ... here's hoping > Jon and Greg don't come back to tell me I'm completely wrong... > > Cheers > > -- > Tim -- 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-appengine@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.