複数のコンテナを持つ複数のec2インスタンスがあり、すべてが別々のディレクトリの別々のファイルに書き込む場合、共有マウントされたEFSはどのように機能しますか? 1つのコンテナーでの書き込みパフォーマンスは、(同じノードまたは異なるノードで)別のコンテナーの書き込みによって悪影響を受ける可能性があります。
書き込みは通常非常に小さく(〜kbs)、msの頻度でバーストする可能性があります。
それは依存しますもちろん:)
総スループットを向上させるために、複数のEC2インスタンスにワークロードをスケーリングすることをお勧めします。一方、小さなファイルのヒープを書き込むと、1つの大きなblobに同じ量のデータを書き込むよりもはるかにオーバーヘッドが高くなります。詳細については、 Amazon EFSパフォーマンスのヒント をご覧ください。
また、EFSボリュームの実際のスループットは、格納されているデータの量によって異なることに注意してください。 保存する量が多いほど、スループットは高くなります。 データが少なくても高いスループットが必要な場合は、 に対して支払うことができますプロビジョニングされたスループット 。
最後に、パフォーマンスはNFSキャッシングによって改善できます- fsc または fs-cache または書き込みをローカルにプールし、より大きなチャンクにバースト書き込みする他のNFSキャッシングメカニズム。
最後に、実際の負荷の下でアプリケーション/ k8sクラスターがどのように動作するかbenchmarkする必要があります。
ちなみに、本当にNFSにファイルを保存する必要がありますか?アプリケーションを設計するためのより良い方法はありますか?おそらく、K8SポッドからKinesisまたはSQS経由でデータを送信して、少数を収集してより大きなチャンクに格納できる「統合マイクロサービス」にデータを送信できますか?たぶんS3に、EFSにではないですか?または、そもそもそれらを保存することなく、実行する必要がある処理はありますか?
膨大な数の小さなファイルを個別に保存しても、高いパフォーマンスは得られません。最初に他のオプションを真剣に検討します。
それが役に立てば幸い:)