サーバーレスアーキテクチャでは、より多くのポイントオブプレゼンスを持つことが、パフォーマンスに大きな好影響をもたらします。
この記事を読み終えると、以下のことができるようになります。
記事のリンクをコピーする
サーバーレスコンピューティングの利点の1つはどこからでも、アプリケーションコードを実行できることです。定義上、サーバーレスアーキテクチャでは配信元サーバー は存在しないため、エンドユーザーに近いエッジロケーションでコードを実行することが可能です。この機能を活用し、レイテンシーの削減に成功した2つのサーバーレスプラットフォームが、AWS Lambda@Edgeと Cloudflare Workersです。Lambdaのパフォーマンスを、Cloudflare WorkersとLambda@Edgeのパフォーマンスと比較、測定することで、エッジにサーバーレスアプリケーションを展開した場合の効果を確認することができます。以下のテストの結果は、Cloudflare Workersの応答速度が他の2つよりも速いことを示します。
AWS Lambdaは、Amazon Web Servicesが提供するサーバーレスインフラストラクチャサービスです。Lambdaは、さまざまな言語で記述されたイベント駆動型アプリケーション機能をホストし、必要な時に起動して実行します。
AWSでは、世界中の多くの地域で展開されています。通常、Lambdaでホストされるアプリケーションは、これらの地域の一か所でのみホストされます。
AWS Lambda@Edge は、1つの地理的エリアではなく、グローバルに分散されたすべてのAWSリージョンに展開されたLambdaです。Lambdaは複数の言語をサポートしていますが、Lambda@Edge関数はJavaScriptを実行するための実行環境であるNode.js上で実行されます。Lambda@Edg関数がトリガーされると、トリガーイベントのソースに最も近いAWSリージョン内で実行されます。つまり、アプリケーションを使用する人またはマシンにできるだけ近い場所で実行されます。
たとえば、シカゴのユーザーが、サーバーレスアーキテクチャのアプリケーションを使用して情報を要求するとします。サーバーレスアプリケーションのインフラストラクチャが、US-East-1リージョン(バージニア州)内で AWS Lambdaを使用してホストされている場合、要求はバージニア州のAWSセンターまで移動し、応答はそこからシカゴまで移動する必要があります。しかし、アプリケーションがAWS Lambda @Edgeを使用してホストされている場合、要求と応答は、オハイオ州にある最も近いAWSリージョン(US-East-2)に移動するだけです。このように、距離が短くなることから、AWS Lambdaに比べてレイテンシーが削減されます。
AWS Lambda@Edgeと同様に、Cloudflare Workersは、世界中のデータセンターでホストされるイベント駆動型のJavaScript関数です。しかし、この2つのサーバーレスインフラストラクチャサービスには、重要な違いが多数あります。Cloudflare WorkersはNode.jsではなくChrome V8で直接動作し、世界200都市にデータセンターがあります。V8を直接使用するため、Cloudflare Workersは他のサーバーレスプラットフォームよりもはるかに速く起動し、はるかに少ないリソースを消費します。上記の例では、シカゴのユーザーがCloudflare Workersで構築されたアプリケーションから応答を取得しようとした場合、リクエストはオハイオ州ではなくシカゴの Cloudflare PoPに送信されます。
ネットワークで「レイテンシー」は、要求された情報がロードされるまでの遅延の長さを指します。レイテンシーが増加すると、Webページを離れるユーザーの量も増加します。
一方で読み込み時間が少しでも短縮されると、ユーザーのエンゲージメントが大幅に向上します。たとえば、Walmartによる調査では、ページ読み込み時間が1秒改善するたびに、コンバージョンが2%増加することが示されました。その逆に、レイテンシーが増加すると、ユーザーはWebサイトやアプリケーションの使用を停止する可能性が高くなります。情報が移動する距離が減少すると、レイテンシーは低くなります。
ポイントオブプレゼンス(PoP)は、通信ネットワークが相互接続する場所です。インターネットのコンテキストでは、人々がインターネットに接続できるようにするハードウェア (ルーター、スイッチ、サーバーなど)が存在する場所を指します。エッジネットワークについて言えば、ポイントオブプレゼンスとは、エッジサーバーの場所です。エッジにPoPが多いほど、より多くのユーザーに、より速く応答できるようになります。これは、PoPが多ければ多いほど、PoPが地理的にユーザーの近くにある可能性が高くなるためです。
CloudflareはAWS Lambda、Lambda@Edge、Cloudflare Workersを比較して、サーバーレスの応答性を実証し、複数のPoPへのサーバーレスファンクションのリリースによる効果を試験しました。(テスト関数は、実行された現在時刻に応答する単純なスクリプトでした。)
以下のグラフは、AWS Lambda(青)、AWS Lambda@Edge(緑)、および Cloudflare Workers(赤)の関数の応答時間を示します。このテストでは、AWS Lambda関数はUS-East-1 リージョンでホストされていました。
サーバーレスアーキテクチャでは、コードが実行される(地理的)場所がレイテンシーに影響します。アプリケーションコードがユーザーの近くで実行されている場合、情報が遠くまで移動する必要がなく、アプリケーションの応答が速くなるため、アプリケーションのパフォーマンスが向上します。3つのサービスすべてで、応答時間は異なりましたが、通常はCloudflare Workersの応答が最も速いことが確認されました。次に速かったのは、Lambda@Edgeで、サーバーレスファンクションを複数の場所で実行するメリットを例示する結果となりました。
AWSリージョンは世界中に広がっていますが、Cloudflareはより多くのPoP合計数を保有しています。Cloudflareは北米に限定した試験も実施し、DNS解決による遅延は除外されました。以下に示す結果は、PoPの数が多いことでレイテンシーが削減され、パフォーマンスが向上することを示す、もう1つの例です。Cloudflare Workersが応答に要する時間は最小であることにご注意ください。
サーバーレスコンピューティングでは、「コールドスタート」とは、最近実行されていないファンクションが、イベントに応答しなくてはいけない状況を指します。このようなファンクションは、実行する前に「スピンアップ」する必要があり、これには通常、数ミリ秒かかります。そのため、追加のレイテンシーの問題が発生する可能性があります。
Cloudflare Workersは、コールドスタートを完全に排除しており、これはスピンアップ時間がゼロであることを意味します。これは、Cloudflareのグローバルネットワークのすべてのロケーションに当てはまります。これに対して、LambdaとLambda@Edgeの両機能は、コールドスタートからの応答に1秒以上かかることがあります。
この違いは、主にCloudflare WorkersがNode.jsではなくChrome V8で実行されるという事実によるものです。Node.jsはChrome V8の上に構築され、スピンアップに時間がかかり、より多くのメモリーオーバーヘッドがあります。通常、V8インスタンスはスピンアップに5ミリ秒未満しかかかりません。
Cloudflare Workersの詳細についてはこちらをご覧ください。