12

Google ドライブ ( Python SDKを使用) に大きく依存するサービスがあります。サービスは Google ドライブのコレクションとファイルを使用します。

本番ログを確認したところ、Google Drive のdrive.files.getAPI エンドポイントを呼び出すと、HTTP 500 Server Internal Error が多数発生していることがわかりました。エラー率は約0.5%です。調べてみると、極端なケースは1時間に9回連続でHTTP 500の失敗であることがわかりました。

例外は次のようになります。

  File "/home/xxxxxx/xxxxxxx/storage.py", line 1185, in get_file
    gdrive_file = self.client.files().get(fileId='0Bxn2GmQxR4zHYlNvaUlFNjl6MkE', fields='id,title,modifiedDate,createdDate,fileSize,mimeType,downloadUrl,labels').execute()
  File "/usr/lib/python2.7/dist-packages/apiclient/http.py", line 389, in execute
    raise HttpError(resp, content, self.uri)
HttpError: <HttpError 500 when requesting https://www.googleapis.com/drive/v2/files/0Bxn2GmQxR4zHYlNvaUlFNjl6MkE?fields=id%2Ctitle%2CmodifiedDate%2CcreatedDate%2CfileSize%2CmimeType%2CdownloadUrl%2Clabels&alt=json returned "Internal Error">

当社のサービスは、米国 WEST-2 データ センターの Amazon Web Service でホストされています。

誰かに同様の問題がありましたか?どんな助けでも大歓迎です。

4

3 に答える 3

12

Google インフラストラクチャは複雑で大規模で分散しているため、エラー率を 0% にすることはほぼ不可能です。リクエスト中にサーバーやハードディスクが停止する、サーバー間の予期しないタイムアウトが内部的に発生する、データセンターの停止や負荷の増加、一時的な DOS 攻撃、アプリケーションの誤動作などがあります。 ... - これらはすべて 500 のエラー率を上げる可能性があります - したがって、一般的なグッド プラクティスとして、指数バックオフと再試行戦略を実装することは、Web API を扱う場合に有効であり、提供したい場合は実際にはほぼ必須です。信頼できるサービスです。また、一時的なネットワークの不具合などをスムーズにする可能性があります...

現在、0.5% は少し高いです。全体的なエラー率は平均して低いと思いますが、ドライブ チームに報告して調査し、これを減らすようにします (タイムアウトを私たちのサーバーの依存関係)。私たちは常にエラー率を減らすためにパスを取っていますが、特に製品がかなり新しい場合は、新しい機能の構築に時間を費やさなければならないことがあります:)

于 2012-09-28T12:57:03.783 に答える
7

これは、私が見ているエラー率とほぼ同じです。指数バックオフを実行して再試行してください。

于 2012-09-18T10:18:19.117 に答える
2

以前tenacityはリクエストを再試行していました。最初にそれをインストールします

pip install tenacity

それから

from tenacity import retry, retry_if_exception_type, wait_exponential, stop_after_attempt
from googleapiclient.errors import HttpError

@retry(reraise=True, retry=retry_if_exception_type(HttpError),
       wait=wait_exponential(),
       stop=stop_after_attempt(5))
def function_that_calls_the_google_drive_api():
    pass
于 2019-12-19T21:50:42.197 に答える