サーバーレスとは?
サーバーレスとは、名前が示すように、サーバーレスコンピューティングを指します。サーバーなしで計算ができるのか?と疑問に思うかもしれません。実際には、サーバーレスとは文字通りサーバーが存在しないという意味ではありません。代わりに、テクノロジーを活用してサーバーの概念をビジネスロジックから抽象化し、開発者が基盤となるインフラを気にすることなくアプリケーションに集中できるようにします。
サーバーレスはどのように動作するのか?
サーバーレスが登場して以来、多くの開発者はこれを新しいテクノロジーと捉えてきました。その利便性から、確かに新しい技術です。しかし、過度に複雑に考えたり、恐れたりする必要はありません。アプリケーションを実行する根底のロジックは変わりません。サーバーレスは、他のクラウド技術と同様に、技術的手段を用いて複雑な部分を私たちから隠しているにすぎません。
サーバーレス以前は、Webアプリケーションのデプロイは面倒なプロセスでした。アプリケーションを実行するには、まずサーバー側でランタイム環境を構築する必要がありました。仮想マシンを購入し、環境を初期化し、必要な依存関係をインストールし、できるだけローカルの開発環境と一致させる必要がありました。次に、アプリケーションをユーザーがアクセスできるようにするために、ドメイン名を購入し、仮想マシンのIPアドレスで登録し、Nginxを設定して起動し、最後にアプリケーションコードをアップロードして起動する必要がありました。
従来のワークフローとは対照的に、サーバーレスのデプロイはわずか3つの簡単なステップで完了し、サーバー側の操作を極限まで抽象化します。基本的に、ユーザーのHTTPデータリクエストのチェーン全体は質的に変化しておらず、サーバーレスは全体のモデルを簡素化しているにすぎません。
詳しく説明すると、以前はサーバー側でランタイム環境を構築する必要がありましたが、FaaSアプリケーションはこのステップを関数サービスに抽象化します。以前は負荷分散とリバースプロキシが必要でしたが、FaaSアプリケーションはこれをHTTP関数トリガーに抽象化します。以前はコードのアップロードとアプリケーションの起動が必要でしたが、FaaSアプリケーションはこれを関数コードに抽象化します。
ユーザーが初めてHTTP関数トリガーにアクセスすると、トリガーはユーザーのHTTPリクエストを保持し、関数サービスに対してHTTP Requestイベント通知を生成します。
関数サービスは、アイドル状態の関数インスタンスがあるかどうかを確認します。ない場合は、関数コードリポジトリからコードを取得し、関数インスタンスを初期化して起動し、関数を実行し、HTTP Requestオブジェクトをパラメータとして渡して関数を実行します。
さらに、関数実行のHTTP Responseは関数トリガーに返され、トリガーは結果を待機しているユーザークライアントに中継します。
サーバーレスとアプリケーションホスティングPaaSプラットフォームの最も大きな違いは、リソース使用率にあります。これがサーバーレスの最も顕著な革新です。サーバーレスのアプリケーションインスタンスはゼロまでスケールダウンできますが、PaaSプラットフォームでは少なくとも1つのサーバーまたはコンテナが常に実行されている必要があります。
最初の呼び出しの前は、関数の実際のサーバー占有はゼロです。ユーザーがHTTPデータリクエストを行うと、関数サービスがHTTPイベントによってトリガーされ、関数インスタンスが起動されます。つまり、ユーザーからのリクエストがない限り、関数サービスには実行中のインスタンスがなく、サーバーリソースを消費しません。一方、PaaSプラットフォームでアプリケーションインスタンスを作成するには通常数十秒かかり、サービス可用性を確保するには少なくとも1つのサーバーがアプリケーションインスタンスを継続的に実行する必要があります。
例えるなら、サーバーレスは人感センサー付きの照明のようなものです。人がいるとすぐに点灯し、誰もいなくなると消灯します。従来の手動スイッチの照明と比較すると、人感センサー付き照明はエネルギー効率に優れています。ただし、この省エネ機能は、必要なときに素早く点灯できる能力に依存しています。
同様に、サーバーレスの利点の鍵は、その高速な起動時間にあります。どのようにしてそれを実現するのでしょうか?
なぜサーバーレスは高速に起動できるのか?
コールドスタートは元々PCの概念であり、電源投入後にBIOSテーブルを再ロードするプロセス、つまりハードウェアドライバーから起動することを指し、起動に時間がかかります。
今日のクラウド環境では、物理サーバーの電源を再投入することはほとんどありません。サーバーレスの文脈では、コールドスタートは関数の呼び出しから関数インスタンスの準備完了までの全プロセスを指します。ここでの焦点は、起動時間を最小限に抑えることです。起動時間が短いほど、リソース使用率が直接向上します。現在のクラウドプロバイダーは、言語固有の最適化を活用して、平均コールドスタート時間を100〜700ミリ秒に達成しています。GoogleのJavaScriptエンジンにおけるJust-In-Timeコンパイルのおかげで、Node.jsは最も高速なコールドスタートを誇ります。
注目すべき点は、サーバーレスサービスがゼロから起動し、関数を実行し、100ミリ秒以内にプロセスを完了できることです。これが、サーバーレスが自信を持ってゼロまでスケールダウンできる理由です。Webページを開く際、応答時間が1秒未満であれば優れていると一般的に考えられます。この文脈では、100ミリ秒の起動時間はページの読み込み時間にほとんど影響を与えません。
さらに、クラウドプロバイダーがインフラストラクチャをさらに最適化し、起動時間を短縮して、最終的にリソース使用率を向上させることは間違いありません。たとえば、関数コードのダウンロードはコールドスタート中の時間のかかるステップです。そのため、コードが更新されると、クラウドプロバイダーはプロアクティブにリソーススケジューリングを開始し、関数インスタンス用のコンテナイメージをダウンロードしてビルドします。最初のリクエストが到着したときに、これらのキャッシュされたイメージを活用し、コールドスタートのコードダウンロードステップをスキップして、イメージから直接コンテナを起動できます。この技術はウォームスタートと呼ばれます。そのため、レイテンシに敏感なアプリケーションでは、ウォームスタートやインスタンスのプリウォーミング戦略を利用して、コールドスタート時間を短縮または回避できます。
サーバーレスはどのように階層化されているのか?
サーバーレスインスタンスが実行されるとき、少なくとも3つのレイヤーで構成されます:コンテナ、ランタイム、関数コードです。
コンテナはオペレーティングシステム(OS)と考えてください。コードの実行にはハードウェアとの対話が必要であり、コンテナはカーネルとハードウェア情報をシミュレートし、コードとランタイムがその中で機能できるようにします。コンテナ情報には、メモリサイズ、OSバージョン、CPUの詳細、環境変数などが含まれます。現在、FaaSの実装では、Dockerコンテナ、仮想マシン(VM)、またはサンドボックス環境が使用されることがあります。
ランタイムは、関数が実行されるコンテキストを表します。ランタイム情報には、使用されるプログラミング言語とバージョン(Node.js v10やPython 3.6など)、呼び出し可能なオブジェクト(aliyun SDKなど)、環境変数などのシステム情報が含まれます。
この階層化アプローチの利点は何でしょうか? コンテナレイヤーはより幅広い適用性を持ち、クラウドプロバイダーは多数のコンテナインスタンスをプリウォームでき、物理サーバーリソースを効果的に断片化できます。ランタイムインスタンスは適用性が低いため、より少ない数でプリウォームできます。コンテナとランタイムが固定されると、コードのダウンロードと実行は簡単になります。この階層アーキテクチャにより、効率的なリソース最適化が可能になり、コードを迅速かつコスト効率よく実行できます。
まとめ
- 純粋なサーバーレスアプリケーションの呼び出しチェーンは、関数トリガー、関数サービス、関数コードの3つの主要コンポーネントで構成されます。これらはそれぞれ、従来のサーバー側の負荷分散&リバースプロキシ、サーバー&アプリケーションランタイム環境、アプリケーションコードデプロイを置き換えます。
- サーバーレスと従来のアプリケーションホスティングPaaSプラットフォームの最も大きな違いは、サーバーレスアプリケーションがゼロまでスケールダウンでき、イベントトリガー時に迅速に起動できることです。たとえば、Node.js関数は100ミリ秒以内に起動と実行を達成できます。
- サーバーレスは、コードモデルを簡素化するために、ユーザー制御とアプリケーション範囲を犠牲にしています。その階層構造はさらにリソース使用率を向上させ、これが非常に短いコールドスタート時間の主な要因です。
Novita AI はユーザー向けにサーバーレスサービスを開始します。今すぐウェイティングリストに参加し、サーバーレスコンピューティングでビジネスを始めましょう。
Novita AI は、AIの野心を実現するオールインワンのクラウドプラットフォームです。統合API、サーバーレス、GPUインスタンス — コスト効率の高いツールを提供します。インフラを排除し、無料で始めて、AIビジョンを現実にしましょう。
おすすめの記事
