【要約】Cloud Run + Cloud Tasks の非同期処理を Go と Python で比較する [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、サーバーレス環境での長時間ジョブ実行時に、接続タイムアウトやリトライ制御の複雑さに直面する。重い処理をHTTPリクエスト内で直接実行しようとすると、以下の問題が生じる。
- ・ブラウザやプロキシによる接続タイムアウトの発生
- ・長時間接続の不安定化によるエラー率の上昇
- ・失敗時のリトライ設計における実装コストの増大
// Approach
著者は、Cloud Tasksを介在させてWebリクエストとWorker処理を分離する非同期アーキテクチャを採用した。同一の構成を異なる言語で実装し、以下の手法で最適化を図っている。
- ・Cloud Tasksによるジョブのキューイングと自動リトライ管理
- ・OIDCトークンを用いたWorkerエンドポイントのセキュリティ確保
- ・Goではインターフェースによる依存逆転、Pythonではsubprocessによる外部バイナリ実行を活用
// Result
比較の結果、処理の性質に応じた言語選定の明確な指針が得られた。実装の差異は以下の通りである。
- ・Go:型安全なペイロード管理と、軽量なコンテナによる高速な起動を実現
- ・Python:豊富なMLライブラリを活用し、重い処理をサブプロセスへ委譲する構成を実現
- ・共通:Cloud Tasksによる非同期化、リトライ、OIDC保護の恩恵を両言語で享受可能
Senior Engineer Insight
> サーバーレスにおける言語選定は、単なる好みではなく「処理の性質」で決めるべきだ。Goは型による設計強制と軽量な起動が強みであり、高スループットなAPI基盤に最適である。対してPythonは、計算リソースを外部バイナリに委譲する構成をとることで、強力なMLエコシステムを享受できる。運用面では、Pythonの巨大なイメージサイズとコールドスタート、Goの型による厳密さが、それぞれ開発・運用のコストに直結することを念頭に置く必要がある。