EC2インスタンスの死の抱擁を防ぐ方法は?


9

アプリストアでiOSアプリを使用していて、最近、EC2でホストされているランディングページへのトラフィックが急増し、ページが応答しなくなったため、幸い、インスタンスを再起動して、 t2.medium。

今私は、同じ死を再び防ぐための技術を実装するために誰かを雇うことを探しています。私の経験では、基本的なdevopsのことは理解できますが、AWSでのロードバランサーには不十分です。インスタンスの手頃な実装とは何かを知りたいのです。

ランディングページとiOSアプリのバックエンドが同じインスタンスでホストされています。


1
ランディングページは静的ですか?
マイケル-sqlbot 2017

回答:


8

これ以上の知識がなくてもすぐにこれを並べ替えたい場合は、Elastic beanstalkをお勧めします。これは、ロードバランサーの構成とインスタンスのスケーリングを処理する別のAWSアプリケーションです。

ロードバランサーとインスタンスに追加のコストがかかることはないため、t2タイプのインスタンスを使い続けることができますが、Elastic Beanstalkを必要なだけ拡張できます。

自動スケーリングは瞬時ではなく、トラフィックが急上昇した場合、通常は数分でスパイクを処理できますが、手動でインスタンスサイズをスケーリングするよりもはるかに優れており、簡単に把握できます。と。


1

上記の自動スケーリングといくつかのCloudWatchアラームを追加して、特定のしきい値が増加し始めたときに自動スケーリングプロセスを開始することをお勧めします。

例えば; サーバーを監視するようにCloudWatchを設定します。CPUが50%以上で30秒以上続くと、自動スケーリングプロセスが開始されます。

これは完全に問題がないわけではありませんが、一部のオンラインガイドで簡単に実行でき、すべてGUIで設定できます。

また、ランディングページが静的である場合は、それをフリーティアt2.microでホストし、アプリに別のt2.microフリーティアを使用してみませんか?


自動スケーリングは、トラフィックが急増した場合の全体的な答えではありません。自動スケーリングの検出ウィンドウは、プロビジョニングに応じて1〜5分程度ですが、プロビジョニングにも時間がかかる場合があります。一般的に正しい答えは、インスタンスをホットに実行することです。つまり、認識されたトラフィックレベルを超えて、自動スケーリングがそのマージンを維持できるようにします。
マット・O.

1

あなたが何か助けを探しているなら、私はこれを手伝いたいです。ページによっては、ec2がまったく必要ない場合があります。たとえば、何か静的またはJavaScriptを提供する場合は、Cloudfrontディストリビューションを使用してs3から提供できます。または、どうしても必要な場合は、自動スケーリンググループを使用できます。


1

トラフィックの急増に対処するには、容量を増やすこととコストを削減することの2つの一般的な戦略があります。

容量の増加は自動スケーリングを意味し、パブリッククラウドが最初に利用可能になったとき、誰もが非常に興奮していました。最も基本的な意味では、これは負荷に基づいてより多くのWebサーバーを起動し、ロードバランサーに追加しますが、管理が面倒になる可能性があるため、Elastic Beanstalkなどのより多くのオートマジックソリューションもあります。

自動容量拡張の問題は、自動請求拡張でもあります。通常の10倍のトラフィックは、10倍のサーバーが10倍のお金を支払うことを意味します。だからこそ、心に留めておくと便利な戦略ですが、まずは自分がどれだけカンニングできるかを見ることから始めるべきだと思います。

チートとは、キャッシュを意味します。これは、ほとんどの場合、ユーザーに日付のデータがわずかに古く、ユーザーが気付かないという考えに基づいており、大幅な時間の節約になります。古くて5秒で大丈夫だと判断したページがあり、20リクエスト/秒を取得したとします。キャッシングなしでは、その計算は1分間に1200回実行されますが、キャッシングありでは12しかありません。これがいかに大きな違いを生むことができるかがわかります。

もちろん多くのタイプのキャッシングがあり、成功したウェブサイトはそれらのいくつかを使用します。しかし、あなたのユースケースでは、2つのかなり良い簡単なオプションがあります。

1つ目は、サイトを完全に静的にすることです。これは可能であると想定していますが、可能であれば、Nginxに直接htmlを提供させるだけで、大量のリクエストに対応できます。

ある程度の動的性が必要な場合は、ページ全体のキャッシュを実行することをお勧めします。Nginxにはこれを行う機能がいくつかありますが、柔軟性があるのでVarnishが本当に好きです。

どのオプションを選択する場合でも、負荷テストを行って、正しく設定されていることを確認してください。1つのスポットを修正すると、新しいボトルネックが明らかになることがあります。


0

AWSでの経験を共有したいと思います。私たちはEC2にアプリケーションをデプロイしましたが、同じ問題と高コストに直面しています。アプリケーションはモノリシックですが、Amazon EC2 Container Serviceをデプロイしましたが、

  • 可用性
  • 費用対効果の高い
  • スケーラビリティ

Application Load Balancerはトラフィックを処理し、トラフィックを正常なインスタンスにルーティングします。負荷のスケーリングやバランスを心配することなく、同じサービスの複数のタスクを実行できます。

このアーキテクチャにより、障害分離の実装が容易になります。ヘルスチェック、キャッシング、バルクヘッド、またはサーキットブレーカーなどの手法を使用すると、障害のあるコンポーネントの爆発範囲を縮小し、特定のアプリケーションの全体的な可用性を向上させることができます。


ECSには個別の料金設定はありません。基盤となるEC2リソースのみです。そのため、ECSを使用することで、費用対効果はさらに高まりましたか。コンテナを自分で管理する場合でも、Amazonに任せる場合でも、同じ量のリソースを消費するはずです。
モニカチェリオのボイコットSE、2017年

5mbの高山とec2を使用している場合、コンテナでは2GBのubuntuを使用していますか?どれが一番いいの?t2マイクロでは、トラフィックのベースでスケールインおよびスケールアウトを使用して5 phpコンテナーを実行できます。スケールインおよびスケールアウトを使用してec2で実行できますか?
Adiii 2017年

ec2インスタンスにUbuntuを使用する必要はありません。アルパイン画像をアップロードして、必要に応じて使用できます。すべてがECSで動作しているのであれば、それはすばらしいことであり、元に戻すことはほとんどありませんが、ECSに移動するだけでは、アプリのスケーラビリティーやコスト効率は向上しません。これは、アプリ、インフラストラクチャ、アーキテクチャに同時に加えた他の変更です。
モニカチェリオのボイコットSE、2017年

0

これは特定のアーキテクチャーに大きく依存しますが、例えば:

  • CloudFrontを使用してウェブサイトをフロントロードし、ホストの負荷を軽減します
  • S3などでクライアント側ホスティングサービスを使用して規模を拡大する
  • 自動スケーリンググループを使用したElastic Load Balancer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.