0

私は、ピーク時にサイトトラフィックの10%、20%、50%などを「技術的な問題」ページにリダイレクトし、負荷を軽減するために後で戻ってくるように訪問者に指示するスクリプトを作成する任務を負っています。私たちの応募者の。

応募者は全員、応募する前に中央のランディングページにアクセスします。この例では、「www.example.com/index.php」と言います。したがって、問題は、これらの大量の時間の間に、5、10、20回目の訪問者ごとに「www.example.com/down.php」にリダイレクトするスクリプトを作成することは可能ですか?

サーバーの負荷が原因ではなく、月に限られた数の応募者しかいないという事実のために、これらの人々をリダイレクトすることを選択しています。これにより、基本的に応募者を減らすことができる数日が作成されるため、そのしきい値を超えないようになります。

すべての訪問者をサイトに完全にリダイレクトする方法を知っていますが、この状況では機能しません。私はこのサイトでいくつかの同様の質問を閲覧しましたが、それでも非常に役立ちましたが、このような状況を適切に処理する方法を理解できませんでした。

私はあなたが私に与えることができるすべての助け、および/または適切な方向への単なるポイントに感謝します。

4

3 に答える 3

0

おそらく、あなたのサイトにアクセスできるユーザーは複数の単一ページにアクセスできるので、ユーザーがサイトへのアクセスを許可された場合にそれらが記憶されるように、何かをする必要があります。これを達成するために、私はセッションを使用します。したがって、ユーザーがサイトにアクセスし、セッションCookieが存在しない場合は、次のようにします。

if (rand(0,100) > 30) {
    // Set cookie
}
else {
    // so sorry. site is down for you
    // redirect
}

しかし、問題は、サイトにアクセスできない人をどの程度正確に処理したいかということです。彼らがしなければならないのはページを更新することだけであり、70%の時間、彼らはアクセスを許可されます。永続的にしたい場合は、それらをブラックリストに登録する方法を見つける必要があります。これはCookieで行うことができますが、ユーザーはそれを簡単に削除して再試行できます。永続化する唯一の方法は、IPアドレスをデータベースに保存することです。次に、3番目の問題である共有IPについてはどうでしょうか。おそらく、最初にセッションをチェックし、それが見つからない場合は、データベースでブラックリストに登録されたIPをチェックすることができます。このように、ユーザーがそれを回避できる唯一の方法は、動的IPを使用するか、プロキシを使用することです。

于 2012-06-13T21:50:32.603 に答える
0

それは本当に状況に依存します:

  • サーバーに負荷の問題がまったくなく、実際の目標が1日あたりのアプリケーションを制限することである場合、これはPHPスクリプトで解決できます。エラーページにリダイレクトする代わりに、制限についての真実を訪問者に伝えることをお勧めします。このように、訪問者は[F5]を数回押すことはありません。これにより、サーバーの負荷がさらに増加するため、数秒後に機能することを期待しています。また、n番目ごとのユーザーをリダイレクトするのではなく、実際の制限を設定することをお勧めします。

  • サーバーで高負荷の処理に問題がある場合は、すべてのリクエストをリダイレクトできない場合もあります。この場合、負荷を処理できるようにサーバーをスケーリングする必要があります。考えられる解決策:ロードバランサーを使用して、トラフィックをさまざまなサーバーにルーティングします。サーバーをアップグレードします。コードを最適化します(サーバーがハードウェアをスケーリングせずに負荷を引き受ける可能性があるため)

  • サーバーが負荷を処理できないために1日あたりのアプリケーションの制限を設定することのみを決定した場合は、サーバーを再度スケーリングすることが最善のソリューションです。

于 2012-06-13T21:52:37.617 に答える
0

これは訪問者を扱うのに最適な方法ではないため、他の解決策を検討することをお勧めしますが、本当にこのようにしたい場合は、これを使用してください。

$rand = mt_rand(1, 10);
if ($rand <= 3) { // In this case, 30% of your visitors get redirected.
    // redirect
// normal page
于 2012-06-13T21:42:37.090 に答える