ホームページ  >  記事  >  バックエンド開発  >  Golang を使用した Cloud Functions Gen2 - ジョブの完了を待たずにインスタンスのライフサイクルと BigQuery 挿入の安全性を実現

Golang を使用した Cloud Functions Gen2 - ジョブの完了を待たずにインスタンスのライフサイクルと BigQuery 挿入の安全性を実現

王林
王林転載
2024-02-09 21:33:10432ブラウズ

使用 Golang 的 Cloud Functions Gen2 - 实例生命周期和 BigQuery 插入安全,无需等待作业完成

php エディタ Apple が、Golang を使用した Cloud Functions Gen2 に関する記事をお届けします。この記事では、インスタンスのライフサイクルと BigQuery 挿入のセキュリティ、およびジョブの完了を待たずにこれを行う方法に焦点を当てます。この記事を読むことで、アプリケーションのパフォーマンスとセキュリティを最適化および改善する方法を学ぶことができます。このエキサイティングなトピックを一緒に探求しましょう!

質問の内容

私は、HTTP リクエストによってトリガーされる、Golang で書かれた Google Cloud Function (Gen2) を使用しています。私のユースケースでは、一部のデータを BigQuery に保存する必要があるため、HTTP リクエストに応答する前にジョブの完了を待つことを避けたいと考えています。

ただし、関数から戻った後の Cloud Function インスタンスの動作が気になります:

HTTP 応答を送信した後、インスタンスはどのくらいの期間アクティブのままですか? BigQuery ジョブが完了するまで待たなくても安全ですか?ジョブが完了する前にインスタンスを終了すると、データが失われる危険がありますか? このシナリオに関する洞察やベスト プラクティスをいただければ幸いです。

解決策

このアプローチはお勧めしません。次のドキュメントを参照してください:

関数実行タイムライン

関数は、関数の実行中に、割り当てられたリソース (メモリと CPU) にのみアクセスできます。実行サイクル外で実行されるコードは実行が保証されておらず、いつでも停止する可能性があります。したがって、関数実行の終了を常に適切に通知し、関数実行の範囲を超えてコードを実行しないようにする必要があります。

バックグラウンドアクティビティを開始しないでください

バックグラウンド アクティビティとは、関数の終了後に発生するすべてのことを指します。関数呼び出しは、関数が戻るか、Node.js イベント駆動関数の callback パラメーターを呼び出すなどして完了を通知すると完了します。正常に終了した後に実行されているコードは CPU にアクセスできず、何も進みません。

さらに、同じ環境で後続の呼び出しが行われると、バックグラウンド アクティビティが再開され、新しい呼び出しが妨げられます。これにより、予期しない動作や診断が難しいエラーが発生する可能性があります。関数の終了後にネットワークにアクセスすると、通常、接続がリセットされます (ECONNRESET エラー コード)。

バックグラウンド アクティビティは、通常、通話完了行の後に記録されたものを探すことで、個々の通話のログ内で検出できます。特にコールバックやタイマーなどの非同期操作がある場合、バックグラウンド アクティビティがコードの奥深くに埋め込まれることがあります。コードをチェックして、関数を終了する前にすべての非同期操作が完了していることを確認してください。

もう 1 つの解決策は、イベント駆動型関数として実装することです (クラウド関数の種類を参照)。次に、この関数の Pub/Sub トリガーと Pub/Sub トピックを指定します (Pub/Sub トリガー を参照)。このトピックにイベントを発行するには、クライアントを書き直す必要があります。

クライアントをオーバーライドできない場合の回避策は、HTTP 関数とイベント駆動型関数の両方を保持し、イベントをトピックに発行することで HTTP 関数が作業をイベント駆動型関数にオフロードするようにすることです。イベントのサイズと BigQuery ジョブの実行時間によっては、クライアントの待ち時間が短縮されない可能性があります。そして、このアプローチではかなりのコストがかかると思います。

以上がGolang を使用した Cloud Functions Gen2 - ジョブの完了を待たずにインスタンスのライフサイクルと BigQuery 挿入の安全性を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。