9

AWS AS API を超えて、すべての AS の内容を理解するために、ほぼすべてのドキュメントを読みました。

ただし、私のシナリオがASで実行可能かどうかはまだ疑問に思っています(実際にAPIを使用したことはありません。これは、誰かから最初に見つけたいからです)。

AS グループ内に一連の作業サーバーをセットアップし、すべてがそれぞれのジョブで動作しているとします。突然、スケールアップまたはスケールダウンする時が来ました (AVG CPU が 80% を超えているか、または 80% 未満であるとは言えません)。

私の主な心配は、現在進行中の仕事が失われることです。たぶん、これは例でよりよく説明されるでしょう:

  • 5 つのジョブを含む 5 つのジョブ サーバーを起動します。
  • ジョブは 1 つで終了し、Amazon API でスケールダウン トリガーを起動します
  • Amazonはそれらを縮小するようになります
  • 実際に現在ジョブを実行しているジョブ サーバーを失いました (90% 完了して、もう一度開始する必要があります)。

これを念頭に置いて、Amazon スポット インスタンス/EC2 API を使用し、独自のスケーリングを管理するだけの方が良いですか、それとも Amazon API がサーバーの終了を判断する方法について何か不足していますか?

正直に言うと、サーバーのヘルスの数値よりも SQS の待機量に合わせてスケーリングします。

  • 待機中のメッセージ 100 件ごとに、クラスタ容量が 20% 増加します

しかし、これは AS でもあまり実行可能ではないようです。

では、AWS AS API は適切なソリューションではないのでしょうか? それとも、その仕組みに関する重要な情報が欠けているのでしょうか?

ありがとう、

4

2 に答える 2

9

いくつか検索した結果、ASAPIまたは一般的なジョブのASを管理する方法が2つあることがわかりました。

1つの方法は、ワーカー自体の内部からサーバーの正常性を直接操作することです。これはかなりの数のサイトが行っていることであり、ワーカーがシステムでジョブや冗長性を検出しなくなったときに、サーバーが異常であるとマークするので効果的です。このようにして、AS APIが登場し、一定期間後に自動的に停止します。

したがって、この方法では、一定期間のSQSキューサイズに基づいたスケールアップポリシーがあります(たとえば、100を超えるSQSメッセージの5分ごとに2台のサーバーを追加します。SQSメッセージの10分ごとに500を超える2倍のネットワーク容量50%)。スケールダウンは、アクティブなポリシーではなくコードによって処理されます。

この方法はゼロクラスターでも機能するため、使用されていないときにクラスターをサーバーなしまでダウンさせることができ、費用対効果が非常に高くなります。

利点:

  • セットアップが簡単
  • AWSAPI関数の使用
  • おそらくセットアップが最も速い
  • AWSマネージAPIを使用してクラスターサイズを管理する

短所:

  • 完全なAWSAPIを使用せずに管理するのは困難です。つまり、新しいサーバーを作成するときに、すべてのインスタンスIDの完全なAPIコマンドリターンを実行しないと、インスタンスIDを取り戻すことはできません。クラスタを自己制御する要素が必要な場合は、AWS AS APIが邪魔になり、生活が少し難しくなる場合があります。
  • あなたの財布に最適なものを知るためにAmazonに頼っています。正しくスケーリングするためにAmazonAPIに依存しています。これは多くの人にとっては利点ですが、一部の人にとっては欠点です。
  • ワーカーはサーバープールコードの一部を格納する必要があります。つまり、ワーカーは汎用ではなく、構成を変更せずにすぐに別のクラスターに移動することはできません。

これを念頭に置いて、2番目のオプションであるDIYがあります。EC2スポットインスタンスとオンデマンドインスタンスAPIを使用して、カスタムルールに基づいて独自のASAPIを作成します。これは説明するのが非常に簡単です:

  • 実行が開始されると、たとえば10台のサーバーを使用するCLIスクリプトがあります。
  • 特定の条件を満たすことを検出すると、サーバーがダウンするか、さらにアップするcronジョブがあります。

利点:

  • あなたの終わりを管理するための簡単でクリーン
  • ジェネリックワーカーを作ることができます
  • サーバープールは多くのクラスターの管理を開始できます
  • ルールを作成し、AWSのメトリクスから数値を取得し、それらを比較および時間範囲で使用して、状況を変更する必要があるかどうかを理解することは、それほど複雑ではありません。

短所:

  • マルチリージョンを取得するのは難しい(SQSはシングルリージョンであるため、SQSにとってそれほど悪くはありません)
  • リージョンの容量とワークロードのエラーに対処するのは難しい
  • 独自のサーバーの稼働時間と独自のコードに依存して、cronjobが正常に実行され、サーバーが正常にプロビジョニングされ、必要なときにサーバーが分解されるようにする必要があります。

ですから、実際には、エンドユーザーにとってより快適な戦いのようです。私は個人的に2つをまだ検討していて、自分で機能する小さなセルフホストサーバープーラーを作成しましたが、同時に、これをAWS独自のAPIで機能させるようにしたいと思っています。

これが人々に役立つことを願っています、

編集:これらの方法のいずれでも、入札方法を予測するための関数が必要になることに注意してください。そのため、スポットタイプ(EC2タイプ)で入札履歴APIを呼び出し、入札方法を計算する必要があります。

別の編集:システムの冗長性を自動的に検出する別の方法は、SQSキューの空の応答メトリックをチェックすることです。これは、ワーカーがキューにpingを実行し、応答を受信しなかった回数です。これは、ワーカーの期間中、アプリで排他ロックを使用する場合に非常に効果的です。

于 2012-06-07T08:35:35.653 に答える
2

私もちょうど同じような問題を抱えていて、Amazon の担当者に話を聞いたところ、終了保護について話してくれました。実際、インスタンスで終了保護が有効になっている場合、インスタンスを終了することはできません。スケールダウンがトリガーされると、アプリは自動スケーリング グループから削除されますが、終了することはありません。終了するには、終了保護を無効にしてから終了する必要があります (たとえば、ジョブの最後に行うことができます)。

要約すると、あなたがしなければならないことは次のとおりです。

  • AMI に起動スクリプトを追加して、終了保護を有効にします
  • 自動スケーリング ルールを維持する (スケールアップとスケールダウン)
  • 実行中のインスタンスで、インスタンスを安全に終了できるようになったら (ジョブの終了など)、終了保護を無効にしてインスタンスを終了します。

これらはすべて AWS API を使用して実行できます。

于 2012-11-22T17:31:04.577 に答える