S3 Express One Zoneはサーバーレスキャッシュか?

ElastiCache Serverless、S3 Express One Zone、またはMomento Cacheが最適なキャッシュ・ソリューションであるかどうかを、データからどのように判断できるかをご覧ください。

S3 Express One Zoneはサーバーレスでもキャッシュでもないにもかかわらず、まさにサーバーレスキャッシュです。このブログでは、S3について深く掘り下げ、なぜ特定のタイプのオブジェクトに対して遅いのか、そしてS3 One Zone Expressがどのように(特定のサイズのオブジェクトに対して)状況を根本的に変えるのかについて説明します。しかし、S3が常にスラムダンクというわけではありません。他のサーバーレス・キャッシュ・ソリューションの方が、あなたのワークフローにずっと適している場合もあります。最後に、ElastiCache Serverless、S3 Express One Zone、Momento Cacheのどれを使うべきかを示すデータの特性について説明します。

S3とは何ですか?

一般的に信じられていることに反して、S3は最初のAWSサービスではありません。SQSを含む複数のサービスがS3より先行しています。しかし、あらゆる意味でAWSで最も耐久性のあるサービスです(データの耐久性ではDynamoDBに軍配が上がりますが)! 可用性が高く、AWSのほぼすべてのサービスを支えています。皮肉なことに、名前にサーバーレスがついていないにもかかわらず、”サーバーレス “という言葉がつくAWSのどのサービスよりもサーバーレスのリトマス試験紙に合格しています。

S3は伝統的に、高スループット、高耐久性、長期間保持される大きなオブジェクトのために構築されてきました。その反面、小さくて寿命の短いオブジェクトは、コストとパフォーマンスプロファイルのためにS3には最適化されていません。これらのオブジェクトのコストは、(ストレージとは対照的に)リクエスト価格によって支配されます。オブジェクトが小さく、短命であればあるほど、S3全体の請求に占めるリクエスト価格の割合が高くなります。S3はまた、これらの小さなオブジェクトに最も低いレイテンシを提供するわけではありません – しかし、それに飛び込む前に、パフォーマンスメトリクスの簡単な入門をしましょう。

レイテンシーについての入門

テール・レイテンシーが重要であることは誰もが知っているます。高性能オブジェクト・ストアでは、いくつかの重要なレイテンシ・メトリクスがあります。簡単なものをいくつか取り上げましょう:

ファースト・バイト・イン: クライアントがデータの受信を開始するまでの時間。これには、コネクション・ハンドシェイク(持続的コネクションでない場合)、認証、クライアントとサーバー間のネットワーク遅延が含まれます。

ファーストバイトアウト: クライアントとサーバー間のネットワークコストを除いた、 First Byte Inのすべて。これはサーバー側で測定されます。クロックはリクエストを受信した時点で開始し、クライアントがそれを受信するかどうかに関係なく、最初のパケットがクライアントに送信された時点で停止します。クライアントがどこにいるかに関係なく、サーバーのパフォーマンスをカバーするため、重要な指標です。

ラストバイトイン: クライアントがオブジェクト全体を受信するまでの時間。

S3はこれらの指標に対してどのようなパフォーマンスを見せているのだろうか?

ほとんどのエンジニアリングの質問と同様に、ここでの答えは「場合による」ということです。大きなオブジェクトのパフォーマンスは全体的なスループット(EC2とS3の間では素晴らしい)に左右されるが、小さなオブジェクトのパフォーマンスは通常、最初のバイトまでの時間(別名First Byte In)に左右されます。オブジェクトが大きい場合、非常に高速にデータを送信することで、最初のバイトを取得するために失われた時間を取り戻すことができます。オブジェクトが小さくなればなるほど、最初のバイトまでの時間はより重要になります。極端に言えば、1バイトのオブジェクトの最初のバイトまでの時間は、オブジェクト全体(Last Byte In)を取得する時間と同じです。

だから、小さな物体: S3 LBIは最適ではない。より大きなオブジェクトでは素晴らしい!余談:これは回転ドライブとSSDの間でも同じことが言えます。HDDからは素晴らしいスループットが得られますが、ヘッドが適切な位置まで回転してデータをストリーミングし始めるまでに時間がかかります。

なぜS3は最初のバイトまでの時間が遅いのか?

S3の設計には、最初のバイトまでの時間を遅くするボトルネックがいくつかありあす。これは網羅的なリストではないが、認証、ネットワーク、記憶媒体、消去コーディングが含まれます。

まず、すべてのS3リクエストは、たとえ署名済みのURLであっても、IAM認証を通過します。IAMはAWS全体の中央IDストアであり、IAMの動作の速さには感心させられるが、大規模なマルチテナントシステムで一元化された認証を行える速さは限られています。キャッシングはここでも大いに役立つが、キャッシングはウェブサーバーレベルで行われます。残念なことに、S3は大規模なため、クライアント間で同じウェブサーバーにアクセスする可能性は低いと言えます。

第二に、ネットワークホップにはコストがかかります。AWSのAZ間を移動すると、通常500μs以上のレイテンシが追加されます。 AZ間の物理的な距離は、光速と比較すると非常に小さい。しかし、AZをまたぐことは、パケットがより多くのデバイスをホップすることを要求するだけです。より多くのデバイスはp0での固有の遅延を追加しますが、p999での分散も追加されます。S3では、リクエストは異なるAZのS3ウェブサーバーにルーティングされるかもしれません。その結果、S3のリクエストはオブジェクトを取得するためにAZの境界を何度もホッピングすることになるかもしれません。

第三に、ストレージ媒体が重要です。S3のストレージ媒体について推測すると、S3のストレージ価格(2.3セント/GB)は、他のサーバーレスオファリングのSSDストレージ(DynamoDBで25セント/GB、Auroraで22.5セント/GB)の1/10というとんでもなく低い価格である。このことから、S3はスループットがはるかに低いHDDかSSDを使っていると結論づけられます。

第四に、消去コーディングです。イレブンナインの耐久性を提供するのは安くも簡単でもなく、2.3セント/GBは非常に強気な価格設定です!データのN個のコピーを作ることは不可能になります。S3からオブジェクトを取得するとき、あなたは単にディスクからオブジェクトを取得しているわけではありません。オブジェクトは複数のデバイスにまたがり、リアルタイムで再構築されています。これはとても不思議なことだが、複数のノード上の複数のディスクからアイテムを取得するのは時間がかかります。100万以上のドライブにデータを分散させている何万ものS3の顧客がいることに驚くかもしれません!

S3 Express One Zoneとは?

簡単に言うと、S3 Express One Zoneは高速なサーバーレス・オブジェクトストアです。S3 Express One Zoneのアイテムサイズのスイートスポットは、512KB以下の小さなオブジェクトです。瞬時にスケールし、S3と同じ耐久性と可用性(データセンターレベルの致命的な故障を除く)を提供し、驚くべき従量課金モデルを提供します(ElastiCache Serverlessのような最低月額90ドルなし)。数十万TPSで一貫した一桁ミリ秒のレイテンシーを提供します。注:このブログのオリジナル・バージョンでは、S3 One Zone Expressの最小請求単位を誤って128KBとしていました。これは訂正されました。Randall Hunt (@jrhunt)氏にこの誤りを指摘していただき、ありがとうございました!

なぜS3 Express One Zoneは速いのか?

S3のファーストバイトアウトのレイテンシーは、認証、ネットワーク、ストレージの媒体に起因していると前述しました。S3 Express One Zoneについて、それぞれを掘り下げてみましょう。

S3 Express One Zoneは、リクエストごとにIAM認証を行う必要がありません。これはElastiCacheとElastiCache Serverlessが持つ重要な利点です。IAMがなければ、本当に速く認証できます。S3 Express One Zoneはセッションベースの認証を使っています。CreateSession APIを使って、バケットへの低レイテンシーアクセスを提供する一時的で短命な認証情報を要求します。このトークンの有効期限は5分間ですが、公式のAWS SDKを使えば自動で更新してくれるので、認証の心配をすることなく低レイテンシーを実現し続けることができます。

名前がすべてを物語っています: S3 Express One ZoneはシングルAZサービスです。サービスにアクセスするためにAZをホップする必要はなく、サービスもデータにアクセスするためにAZをホップする必要はありません。最高のレイテンシーと可用性を得るには、コンピュートノードと同じAZでS3 Express One Zoneを使用します。これにより、多くのホップが不要になり、可用性が向上し、レイテンシーが大幅に低下します。ElastiCacheとElastiCache Serverlessでは、デフォルトの高可用性(HA)オプションはマルチAZです。一方では、AZの障害に対する耐障害性が向上しますが(しかし、現実問題として、そのようなことは頻繁に起こるのでしょうか)、他方では、ElastiCache Serverlessではパフォーマンスとコスト(AZをまたいだ転送=$$)のペナルティを支払うことになります。

ここでの記憶媒体はSSDである可能性が高いと推察できます。S3 Express One Zoneの価格が$.16/GBであることから、ストレージ媒体はRAMではなく(ElastiCache Serverlessは$90/GB)、HDDでもないと推測される(S3はGBあたりのコストが1/5)。これは、SSDでバックアップされているDynamoDB(1GBあたり$.25)に酷似しています。S3 Express One Zoneが一貫した1桁のレイテンシーを約束する重要な理由の1つでしょう。

S3 Express OneZoneとElastiCache Serverlessの価格比較

ElastiCache Serverlessは、月額90ドル/GBのストレージ料金を請求します。すべてのデータをRAMに保存している可能性が高いことを考えると、これは正当化できます。ElastiCache Serverlessはまた、ストレージの測定方法においてより現実的であるように見えます。一方、S3 Express One Zoneの価格設定には、いくつか注意すべき点があります。

オブジェクトの寿命が30秒だとしても、S3はそのオブジェクトに少なくとも1時間存在するものとして課金します。つまり、30秒ごとにアイテムを変更する場合、120倍のデータのストレージを支払うことになります。それに比べ、ElastiCache Serverlessでは、1秒間に何千回もカウンターを更新することができ、1つのアイテムにかかるストレージ料金しか支払らいません。 S3 Express One Zoneのスイートスポットは、少なくとも1時間は存在すると予想されるオブジェクトであり、急速に変化するアイテムは、驚くほど大きなストレージ請求となる可能性があります。

最後に、S3 Express One Zoneは512KB以上のオブジェクトに対してペナルティを課します。PUTは512KBを超えると$0.008/GBのペナルティを受け、GETは$0.0015/GBのペナルティを受けます。大きなオブジェクトがある場合、パフォーマンスはスループットによって左右される可能性が高いと言えます。

最後のまとめ: S3 Express One Zone、ElastiCache Serverless、Momento Cacheを使うタイミング

・ライフサイクルが数時間で測定される512KB程度の小さなオブジェクトであれば、S3 One-Zone expressを使用します。頻繁に更新される小さなオブジェクトがある場合は、ElastiCache Serverlessを使います。

・トラフィックが急増し、2倍のスループットを処理するために10分も待ちたくない場合は、S3 Express One Zoneをご利用ください。S3はマルチテナントサービスであり、スケールアップの必要なく、意味のある大きなスパイクをシームレスに吸収することができます。

・特に負荷が急増し、100バイトから5MBまで様々なオブジェクトサイズがある場合は、Momentoの利用を検討しましょう。Momentoは、S3のようなスパイク処理機能と真のサーバーレス性を備えているが、月額90ドルのストレージ追加料金は不要です。

スパイク対応、シンプルな価格、真のサーバーレスキャッシュの準備はできましたか?今すぐMomento Cacheを始めましょう