仮想マシンとコンテナ技術に続いて、サーバーレス技術が新たな業界のホットスポットとなっています。サーバーレス クラウド機能により、ユーザーはサーバーの展開と運用について心配する必要がなくなります。オンライン運用を実現するために、最もコアとなるビジネスロジックを開発するだけで済みます。分散型災害復旧機能を備え、負荷に応じて容量を自動的に拡大および縮小でき、実際の通話数と通話時間に応じて課金されます。この記事では主に、Tencent Cloud のサーバーレス クラウド機能の技術的な実装上の課題とアーキテクチャ実装の原則について説明します。 主に以下の 4 つの側面からサーバーレス クラウド機能を共有します。
Serverless Cloud Function は、Tencent Cloud が提供するサーバーレス実行環境であり、ユーザーがサーバーを購入して管理することなくコードを実行できるようにします。ユーザーは、クラウド プラットフォームでサポートされている言語でコア コードを記述し、コード実行の条件を設定するだけで済みます。その後、コードは Tencent Cloud インフラストラクチャ上で柔軟かつ安全に実行され、サーバー CPU、メモリ、ネットワーク、コード展開、エラスティック スケーリング、負荷分散、その他のサービスなど、基盤となるコンピューティング リソースを完全に管理できるようになります。 サーバーレス クラウド機能を使用すると、運用および保守作業がすべて不要になり、企業と開発者はコアビジネスの開発に集中できるようになり、迅速な立ち上げと反復を実現し、ビジネス開発のリズムを把握できるようになります。 1. クラウド機能の価値と利用シナリオ クラウド コンピューティング サービス市場が成熟するにつれて、ユーザーによるクラウド コンピューティングの受け入れが徐々に増加しています。さまざまな基本的なクラウド コンポーネントのおかげで、サービスを開始するまでの時間が数か月から数日に短縮されました。ただし、従来のモデルと比較すると、ユーザーは依然としてクラウド コンポーネントに基づいて非機能要件を再構築する必要があります。 クラウド機能は、ビジネス アルゴリズムとプロセスを抽出してユーザーに引き渡して実装し、さまざまなクラウド サービスを接続して、負荷分散、自動スケーリング、障害回復、セキュリティ監視などの一般的な機能を実装しようとします。これらにより、ユーザーはまさにビルディングブロックのようにパーソナライズされたサービスを構築し、ビジネスを立ち上げるのにかかる時間を数日から数分に短縮できるようになります。 クラウド ホストと比較すると、クラウド関数はマイクロサービス アーキテクチャのビジネス シナリオをサポートするのに適しています。マルチ規格画像圧縮サービスを例に挙げると、ユーザーがCOSに画像をアップロードすると、サービスは自動的に元の画像を携帯電話、タブレット、パソコンなどに適したさまざまなサイズの規格に圧縮します。クラウド機能を使用してサービスを実装する場合、ユーザーは関数を作成し、関数のトリガー条件を「画像アップロード」と定義し、オンラインでコードを編集するか、IDEを使用してコードの作成を完了してアップロードするだけで、サービスが構築されます。ユーザーが画像をアップロードすると、定義された関数が自動的に呼び出され、画像のマルチ仕様圧縮が完了します。クラウド関数プラットフォームは、同時アップロード量に基づいて関数インスタンスを自動的にスケールアップまたはスケールダウンし、最終的には実際の呼び出し消費量に応じて課金します。 この例から、クラウド関数がユーザーにもたらす主な価値は次のとおりであることがわかります。
2. クラウド機能アーキテクチャの原則 クラウド機能プラットフォームの全体的なアーキテクチャ原理を図に示します。 クラウド関数は、SDK/WEBUI の 2 つの使用モードをユーザーに提供し、イベント登録とコールバック メカニズムを通じて他のクラウド コンポーネントに接続され、標準 API インターフェイスを提供します。呼び出し分散は、関数のリージョン、ユーザー、名前、バージョン番号、認証、およびその他の情報に基づいて関数インスタンスに適用され、利用可能な関数インスタンスに呼び出しを均等に分散します。機能管理は、機能の作成/変更/削除を担当し、機能コード管理やバージョン管理などの機能を提供します。関数スケジューリングは、関数リソースの要件に基づいて関数インスタンスを作成/破棄する適切な場所を選択します。関数インスタンスはユーザー定義関数を展開し、関数の実行と監視を担当します。 クラウド機能の位置付けとアーキテクチャ原則の観点から、クラウド機能プラットフォームを測定するための主要な技術指標は次のようにまとめることができます。
これについては以下で詳しく説明します。 3. 迅速な事業立ち上げと持続可能な発展の実現を支援する 数分以内のサービス立ち上げをサポートするには、ユーザーの研究開発の負荷を可能な限り軽減する必要があります。クラウド関数のユーザーは、起動を完了するために、簡単な関数構成とコードを提供するだけで済みます。画像圧縮を例にとると、ユーザーは次のように Python コードを編集して画像圧縮サービスを実装できます。 1 行目は依存ライブラリを導入し、4 行目から 9 行目は入力パラメータを解析し、11 行目はライブラリを呼び出して画像圧縮を完了し、12 行目から 15 行目は結果を決定して返します。ユーザーは、オンラインでコードを編集して送信したり、お気に入りの IDE を使用してローカル プログラムを開発するのと同じように編集したりできます。デバッグ後、それを zip パッケージにパッケージ化し、SDK 経由で送信します。送信が成功すると、サービスがオンラインになります。 持続的なビジネス発展を支えるためには、ユーザー機能のスムーズなアップグレードやバージョン変更を可能にする機能を提供する必要があります。ユーザーが関数コードまたは構成を更新すると、新しい呼び出し要求が新しい関数インスタンスに配布されます。元の呼び出し要求が実行されると、古い関数インスタンスは自動的に消えます。お客様に気づかれることなくスムーズにサービスが更新されます。まもなく、ユーザー関数のマルチバージョン管理がサポートされ、関数エイリアスがユーザー指定のバージョンにマッピングされ、顧客に気付かれることなく複数のバージョン間でスムーズに切り替えられるようになります。 関数の実行プロセス中に、ユーザーはログを印刷し、標準出力/エラー出力ログを Tencent Cloud ログ サービス プラットフォームにアップロードします。ユーザーは機能の実行状況をリアルタイムで監視できます。 4. サービスへのオンデマンドアクセスをサポートし、アイドルリソースを解放する クラウド機能のオンデマンド使用をサポートするには、ユーザーが最初に呼び出しを行うときにリソースの割り当てを遅らせる必要があります。関数呼び出しプロセスを次の図に示します。 呼び出しと配布時に、クラウド関数プラットフォームは関数インスタンスが存在するかどうかを判断します。そうでない場合は、インスタンスをリアルタイムで起動します。インスタンスが開始されると、関数呼び出しが実行されます。最初の呼び出しを十分に速く行うという目標を達成するには、呼び出しプロセスを段階的にレイヤーごとに最適化する必要があります。
レイヤーごとの最適化により、最初のプラットフォーム呼び出しに必要な時間を 2 秒以内に制御し、後続のプラットフォーム呼び出しに必要な時間を 5 ミリ秒以内に制御できます。顧客リクエストの数が増加または減少すると、関数インスタンスは自動的にスケールアップまたはスケールダウンします。一般的なアルゴリズムは次のとおりです。
最後の関数インスタンスにスケールダウンする場合、関数インスタンスが短期間で繰り返し起動/停止され、顧客からの呼び出しの遅延が増加するのを避けるために、リリースをしばらく遅らせる必要があります。 5. 業務を中断することなくサポートし、業務範囲を拡大 クラウド機能が中断しないようにするには、次の 2 つの災害復旧目標を達成する必要があります。
これら 3 つの災害復旧目標を達成するには、全体的なアーキテクチャを設定する必要があり、各レイヤーで対応するサポートが必要です。
たとえば、下の図に示すように、プラットフォーム内の Invoker モジュール インスタンスのハードウェアに障害が発生した場合、Invoker モジュールはステートレスであるため、障害が発生するとアクセス レイヤー CLB モジュールによって自動的に削除されます。削除後、新しいリクエストは残りの Invoker モジュール インスタンスに配布され、受信した非同期イベントは他の Invoker によって再試行できます。同期 HTTP 呼び出しはエラー要求をユーザーに直接返し、ユーザーは再試行します。障害が発生した Invoker インスタンスが回復すると、自動的に CLB に追加され、負荷の共有が継続されます。 プラットフォームが API インターフェースをアップグレードする必要がある場合、追加のみを行い変更しない戦略を採用し、新しいバージョンの API インターフェースを提供し、ユーザーの元のサービスとの互換性を維持します。ユーザーが新しいインターフェイスを採用すると、CLB は 7 層ルーティングを通じて呼び出し元モジュール インスタンスの新しいバージョンにルーティングします。負荷が減少するにつれて古いバージョンのインスタンスは徐々に縮小し、負荷が増加するにつれて新しいバージョンのインスタンスは徐々に拡大するため、ユーザーにとって透過的でスムーズなバージョンアップグレードを実現します。 クラウド機能を実装するには、さまざまなクラウドコンポーネントに接続する必要があります。クラウド コンポーネントは、イベント登録とコールバック メカニズムを提供する必要があります。クラウド コンポーネントは、登録可能なイベントと対応するコールバック インターフェースを提供します。クラウド機能により、クラウド コンポーネント通信のユーザー権限が確実に渡されます。現在、Cloud FunctionsはTencent Cloud COSストレージコンポーネントと接続されており、近々Tencent Cloud CMQやCloud Monitoringなどの他のクラウド製品とも接続され、CDNノードやIoTデバイスゲートウェイまで運用範囲が拡大され、エッジコンピューティングが実現される予定です。 6. サービスの自由な運営をサポートし、干渉や侵入を避ける クラウド機能は、クラウド機能プラットフォーム上でローカル ユーザー テストに合格したコードのシームレスな操作をサポートする必要があります。十分な互換性とユーザー関数のランタイム環境が必要です。ソフトウェア パッケージ、セキュリティ、およびその他の構成は、ユーザーの開発およびテスト環境のものと同様である必要があります。同時に、機能間の干渉を回避し、悪意のある侵入を防ぐ必要があります。 ユーザー関数間の干渉を回避するために、Cloud Function は Docker コンテナを使用して関数インスタンスをカプセル化し、Docker の名前分離、スペース分離、権限制限などのメカニズムを通じてユーザー分離を実装し、リアルタイムの競合監視とスケジュール設定などの手段を補完して、干渉をタイムリーに処理します。 ユーザー コードの実行がクラウド機能プラットフォーム全体に影響を与えないようにするために、次の図に示すように、クラウド機能管理プラットフォームとユーザー機能は分離されています。ユーザー機能は、管理プラットフォームのネットワークアドレス、操作ログなどの情報を認識できないため、クラウド機能プラットフォームの動作に影響を与えることはできません。 悪意のあるユーザー コードによるネットワークの検出と侵入を防ぐため、次の図に示すように、ユーザー関数インスタンスは制限されたパブリック VPC ネットワークに制限され、ゲートウェイを使用して外部ネットワーク サービス、他の関数インスタンス、クラウド コンポーネントと通信する必要があります。同時に、ユーザー機能インスタンスと個人の CVM 仮想マシンの統合をサポートするために、クラウド機能プラットフォームは、エラスティック ネットワーク カードを介してプライベート VPC とのネットワーク通信を開きます。 7. クラウド機能業界の発展動向 近年、サーバーレスやマイクロサービスといった概念が徐々に普及し、クラウドの機能がユーザーに理解され受け入れられ始めています。より迅速な立ち上げ、より低いコスト、より優れたアーキテクチャを求めるユーザーの要求を満たすために、Tencent Cloud はクラウド機能製品をリリースしました。ユーザーは、簡単なサービスダイヤルツールの実装、スケジュールされたタスクの実装、COS に保存されている画像、ビデオ、ファイルに対する計算の実装など、実用的な問題を解決することでクラウド機能を試し始めることができます。クラウド関数は、クラウド コンポーネントの拡張、より豊富な言語のサポート、デバッグ ツールとプロセス エンジンの段階的な改善と連携できるため、徐々にクラウド プラットフォーム全体の接着剤となり、さまざまなクラウド コンポーネントを統合して、クラウドをパブリック バックエンドにします。そうすれば、より複雑な州のサービスシナリオをサポートできるようになり、ユーザーにとって普遍的で思いやりのあるバックアップとなるでしょう。 Tencent Cloud のサーバーレス Cloud Function 製品をぜひお試しください。 Cloud Functions は、安全なアクセス、障害回復、自動スケーリング、コスト最適化、バージョン管理などの一般的なバックエンドの問題を解決し、ユーザーがビジネス イノベーションに集中できるようにします。テンセントが長年培ってきた大規模なサービス提供の能力をクラウド機能を通じてさらに深く開放し、幅広いユーザーと共有し、皆様とともに成長していきたいと考えています。 質疑応答 Q:コードを Docker にデプロイするにはどうすればよいですか? A:コードをホストマシンに直接ダウンロードし、コードディレクトリをDockerにマウントします。 Q:クラウド関数は汎用的ですか、それともクラウド プラットフォームでのみ実行できますか? A:クラウドではクラウド機能サービスが提供されており、自分で構築することもできます。 GitHub には、openlambda、iron.io など、オープンソースのクラウド機能プラットフォームが多数あります。複数のクラウド製品と接続できるため、クラウドサービスを直接使用することをお勧めします。クラウド機能だけに頼って完全なサービスを構築するのは困難です。 Q:イベント配信ではキューが使用されますか? A:非同期イベントは永続的なストレージに CMQ メッセージ キューを使用しますが、同期イベントは使用しません。 Q: Cloud Functions には開発言語に関する制限はありますか?もしそうなら、Go 言語の現在のサポートは何ですか? A:現在、Python 2.7/3.6、Node.js 4.3/6.10、Java8 をサポートしています。一般的なユーザーのニーズがあれば、PHP、Go などの他の言語もサポートできます。 Q:システム関数の呼び出しはありますか?カスタム関数の粒度に関して、どのような提案がありますか? A:シャットダウン、再起動、ネットワーク サービスの監視など、一部の危険な操作を除き、ほとんどのシステム コールを呼び出すことができます。機能の粒度は、マイクロサービスの設計原則を参照して、機能を可能な限り細分化することができます。 Q:着陸できますか? A:すでに多数のユーザー事例があり、後ほどいくつか共有する予定です。自分でも試してみるといいでしょう。現在は無料で、今後も無料パッケージを提供していきます。ご要望がございましたら、直接お問い合わせください。 Q: Cloud Functions は Kotlin をサポートしていますか? A:この言語のサポートの必要性に関するユーザーからのフィードバックはまだ受け取っていませんが、私は個人的には楽観的であり、引き続き注目していきます。 Q:リクエスト スケジューリング アルゴリズムを実装するにはどうすればよいですか? A:実際、これは一般的な負荷分散およびスケーリング アルゴリズムです。ここでより複雑なのは、拡張の必要性を事前に予測することです。これについては後で詳しく説明します。 Q:関数インスタンスへのリクエストのディスパッチの実装を紹介していただけますか? A:各関数のリクエスト キューを管理する呼び出しモジュールがあります。現在、優先順位は設定されていません。先着順で予定しております。スケジュール設定時に、送信可能なすべての関数インスタンスから 1 つの関数インスタンスが選択されます。関数インスタンスには、リクエストを受け入れ、受信時にパラメータを使用してユーザー関数を呼び出すループがあります。 Q:コードはクラウドからダウンロードできますか? A:コードには通常、他のクラウド製品への呼び出しが含まれるため、クラウド プラットフォームに何らかの依存関係があります。パブリッククラウド機能上のレイヤーをカプセル化して依存関係を排除し、さまざまなクラウドプラットフォームへのスムーズな移行を実現するオープンソースのサーバーレスフレームワークに注目してください。 Q: クラウド関数コードにはどのような制限がありますか?たとえば、どのような関数を呼び出すことができないのか、どのようなライブラリをインポートできないのかなどです。 A:無制限とみなすことができますが、シャットダウン、再起動、ポートスキャンなどの悪意のある動作は禁止されます。常駐プロセスはクラウド機能のオンデマンドアクティベーションの原則に準拠していないため、ポート監視も禁止されます。プリインストールされたライブラリが要件を満たしていない場合は、依存ライブラリを zip ファイルにパッケージ化してアップロードできます。 Q: 基盤となるコンテナ オーケストレーションのベースは何ですか? k8sですか? A: Tencent Cloudのコンテナプラットフォームに基づいており、その基礎層はK8Sです。 共有者: Tencent クラウド アーキテクチャ プラットフォーム部門の技術専門家である Chen Jie は、10 年間のクラウド コンピューティングの経験を持ち、現在は Tencent アーキテクチャ プラットフォーム部門で勤務し、エラスティック コンピューティングとクラウド機能テクノロジの研究開発を担当しています。彼は、リソースの利用率を向上させ、プログラマーの開発と運用の効率を最適化するための最先端のインフラストラクチャ プラットフォームを提供することに尽力しています。 |
<<: 詳細な分析: ZStack ハイブリッド クラウドはどのようにしてネットワークの相互接続を実現するのでしょうか?
>>: Docker は従来のアプリケーションリリース管理の終焉をもたらすのでしょうか?
[[426176]] [51CTO.com クイック翻訳] Chaos Mesh® は、Kubern...
10年前なら、QQが何なのか分からないという人がいても、それは普通のことでした。インターネットがそれ...
月収10万元の起業の夢を実現するミニプログラム起業支援プランモバイルインターネットの急速な発展に伴い...
[51CTO.com クイック翻訳] 広く受け入れられ、頻繁に使用される Azure プラットフォー...
過去 20 ~ 30 年にわたり、クラウド コンピューティングとサービスとしてのソフトウェア (Sa...
[[272944]]現在、ますます多くのアプリケーションがマイクロサービスに基づくクラウドネイティブ...
以前、プレーンテキストリンクが現在の検索エンジン最適化においてまだ有用であるかどうかについて書かれた...
onetechcloud は現在、VPS のプロモーションを行っており、価格は月額 38 元と低価格...
いわゆる「過剰」とは「適切かつ合理的な限界(臨界点)を超えること」を意味し、「過剰最適化」とは、検索...
カナダのホスティングプロバイダー 247-hosts (2004 年に設立され、Google で検索...
利用者数、訪問数、資金調達などでリードするソーシャル電子商取引が頻繁に話題となると、インターネット大...
毎年恒例のハロウィーンまであと 3 日です。この期間中はプロモーションが欠かせません。VPS 販売業...
domain.com では、スペース購入時に 40% 割引となる大きな割引コード 40HOSTING...
2012 年 1 月 25 日、Google はホームページで新しいポリシーを発表しました。 Goo...
注意しないと、Baidu には実際にいくつかのサイトの下に「Baidu ホームページに追加」というボ...