2

重いバックエンド タスク (タスク キュー) を使用するアプリケーションを構築しています。各タスクでは、Google Cloud SQL で I/O を実行しています。

GAE には 12 の同時接続に制限があるため (これが問題かどうかはわかりませんか? https://stackoverflow.com/a/26155819/687692で見ました)

""スタンダード環境で実行されている、またはスタンダード互換の API を使用している各 App Engine インスタンスは、Google Cloud SQL インスタンスに対して 12 を超える同時接続を持つことはできません。" - https://cloud.google.com/sql/faq "

この問題が原因で、ほとんどのバックエンド タスク (1 秒あたり 100 ~ 500 タスク) が失敗しています。

失敗したタスク

また、過去 4 日間のアクティブな接続を確認しました。12 を超える接続が行われている接続はありません。

過去 4 日間 - GCS

それで、これを修正するにはどのようなアプローチが必要ですか?接続プーリング (GCS を使用して GAE で行う方法は?) または他の修正?

ヘルプ - ガイダンスは大歓迎です。さらに情報が必要な場合はお知らせください。

ありがとう、

4

1 に答える 1

1

接続が適切に処理されていれば、標準の Python App Engine スケーリング設定で 12 の接続制限を超える可能性はほとんどありません。

実例を示すために、多くのタスクをスケジュールする小さなアプリケーションを作成しました。各タスクはデータベース接続を取得し、いくつかの作業を実行します。接続の問題が発生することなく、このテストを実行できます。

確認する価値のあることの 1 つは、接続をリークしていないことです (つまり、いくつかの場所で、または例外が発生したときに接続を閉じていません)。

MySQLdb の場合、closingfromを使用して接続をリークしていないことを保証できcontextlibます。

from contextlib import closing

def getDbConnection():
    return MySQLdb.connect(unix_socket='/cloudsql/instance_name', db='db', user='user', charset='utf8') 

with closing(getDbConnection()) as db:
    # do stuff, database is guaranteed to be closed
于 2016-03-07T08:10:07.020 に答える