サーバーレスクラウド開発の高度なアプリケーションを紹介する記事

サーバーレスクラウド開発の高度なアプリケーションを紹介する記事

以前、アプリケーションにクラウド関数を作成し、そのクラウド関数を Express と統合し、クラウド データベースと連携して追加、削除、変更、クエリのインターフェースを作成しました。ただし、この開発方法は Serverless を使用する最良の方法ではありません。

私たちのコードでは、バックエンド アプリケーション全体のすべてのビジネス機能が 1 つの関数に記述されています。これを行う利点は、管理が容易になることです。結局のところ、1 つのアプリケーションの下には 1 つのクラウド機能しかありません。ただし、単一のクラウド関数の同時実行には制限があります。並列関数インスタンスの数はクラウドベンダーによって決定されます。制限を超えると、イベント キューは、新しい関数インスタンスを生成する前に、他の関数インスタンスの実行が完了するまで待機する必要があります。

サーバーレスは弾力的にスケーラブルではないのかと疑問に思う人もいるかもしれません。業務処理のニーズに応じてリソースが自動的に割り当てられると言われています。関数に同時実行制限があるのはなぜですか?

これを理解するには、FaaS がどのように機能するかを理解する必要があります。

FaaSの仕組み

FaaS プラットフォームでは、デフォルトでは関数は実行されず、リソースは割り当てられず、関数コードも FaaS に保存されません。 FaaS はトリガー イベントを受信した場合にのみ関数を開始して実行します。以前は、関数コードを実行するために HTTP トリガーを使用しました。関数実行プロセス全体は、実際には次の 4 つの段階に分けられます。

コードのダウンロード: FaaS プラットフォーム自体はコードを保存しません。代わりに、コードをオブジェクト ストレージに配置します。関数を実行する必要があるときは、関数コードがオブジェクト ストレージからダウンロードされ、解凍されます。したがって、FaaS プラットフォームでは通常、コード パッケージのサイズが制限され、通常は 50 MB を超えることはできません。

コンテナを起動します。コードがダウンロードされた後、FaaS は関数構成に基づいて対応するコンテナを起動します。 FaaS はリソースの分離にコンテナを使用します。

オペレーティング環境を初期化します。コードの依存関係を分析し、ユーザー初期化ロジックを実行し、エントリ関数の外部でコードを初期化するなどします。

コードの実行: エントリ関数を呼び出してコードを実行します。

関数が初めて実行されるときは、4 つの完全なステップが実行されます。最初の 3 つのプロセスは総称して「コールド スタート」と呼ばれ、最後のステップは「ホット スタート」と呼ばれます。

コールド スタート プロセス全体には、最大で数百ミリ秒かかる場合があります。関数の実行が終了した後、実行環境は一定期間保持されます。保持時間は、クラウド ベンダーによって異なりますが、数分から数十分の範囲になります。この期間中に関数を再度実行する必要がある場合、FaaS プラットフォームは最後に実行された環境を使用します。これは「実行コンテキストの再利用」であり、「インスタンスの再利用」とも呼ばれます。関数の起動プロセスは「ホット スタート」とも呼ばれます。 「ホット スタート」にかかる時間は、すべて機能の起動にかかる時間です。一定時間リクエストがない場合、関数実行環境は次のイベントが到着するまで解放され、その後再びコールドスタートから初期化されます。

次のクラウド関数を検討してください。

クラウド関数が初めて呼び出されたとき、関数の戻り値は 1 であり、これは予想どおりです。

しかし、このクラウド関数を継続的に呼び出すと、戻り値が 2 から増加したり、1 になったりすることがあります。これはインスタンスの再利用の結果です。

  • ホットスタート時は関数を実行するNode.jsプロセスが再利用され、プロセスのコンテキストが保持されるため、変数 i がインクリメントされます。
  • コールドスタートの場合、Node.js プロセスは新しく、コードは最初から完全に実行され、1 が返されます。

以下は関数のリクエスト図です。「リクエスト 1」と「リクエスト 3」はコールド スタート、「リクエスト 2」はホット スタートです。

関数が実行されると、実行環境は破棄されます。最初の関数実行時にはパフォーマンスが低下しますが、リソースの利用効率は大幅に向上します。環境は初期化され、コードを実行する必要がある場合にのみハードウェア リソースが消費されます。また、アプリケーションに多数のリクエストがある場合、ほとんどの場合、関数の実行はホット スタートになる可能性があります。

関数のライフサイクルから、関数が 1 分ごとに実行される場合、関数はほぼ常にホットスタートされ、つまり以前の実行コンテキストが再利用されることがわかります。実行コンテキストには、関数のコンテナ環境とエントリ関数の外部のコードが含まれます。

クラウド プラットフォームは、現在の負荷に基づいてクラウド機能インスタンスの数を自動的に制御し、リクエストを均等に分散します。複数の連続したリクエストは、同じインスタンスによって処理される場合とされない場合があります。これは上記のコードで確認できる内容です。 i の値は非常に制限がなく、パターンはまったくありません。したがって、クラウド関数を作成するときは、クラウド関数がステートレスかつべき等であること、つまり、現在のクラウド関数の実行が、前のクラウド関数の実行中に実行環境に残っていた情報に依存しないことを確認する必要があります。

Todo の例に戻りましょう。すべてのビジネス ロジックをクラウド関数に配置するため、処理できる同時実行の量が大幅に制限されます。同時実行性が一定のレベルに達すると、それ以上の関数インスタンスは作成できなくなり、サーバー リソースを割り当てることもできなくなります。より良い方法は、ビジネス ロジックを分割することです。 1 つのクラウド関数は、独立したビジネス ロジック プロセスに対応します。これはミニプログラムのクラウド開発に反映されています。私たちに提供されるデフォルトのミニプログラム クラウド開発テンプレートは、ミニプログラム アプリケーションが各クラウド機能を処理する方法です。

そして、機能や業務が増えていくと必然的に機能も増え、開発工程におけるコード管理が特に重要になってきます。 Tencent が公式に提供している cloudbase-framework ツールがその方法を提供します。先ほど使用した CloudBase CLI コマンドライン ツールは、cloudbase-framework の外部インターフェース ツールです。つまり、使用するコマンドラインは、実際には cloudbase-framework によって提供される関数を呼び出します。

アプリケーションを作成するための tcb new、http トリガーを作成するための tcb application deployment、http トリガーを作成するための tcb service create、コードを段階的に更新するための tcb fn code update xxx function name など、それらのいくつかは以前にすでに使用しています。

コードのデプロイに関連するこれらのコマンドに加えて、フレームワークはクラウド プラットフォーム リソースをワンストップで管理する機能も提供します。

CloudBaseフレームワークの使用

次に、サーバーレス開発モデルに従って Todo ケースをリファクタリングします。 Tencent Cloud Development CloudBase では、さまざまな開発テンプレートが作成されています。 tcb new コマンドを使用すると確認できます。アプリケーション テンプレートを選択するときは、Vue アプリケーションを選択して、Vue クラウド開発プロジェクトを作成します。

プロジェクトが作成されると、プロジェクト パスの下に cloudfunctions ディレクトリがあることがわかります。ここにクラウド関数が保存されます。 1 つの機能はフォルダーです。

では、これらの機能をどのように管理すればよいのでしょうか?プロジェクトのルート パスには、アプリケーション フレームワーク全体の構成ファイルである cloudbaserc.json ファイルがあります。この構成ファイルを使用して、プロジェクト アプリケーションを管理できます。したがって、始める前に、まずこの構成ファイル内の各構成項目の意味を理解する必要があります。

バージョン フィールド: CLI 0.9.1 以降では、動的変数機能をサポートする新しいバージョン 2.0 構成ファイルが導入されています。

新しい機能を有効にするには、cloudbaserc.json で "version": "2.0" を宣言します。新しいバージョンの構成ファイルは JSON 形式のみをサポートします。動的変数機能を使用すると、cloudbaserc.json 構成ファイル内の動的変数を使用して、環境変数やその他のデータ ソースから動的データを取得できます。 {{}} で囲まれた値は動的変数として定義され、データソース内の値を参照できます。

envId フィールド: アプリケーション ID

$schema : 設定テンプレートの説明

地域: アプリケーションが配置されている地域

フレームワーク: 設定ファイルの主な設定項目

フレームワークフィールド: name属性はアプリケーション名です

framework.plugins : ここでアプリケーションを管理します。

フレームワークはプラグイン メカニズムをサポートし、さまざまなアプリケーション フレームワークやクラウド リソース用のプラグインを提供します。アプリケーションが依存するプラグインは、plugins パラメータの下で構成されます。フレームワークは、プラグインの構成に従ってアプリケーションを管理し、アプリケーションのビルド、デプロイメント、開発、デバッグなどのプロセスを処理します。アプリケーションは複数のプラグインを使用し、異なるカスタム プロパティ名を使用してそれらを管理できます。

公式プラグインは多数あり、https://docs.cloudbase.net/framework/plugins/ で確認できます。

クラウド関数プラグイン

まず、以前に記述したクラウド関数をプラグインとして変更します。


構成が完了したら、コードを変更してデプロイメント テストを実行します。


静的ウェブサイトプラグイン

クラウド関数が構成されたら、クライアント コードに戻ります。通常の開発および展開プロセスは次のとおりです。

クラウド開発には、静的サイトホスティングサービスがあります。静的 Web サイト プラグインを使用すると、パッケージ化とオンライン展開のすべての作業を手動で行う必要がなく、ワンクリックで完了できます。

設定も非常に簡単です。

<<:  ブロックチェーンに基づく分散型金融が増加中

>>:  早く来なさい! Amazon クラウド テクノロジー AI カンファレンス オープンソース スペシャル セッションが盛り上がりを見せる

推薦する

ニュース: 最適化されたVPSが暴走した可能性

「お茶を飲むのが大好きな大鵬兄弟」から、optimizedvpsが逃げて返金を受けたというメッセージ...

仲介業者が蘇芳氏を退陣させることに成功したのは一時的な解決に過ぎない。不動産のインターネット化は一般的な傾向である。

【IT Times 週刊徹底観察】2014年第1四半期、不動産市場は徐々に冷え込み、不動産会社の業績...

謝文:ビッグデータの時代には、少しの砂で塔が建てられ、少しの毛皮でコートが作られる

地球上のどこで石を拾っても鉄を見つけることができます。しかし、鉄鉱石が世界中どこにでもあると言うのは...

電子商取引のサンプル: ユニークな食品電子商取引ウェブサイト

①インターネットや電話での注文は、従業員が箱に仕分けします。 ②仕分けされた地元の特産品の箱は、空港...

チップ不足、エッジコンピューティング、IoTが2022年のIT変革を推進する

Forrester Research は調査の中で、多くの IT プロフェッショナルがモノのインター...

微博マーケティングを成功させる鍵を簡単に分析:トピック選択のスキルを習得する

現在、Weibo を通じたマーケティングは重要な手段の 1 つになっています。Weibo はすぐに共...

#推奨# ultravps - 40 ユーロ/年/KVM/2G メモリ/50gSSD/1Gbps 帯域幅/オプションのコンピュータ ルーム 5 室

Ultravps に新しいニュースがあります。米国 (ダラス、ロサンゼルス)、ドイツ (デュッセルド...

webhostingbuzz - プロフェッショナル WordPress ホスティングが 50% オフ / VPS (onapp/managed) が 80% オフ

webhostingbuzz は、仮想ホスト\VPS などの割引コードを公開しています: 割引コード...

Baidu の検索戦略が更新された後、なぜあなたのウェブサイトは常に順位が下がるのでしょうか?

ウェブサイトが降格されたと想像するのは非常に恐ろしいことです。特に、長年培ってきたウェブサイトの場合...

servermania-1G メモリ/月額 7 USD/XEN ONAPP ベース

Servermania は 2002 年に設立されたインターネット企業です。主な事業は、サーバーのレ...

良いウェブサイトタイトルを注意深く書くことはSEO最適化の戦いの半分です

序文: ペンを紙に走らせるたびに、私は文学的なゴミを生み出すのではないかという恐怖に震えています。良...

ウェブサイトの最適化を3か月続けた後の混乱: ランキングが頻繁に変動する理由

これは私がいくつかのウェブサイトを構築した後のことでした。数か月の運用後、ウェブサイトのランキングは...

クラスター、分散、マイクロサービスの類似点と相違点について簡単に説明します。

クラスターとは何かクラスタリングとは、複数のサーバーをまとめて、各サーバーが同じビジネスを実装し、同...

マルチクラウドAPI認証が直面する2つの大きな課題

翻訳者 |李睿校正 |梁策と孫淑娟マルチクラウド戦略を採用し、クラウドネイティブ インフラストラクチ...

テンセントと手を組み、Ele.meに投資するも、Dianpingの「狼性」はまだ発展の余地あり

O2Oモデルが登場した後、この豪雨は数百軒の家屋を倒壊させ、数千本の苗木を折った。生き残り、その渦の...