2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

※タイトルを見て、すぐに答えが分かった方は正解へどうぞ

前提

私が開発していたコンテナアプリは、

  • 本番環境に ECS(Fargate) + EBS
  • 検証環境に EC2 + EBS

を利用していました。
本番環境は ECS で動かしていましたが、検証は EC2 上で簡易的にコンテナを起動することで実施していました。

また、このコンテナアプリは、

  • 起動時に、EBS内のGB級データをメモリロードする
  • 実行中に、EBS内のSQLiteDBに大量のクエリを実行する

という特性がありました。

EC2 + EBS と ECS + EBS という、一見大きな性能差の無さそうな両者ですが、実際に試してみると、性能差が明らかになりました。
具体的には、

  • 起動時のメモリロード速度が3~5倍程度異なる

ということが分かりました。

タイトルの答え

結論から言いますと、ECS + EBS構成の場合に、EC2 + EBS構成よりも遥かにレイテンシーが増加しました。

なぜ、レイテンシーが増加するのか

ECS に永続ボリュームとして EBS をアタッチする場合、既存の EBS をアタッチすることはできません。
そのため ECS と EBS を組み合わせたい場合は、EBS スナップショットを事前に作成し、ECS 起動時に指定してあげる必要があります。

新しい空のボリュームを設定してアタッチすることもできるし、あるいはスナップショットを使用して既存のボリュームからデータをロードすることもできます。

しかし、EBS スナップショットは、初回アクセス時にレイテンシーが著しく低下する問題を抱えています。(これを解消したのがEBSの高速スナップショットです)

スナップショットから作成された新しい EBS ボリュームの各データブロックに初めてアクセスするときには、レイテンシーが著しく増加します。

したがって、ECS 起動直後のメモリロード処理はレイテンシーが著しく増加し、起動時間が3~5倍になってしまったのです。

教訓

  • ECS + 永続ボリュームを利用する場合、性能面に特に注意する
    →可能であれば、コンテナイメージにデータを含めて、永続ボリュームを使用しない方法も検討する
  • 性能問題が発生した場合はむやみにECSやFargateを使うのではなく、EC2を使うことも検討する
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?