3

我正在使用應用引擎和大型查詢作爲我網站的後端。無論何時用戶點擊一下,我都會將它們記錄到bigquery中,以便在當天晚些時候進行分析。我每天接近75,000次點擊。直到上週,它一切正常。這是我使用的代碼。app_identity_service.GetAccessToken()需要比可用配額更多的配額

body = {"rows":[bodyFields]} 

    credentials = appengine.AppAssertionCredentials(scope=BIGQUERY_SCOPE) 
    http = credentials.authorize(httplib2.Http()) 
    bigquery = discovery.build('bigquery', 'v2', http=http) 

    response = bigquery.tabledata().insertAll(
     projectId=PROJECT_ID, 
     datasetId=BIGQUERY_DATASETID, 
     tableId=BIGQUERY_TABLEID, 
     body=body).execute() 

現在突然間我超過了配額例外。我的應用程序是付費應用程序引擎實例。下面是我的例外

dashboard screenshot

Attempting refresh to obtain initial access_token 

The API call app_identity_service.GetAccessToken() required more quota than is available. 
Traceback (most recent call last): 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/filename.py", line 1611, in post 
    bigquery = discovery.build('bigquery', 'v2', http=http) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/util.py", line 129, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/apiclient/discovery.py", line 198, in build 
    resp, content = http.request(requested_url) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/util.py", line 129, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/client.py", line 516, in new_request 
    self._refresh(request_orig) 
    File "/base/data/home/apps/s~projectname/bigqueryapi.387952303347375306/oauth2client/appengine.py", line 194, in _refresh 
    scopes, service_account_id=self.service_account_id) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 589, in get_access_token 
    scopes, service_account_id=service_account_id) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 547, in get_access_token_uncached 
    return rpc.get_result() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result 
    return self.__get_result_hook(self) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/app_identity/app_identity.py", line 519, in get_access_token_result 
    rpc.check_success() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success 
    self.__rpc.CheckSuccess() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 134, in CheckSuccess 
    raise self.exception 
OverQuotaError: The API call app_identity_service.GetAccessToken() required more quota than is available. 

我的流量已經沒有時間處理程序被擊中也多數量上升的堆棧跟蹤幾乎是一樣的近2個月的數據。那麼爲什麼我得到這個錯誤。

回答

2

爲了確定您遇到配額錯誤的原因,您需要共享有關您的使用情況的更多詳細信息。配額應每24小時重置一次。你知道這個錯誤出現需要多長時間,並且你已經成功服務了多少流量?

你提到你「在今天晚些時候做分析」,這表明你可能使用的是TaskQueue APIDeferred Tasks。這些任務可能因其他原因而失敗,並且可能會很快耗盡您的配額。如果您使用的是TaskQueues,則可以嘗試調整queue configuration and retry options

另一種可能可以節省配額的方式是將正在構建的bigquery發現服務保存爲類似於Memcache API的內容,以便它可以重複用於對BigQuery服務的多個請求。

+0

我使用噸TaskQueue調用函數,我不想阻止用戶的時間。任務隊列是否吃掉了access_token配額? – Sriram

+0

我也覺得問題在於發現服務。所以我重新編寫了我的代碼來使用bigQuery的REST API端點。問題仍然存在。另外根據我的理解,應用引擎API默認處理access_token的緩存 – Sriram

+0

TaskQueue單獨使用不會影響您的'access_token'配額,使用TaskQueue沒有任何問題。 'access_token'可能會被緩存,但它可能會被每個請求緩存,並且每個Task都會在一個單獨的請求中運行。 您是否有統計數據可以分享您每天運行多少任務以及多少次運行成功? – erichiggins