You can also set the consistency guarantees to EVENTUALLY_CONSISTENT. Even
on master/slave datastore, this fails over to a read-slave. The tradeoff is
you might have consistency issues.

Here's a pretty good read about consistency vs. availability tradeoffs:

http://codahale.com/you-cant-sacrifice-partition-tolerance/

It's good to know this stuff so you have it in your back pocket.

--
Ikai Lan
Developer Programs Engineer, Google App Engine
plus.ikailan.com | twitter.com/ikai



On Fri, Dec 2, 2011 at 11:49 AM, Rishi Arora <rishi.ar...@ship-rack.com>wrote:

> Ikai, thank you for a comprehensive reply.  I had no idea you could set
> deadlines for datastore reads, even for Master/Slave db reads.  This would
> be my temporary solution until I eventually migrate to HRD.  I have already
> started looking into it, with the toughest part being appropriately
> managing user experience during the downtime and during the changeover to
> the new app-id.  My users use an Android app and Google Accounts API in
> conjunction with Android AccountManager, to interface with my GAE system,
> and they could be running multiple versions of my app at any given time.
>
> Thanks again
> - Rishi
>
>
> On Fri, Dec 2, 2011 at 1:38 PM, Ikai Lan (Google) <ika...@google.com>wrote:
>
>> I just thought of something kind of cool: a real time knob that allows
>> you to change the deadlines!
>>
>> --
>> Ikai Lan
>> Developer Programs Engineer, Google App Engine
>> plus.ikailan.com | twitter.com/ikai
>>
>>
>>
>> On Fri, Dec 2, 2011 at 11:37 AM, Ikai Lan (Google) <ika...@google.com>wrote:
>>
>>> To answer the original question:
>>>
>>> - As a general best practice, you almost always want to set a timeout
>>> for any call that might be frequent:
>>>
>>>
>>> http://code.google.com/appengine/docs/python/datastore/queries.html#Setting_the_Read_Policy_and_Datastore_Call_Deadline
>>>
>>> This is true for App Engine as well as any application outside of App
>>> Engine. You degrade gracefully by telling the user to retry or showing only
>>> a subset of data. It sucks, but at this point you have to decide between
>>> making the user wait a long time or showing partial results and doing an
>>> exponential backoff.
>>>
>>> - Use exponential backoffs if you tell your client to retry. You might
>>> show something to the user that says "loading, please wait!", but you're
>>> going to be in hot water if you just say "retry after 1 second, retry after
>>> 1 second, retry after 1 second" because these will eventually pile up. You
>>> want to do something like "retry after 2 seconds + some fuzz factor, retry
>>> after 4 seconds plus some fuzz factor, and so forth".
>>>
>>> - I've been part of a project where there were many administrative
>>> "knobs" that we could flip to gracefully degrade and turn off expensive
>>> features. This is particularly useful when you push a new version because
>>> you can narrow in on the component that seems to be causing your stack to
>>> break. It's also nice because you can turn something off, gather with your
>>> team and figure out what the plan of attack is without a full rollback. The
>>> tradeoff is that you have to build it, and it's non-trivial to have this
>>> all over your code, so you need to figure out which parts tend to be more
>>> complex than others. In an ideal world, you always know what component does
>>> what in your app, but in reality, you usually don't know that there is a
>>> weird code path that might invoke the most expensive method call over and
>>> over.
>>>
>>>
>>> --
>>> Ikai Lan
>>> Developer Programs Engineer, Google App Engine
>>> plus.ikailan.com | twitter.com/ikai
>>>
>>>
>>>
>>> On Fri, Dec 2, 2011 at 11:31 AM, Ikai Lan (Google) <ika...@google.com>wrote:
>>>
>>>> As far as I know, there are no plans to shut down M/S within the next
>>>> 12 months. This is NOT an official announcement, so if this does change
>>>> later (I don't think it will), just know that it's a gut feeling. When
>>>> there is a plan to official deprecate master/slave, we will announce it.
>>>>
>>>> Many new features will be HRD only, however. Python 2.7 is one of
>>>> them. Full text search *may* be one of them.  There are no plans to support
>>>> Python 2.7 for master/slave applications, and I don't see this changing.
>>>>
>>>> I strongly recommend migrating to HRD or at least starting to
>>>> investigate the possibility.
>>>>
>>>> --
>>>> Ikai Lan
>>>> Developer Programs Engineer, Google App Engine
>>>> plus.ikailan.com | twitter.com/ikai
>>>>
>>>>
>>>>
>>>> On Fri, Dec 2, 2011 at 9:03 AM, Rishi Arora 
>>>> <rishi.ar...@ship-rack.com>wrote:
>>>>
>>>>> Based on this:
>>>>> http://code.google.com/appengine/docs/python/datastore/hr/
>>>>>
>>>>> I don't see any strong language indicating imminent deprecation.
>>>>>  Although the fact that python2.7 does not support M/S might hint at that.
>>>>>  If Google does indeed want to deprecate M/S, why wouldn't they just say
>>>>> it, and give some fixed timeline - 1 month, 6 months, 1 year, whatever.
>>>>>  But why hint it, why not just say it?  Since I don't see a strong reason
>>>>> for Google to drop subtle hints, I assumed there's no plan to deprecate
>>>>> M/S, and I also assumed that eventually when python2.5 is phased out,
>>>>> python2.7 will support M/S.  I don't see any technical reason why 
>>>>> python2.7
>>>>> can't support M/S either.  I can achieve nearly the same level of
>>>>> concurrency with Python2.5 (albeit at a higher cost) that I can with
>>>>> Python2.7, with regards to datastore operations.
>>>>>
>>>>> Can someone at Google provide some direction on long-term support (at
>>>>> least a year or so) for M/S?
>>>>>
>>>>>
>>>>> On Fri, Dec 2, 2011 at 10:07 AM, Joshua Smith <
>>>>> joshuaesm...@charter.net> wrote:
>>>>>
>>>>>> I believe so.
>>>>>>
>>>>>> Google has made it pretty clear that M/S is deprecated and life on
>>>>>> M/S will continue to get worse and worse.
>>>>>>
>>>>>> On Dec 2, 2011, at 10:54 AM, Rishi Arora wrote:
>>>>>>
>>>>>> :)  So I'm SOL, without HR?
>>>>>>
>>>>>> On Fri, Dec 2, 2011 at 9:50 AM, Joshua Smith <
>>>>>> joshuaesm...@charter.net> wrote:
>>>>>>
>>>>>>> You can't use 2.7 unless you migrate to HR.
>>>>>>>
>>>>>>> Once you migrate to HR, the datastore read timeouts go away.
>>>>>>>
>>>>>>> And then you don't need to migrate to 2.7.
>>>>>>>
>>>>>>> -Joshua
>>>>>>>
>>>>>>> On Dec 2, 2011, at 10:37 AM, Rishi Arora wrote:
>>>>>>>
>>>>>>> > Earlier this morning I had a situation where datastore reads were
>>>>>>> timing out.  That's okay, and expected, given that I use a M/S 
>>>>>>> datastore.
>>>>>>>  However, the timeouts were of the order of 50 seconds, causing nearly 
>>>>>>> 30
>>>>>>> front-end instances to be spawned.  My usual number of active front-end
>>>>>>> instances at that time of the day is about 5, peaking at 15 
>>>>>>> occasionally.
>>>>>>>  This condition lasted only 3 minutes or so, and so, the cost impact was
>>>>>>> minimal.  However, I can imagine that if this lasted an hour or more, I
>>>>>>> would incur a lot of costs while the downtime persists.  I'm okay with 
>>>>>>> such
>>>>>>> downtimes, as long as it only leads to my customers not being able to
>>>>>>> access my site.  But if it also leads to unnecessary increases in costs,
>>>>>>> then it calls for further optimization.  So, my loaded question is - how
>>>>>>> can I handle this with python2.5?  Is python 2.7 the only answer?  I
>>>>>>> imagine python2.7 will help because while a front-end is waiting for 
>>>>>>> data
>>>>>>> store ops to complete, it can process other requests.  But are there 
>>>>>>> other
>>>>>>> ways of setting specific timeouts to datastore operations?  So, if these
>>>>>>> operations are taking too long, I'd rather just return an error to the
>>>>>>> user, instead of letting my front-end run indefinitely.
>>>>>>> >
>>>>>>> >
>>>>>>> > --
>>>>>>> > 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.
>>>>>>>
>>>>>>> --
>>>>>>> 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.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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.
>>>>>>
>>>>>>
>>>>>>  --
>>>>>> 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.
>>>>>>
>>>>>
>>>>>  --
>>>>> 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.
>>>>>
>>>>
>>>>
>>>
>>  --
>> 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.
>>
>
>  --
> 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.
>

-- 
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.

Reply via email to