App Engine停机时间 [英] App Engine downtime

查看:138
本文介绍了App Engine停机时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Google的App Engine的宕机时间是否过长,特别是关于数据存储的写入? 另外,宕机时间似乎是在高通信时间期间安排的,例如,在中间当天下午3:00早上。这是正常的吗?随着技术的成熟,它会不会改进?

  • 下午与清晨停机时间。数据存储在下午的时间中比上午凌晨多出20-30%时间;包括放置,更新和删除可用性)。



    注意:我相信Google会像在非高峰时段发生停机。因此,我希望他们会继续尽量减少停机时间,或者尽可能在非高峰时段安排时间。


  • 停机趋势。 strong>数据存储不可用的15分钟时间段数量一直在减少。在过去的366天中,每天平均有3.8个15分钟的数据存储空间。在过去的200天中,这一比例每天下降了60%以上。过去几个月的停机时间实际上相当不错 - 自3月1日以来,每天的停机时间不到0.25分钟。下面是一个数据存储图 write 停机时间:
    停机趋势http://imagebin.ca/img /4wkHVQPc.png







  • 解答来源



    为了回答你的问题,我写了这个脚本,它从 GAE的数据存储状态页面






    图表



    数据存储写入宕机时间从2009年7月20日至2010年7月20日(4小时)



    替代文字http://imagebin.ca/img/p9ScWTm.png



    < h3> Datastore write 从2009年7月20日至2010年7月20日的停机时间(1小时)

    替代文字http://imagebin.ca/img/9FbLut2G.png



    2009年7月20日至2010年7月20日的数据存储停机时间(4小时) b
    $ b

    替代文字http://imagebin.ca/img/t3XKLk.png



    < h3> 2010年1月至2010年7月20日的数据存储停机时间(4小时)



    alt text http://imagebin.ca/img/k36T9h.png




    原始数据



    (您可以调整变量如果您希望收集自己的数据,但参数稍有不同):

     #RAW数据:每个元素计算数据存储
    #在给定的15分钟窗口的至少一部分中不可用的天数。
    #first元素对应于从00:00到00:15的时间块,依此类推。
    RESULTS_SINCE_2010JAN01_BIN15 = [0,0,0,0,3,11,3,3,3,12,3,3,3,4,14,4,4,4,12,2 ,2,2,2,14,4,4,4,4,11,2,2,2,2,11,5,5,5,5,13,4,4,4,4,14,7 ,5,5,5,14,4,3,3,3,13,2,2,2,2,12,5,4,4,4,14,5,3,3,12,13 ,2,2,2,5,5,0,0,0,2,9,3,2,2,2,10,1,1,1,2,9,3,3,3,15]个b $ b RESULTS_SINCE_2009JUL20_BIN15 = [0,0,0,0,11,21,5,5,5,5,29,6,6,6,7,38,11,11,11,31, 7,7,7,44,12,12,12,12,37,10,10,10,10,34,7,7,7,46,11,11,11,39,15, 13,13,14,13,12,12,12,44,5,5,5,34,11,10,10,10,40,13,11,11,31,21, 12,12,11,19,21,4,4,13,28,10,9,9,16,36,10,10,10,12,32,7,7,6,35]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 = [0,0,0,0,4,12,4,4,4,4,2,6,6,6,7,27,7,7,7,21,6,6 ,6,6,32,9,9,9,9,26,8,8,8,8,27,7,7,7,30,7,7,7,27,10,8 ,8,8,28,10,9,9,9,28,4,4,4,4, 4,4,18,14,9,10,9,16,17,2,2,8,18,7,6,6,9,19, 5,5,4,21]

    #结果从COLLECTED_RESULTS中结存
    RESULTS_SINCE_2010JAN01_BIN60 = [RESULTS_SINCE_2010JAN01_BIN15 [i * 4] + RESULTS_SINCE_2010JAN01_BIN15 [i * 4 + 1] + RESULTS_SINCE_2010JAN01_BIN15 [i * 4 + 2] + RESULTS_SINCE_2010JAN01_BIN15 [i * 4 + 3] for i in xrange(24)]
    RESULTS_SINCE_2010JAN01_BIN240 = [RESULTS_SINCE_2010JAN01_BIN60 [i * 4] + RESULTS_SINCE_2010JAN01_BIN60 [i * 4 + 1] + RESULTS_SINCE_2010JAN01_BIN60 [i * 4 + 2] + RESULTS_SINCE_2010JAN01_BIN60 [i * 4 + 3] for i in xrange(6)]
    RESULTS_SINCE_2010JAN01_BIN480 = [RESULTS_SINCE_2010JAN01_BIN60 [i * 2] + RESULTS_SINCE_2010JAN01_BIN60 [i * 2 + 1] for i in xrange(3)]
    RESULTS_SINCE_2009JUL20_BIN60 = [RESULTS_SINCE_2009JUL20_BIN15 [i * 4] + RESULTS_SINCE_2009JUL20_BIN15 [i * 4 + 1] + RESULTS_SINCE_2009JUL20_BIN15 [i * 4 + 2] + RESULTS_SINCE_2009JUL20_BIN15 [i * 4 + 3] for x in xrange(24)]
    RESULTS_SINCE_2009JUL20_BIN240 = [RESULTS_SINCE_2009JUL20_BIN60 [i * 4] + RESULTS_SINCE_2009JUL20_BIN60 [i * 4 + 1] + RESULTS_SINCE_2009JUL20_BIN60 [i * 4 + 2] + RESULTS_SINCE_2009JUL20_BIN60 [i * 4 + 3] for i in xrange(6)]
    RESULTS_SINCE_2009JUL20_BIN480 = [RESULTS_SINCE_2009JUL20_BIN240 [i * 2] + RESULTS_SINCE_2009JUL20_BIN240 [i * 2 + 1] i的x范围(3)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 [I * 4] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 [I * 4 + 1] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 [I * 4 + 2] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 [I * 4 3]为i的x范围(24)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 [I * 4] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 [I * 4 + 1] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 [I * 4 + 2] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 [I * 4 + 3 ]对于我在xrange(6)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN480 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240 [i * 2] + RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240 [i * 2 + 1] for i in xrange(3)]


    Does Google's App Engine have excessive downtime, specifically with regards to datastore writes?

    Additionally, downtime seems to be scheduled during high traffic times, e.g., in the middle of the afternoon vs. 3:00AM in the morning. Is this normal? Will it improve as the technology matures?

    解决方案

    Short Answers

    1. Afternoon vs early morning downtime. The datastore has been unavailable for writes about 20-30% more often in the afternoon than in the wee hours of the morning (Pacific time; includes put, update, and delete availability).

      Note: I'm sure Google would like downtime to occur during off-peak hours. Thus I expect they'll continue to try to minimize downtime, or schedule it for off-peak hours whenever possible.

    2. Downtime trending. The number of 15-minute periods during which the datastore has been unavailable has been decreasing. In the past 366 days, there were an average of 3.8 15-minute periods in which the datastore was unavailable per day. In the past 200 days, this has decreased by 60% to 2.3 per day. Write downtime over the past few months has actually been quite good - since March 1st, there have been less than 0.25 15-minute chunks of write downtime per day. Here's a graph of datastore write downtime: Downtime trending http://imagebin.ca/img/4wkHVQPc.png


    Source of Answers

    To answer your question, I wrote this script which extracts downtime data from GAE's Datastore Status page.


    Graphs

    Datastore write downtime from 2009-Jul-20 to 2010-Jul-20 (4 hour bins):

    alt text http://imagebin.ca/img/p9ScWTm.png

    Datastore write downtime from 2009-Jul-20 to 2010-Jul-20 (1 hour bins):

    alt text http://imagebin.ca/img/9FbLut2G.png

    Datastore downtime from 2009-Jul-20 to 2010-Jul-20 (4 hour bins):

    alt text http://imagebin.ca/img/t3XKLk.png

    Datastore downtime from 2010-Jan-01 to 2010-Jul-20 (4 hour bins):

    alt text http://imagebin.ca/img/k36T9h.png


    Raw data

    (you can tweak the variables at the top of the script if you'd like to collect your own data with slightly different parameters):

    # RAW Data: Each element counts the number of days in which the datastore
    # was unavailable for at least some portion of a given 15-minute window. The
    # first element corresponds to the time chunk from 00:00 to 00:15, and so on.
    RESULTS_SINCE_2010JAN01_BIN15 = [0, 0, 0, 0, 3, 11, 3, 3, 3, 3, 12, 3, 3, 3, 4, 14, 4, 4, 4, 4, 12, 2, 2, 2, 2, 14, 4, 4, 4, 4, 11, 2, 2, 2, 2, 11, 5, 5, 5, 5, 13, 4, 4, 4, 4, 14, 7, 5, 5, 5, 14, 4, 3, 3, 3, 13, 2, 2, 2, 2, 12, 5, 4, 4, 4, 14, 5, 3, 3, 3, 12, 7, 2, 2, 2, 5, 5, 0, 0, 0, 2, 9, 3, 2, 2, 2, 10, 1, 1, 1, 2, 9, 3, 3, 3, 15]
    RESULTS_SINCE_2009JUL20_BIN15 = [0, 0, 0, 0, 11, 21, 5, 5, 5, 5, 29, 6, 6, 6, 7, 38, 11, 11, 11, 11, 37, 7, 7, 7, 7, 44, 12, 12, 12, 12, 37, 10, 10, 10, 10, 34, 7, 7, 7, 7, 46, 11, 11, 11, 11, 39, 15, 13, 13, 13, 44, 13, 12, 12, 12, 44, 5, 5, 5, 5, 34, 11, 10, 10, 10, 40, 13, 11, 11, 11, 31, 21, 12, 12, 11, 19, 21, 4, 4, 4, 13, 28, 10, 9, 9, 16, 36, 10, 10, 10, 12, 32, 7, 7, 6, 35]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15 = [0, 0, 0, 0, 4, 12, 4, 4, 4, 4, 22, 6, 6, 6, 7, 27, 7, 7, 7, 7, 21, 6, 6, 6, 6, 32, 9, 9, 9, 9, 26, 8, 8, 8, 8, 27, 7, 7, 7, 7, 30, 7, 7, 7, 7, 27, 10, 8, 8, 8, 28, 10, 9, 9, 9, 28, 4, 4, 4, 4, 21, 4, 4, 4, 4, 25, 6, 4, 4, 4, 18, 14, 9, 10, 9, 16, 17, 2, 2, 2, 8, 18, 7, 6, 6, 9, 19, 5, 5, 5, 6, 18, 5, 5, 4, 21]
    
    # RESULTS DISTILLED FROM COLLECTED_RESULTS
    RESULTS_SINCE_2010JAN01_BIN60 = [RESULTS_SINCE_2010JAN01_BIN15[i*4]+RESULTS_SINCE_2010JAN01_BIN15[i*4+1]+RESULTS_SINCE_2010JAN01_BIN15[i*4+2]+RESULTS_SINCE_2010JAN01_BIN15[i*4+3] for i in xrange(24)]
    RESULTS_SINCE_2010JAN01_BIN240 = [RESULTS_SINCE_2010JAN01_BIN60[i*4]+RESULTS_SINCE_2010JAN01_BIN60[i*4+1]+RESULTS_SINCE_2010JAN01_BIN60[i*4+2]+RESULTS_SINCE_2010JAN01_BIN60[i*4+3] for i in xrange(6)]
    RESULTS_SINCE_2010JAN01_BIN480 = [RESULTS_SINCE_2010JAN01_BIN60[i*2]+RESULTS_SINCE_2010JAN01_BIN60[i*2+1] for i in xrange(3)]
    RESULTS_SINCE_2009JUL20_BIN60 = [RESULTS_SINCE_2009JUL20_BIN15[i*4]+RESULTS_SINCE_2009JUL20_BIN15[i*4+1]+RESULTS_SINCE_2009JUL20_BIN15[i*4+2]+RESULTS_SINCE_2009JUL20_BIN15[i*4+3] for i in xrange(24)]
    RESULTS_SINCE_2009JUL20_BIN240 = [RESULTS_SINCE_2009JUL20_BIN60[i*4]+RESULTS_SINCE_2009JUL20_BIN60[i*4+1]+RESULTS_SINCE_2009JUL20_BIN60[i*4+2]+RESULTS_SINCE_2009JUL20_BIN60[i*4+3] for i in xrange(6)]
    RESULTS_SINCE_2009JUL20_BIN480 = [RESULTS_SINCE_2009JUL20_BIN240[i*2]+RESULTS_SINCE_2009JUL20_BIN240[i*2+1] for i in xrange(3)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15[i*4]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15[i*4+1]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15[i*4+2]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN15[i*4+3] for i in xrange(24)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60[i*4]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60[i*4+1]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60[i*4+2]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN60[i*4+3] for i in xrange(6)]
    RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN480 = [RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240[i*2]+RESULTS_WRITE_DOWNTIME_SINCE_2009JUL20_BIN240[i*2+1] for i in xrange(3)]
    

    这篇关于App Engine停机时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆