1. ホーム
  2. google-app-engine

[解決済み] クラウドファンクションよりApp Engineを選ぶべき時とは?

2023-05-03 17:34:13

質問

素朴な質問で申し訳ないのですが、googleのスタッフの講演を何度も見ましたが、一体なぜCFではなくAEを使うのか、まだ理解できません。

もし私が正しく理解しているなら、これらのサービスの全体のコンセプトは、"マイクロサービスアーキテクチャ"を構築することです。

  • CFとAEはどちらもステートレスです。
  • どちらも限られた時間内に実行されるものとする
  • dbsや他のgcp apisと相互作用することができます。

しかし、AEは独自のサーバーにラップする必要があります。基本的に、AEはCFと同じ機能の上に多くの複雑さを利用しています。では、どのような場合にCFの代わりに使うべきでしょうか?

どのように解決するのですか?

Cloud Functions (CFs) と Google App Engine (GAE) は、異なる仕事のための異なるツールです。仕事に適したツールを使用することは、通常、良いアイデアです。

ペンチで釘を打つ かもしれない は可能かもしれませんが、ハンマーを使うほど便利ではないでしょう。同様に、CF を使用して複雑なアプリを構築することは かもしれません。 は可能かもしれませんが、GAE を使って構築する方が間違いなく便利でしょう。

CFはGAEと比較していくつかの欠点があります(もちろん、より複雑なアプリケーションを構築するという文脈では)。

  • Node.js, Python, Go, Java, .NET Core, Ruby に限定されます。GAE は他のいくつかの一般的なプログラミング言語をサポートしています。
  • 本当に軽量化のために設計されている。 スタンドアロン そのようなコンポーネントを使用して複雑なアプリケーションを構築しようとすると、すぐに "awkward" になります。そうです、個々のリクエストの相互関係コンテキストは GAE でも同様にリストアされなければなりませんが、GAE は CF では利用できないより便利な手段でそれを行うことができます。たとえば、他のコメントで説明されているように、ユーザーセッションの管理などです。
  • GAE アプリには、個々のリクエストにまたがって存続するアプリ コンテキストがありますが、CF にはそれがありません。このようなコンテキストにより、特定の Google サービスへのアクセスが、GAE アプリではより効率的/高性能になり (あるいは、明白に可能になり)、CF ではそうではなくなります。たとえば、memcached などです。
  • GAE アプリのアプリ コンテキストを利用することで、CF 上で動作しない他のサービスに対して、より効率的でパフォーマンスの高いクライアント ライブラリをサポートすることができます。例えば、データストアにアクセスする際に ndb クライアントライブラリ (標準的な環境の GAE Python アプリでのみ利用可能) を使用してデータストアにアクセスすると、一般的なデータストアクライアントライブラリを使用するよりも効率的でパフォーマンスに優れています。
  • GAE は、CF の小売価格(各呼び出しが個別に課金される)と比較して、卸売価格(特定のインスタンスが処理するリクエスト数に関係なく、インスタンス時間に基づいて)であるため、よりコスト効率がよい。
  • 応答時間 かもしれない は、通常、リクエストを処理するアプリインスタンスがすでに実行されているため、CFよりもGAEアプリの方が短くなることが多いようです。
    • GAE アプリのコンテキストはロード/リストアする必要がなく、すでに利用可能で、CF はロード/リストアする必要がある。
    • ハンドリングコードは(ほとんどの場合)すでにロードされており、CFのコードはまだロードする必要があります。この点についてはよく分かりませんが、基本的な実装に依存すると思います。