0

私は自分のユーザー (現在はわずか 2,000 人) 向けの電子メール アラートを作成したので、毎晩 crontab が php スクリプトを実行して、mysql にクエリを実行し、ユーザーの保存済み検索と一致するものを見つけます。私の場合は機密扱いのウェブサイトですが、大規模なクライアント向けに何かを構築する必要がある場合に備えて学びたいと思います

私の懸念は次のとおりです。

  1. ユーザーが 10 倍または 100 倍に成長するとどうなりますか? サーバーがクラッシュしますか?そのようなものを管理する上で提案できるヒントはありますか?

  2. 私のファイル cron/nightly_script.php を、ブラウザの URL で呼び出す以外の形式で実行されるように保護する方法はありますか? 次のような crontab で文字列を使用することを検討してください。

    リンクス [絶対 URL/script.php]

  3. メールブラストはどうですか?各クエリに対して、クエリに結果がある場合、スクリプトは電子メールを送信するため、大量の電子メールを意味します...自動的にスパムと見なされ、ブラックリストに登録される可能性がありますか?

ありがとう!!!

4

4 に答える 4

1

ユーザーが10倍または100倍に成長した場合はどうなりますか?サーバーはクラッシュしますか?そのようなものを管理するためにあなたが提案できるヒントはありますか?

大量のメモリ/CPU使用率が原因で、サーバーがクラッシュしたり、地獄のように遅くなったりする可能性があります。電子メールアラートを調整するには、redis / beanstalkd/gearmandなどのメッセージキューを使用する必要があります。私の好みはredisになります。ブロッキングポップ/プッシュをサポートするpredisライブラリでブロッキングポップ/プッシュを使用します。

ブラウザのURLで呼び出す以外の形式で実行されるファイルcron/nightly_script.phpを保護する方法はありますか?次のようなcrontabで文字列を使用しているthamimを検討してください。

スケーリングする場合はcronを使用しないでください。代わりに、いくつかのデーモンを作成します。

  • 1メッセージキュー(この部分はcronの場合もあります)をメッセージキューに送信するようにスケジュールします。
  • 1は、メッセージキューに送信されたメッセージを処理します。

デーモンは毎回スポーンする必要はなく、スポーンプロセスは(比較的)コストがかかります。次に、スクリプトはURLを呼び出さず、代わりにPHPスクリプトを直接呼び出します(CLI)。

メールブラストはどうですか?クエリに結果があった場合、クエリごとにスクリプトが電子メールを送信するため、大量の電子メールが送信されます...自動的にスパムと見なされ、ブラックリストに登録できますか?

メッセージキューを使用するときは、自分で調整できます。

于 2010-09-19T22:36:51.793 に答える
1
  1. おそらく、負荷を分散できるようにスクリプトを変更する必要があります。たとえば、cron を 1 日に 4 回以上実行し、そのたびに 1 日に 1 回すべてを実行する代わりに、ユーザー ベースのパーセンテージを実行することができます。

  2. Web サーバーのターゲット パスから取り出して、外部からアクセスできない場所に cron を配置できます。次のように実行できます: php /location/of/script.php

  3. 誰に送るかによって変わると思いますが、この通知を送る頻度を考えてみてください。

于 2010-09-19T14:24:58.987 に答える
1

番号 1: サーバーを監視し、負荷と実行にかかる時間を監視します。クラッシュすることはありませんが、負荷が高くなり、Web ページの要求が遅くなり始める可能性があります。

ただし、注目すべきことの 1 つは、PHP のメモリ ガベージが奇妙な場合があることです。そのため、cron ジョブのメモリ使用量に注意してください。高い値になると、PHP がクラッシュします。

それが多くなり始めた場合、多くの解決策があります。たとえば、Web サーバーと電子メールを同じマシンで送信する必要はありません。同じ DB にアクセスできる限り、メール送信専用の 2 台目のサーバーをセットアップします。これがクラウド コンピューティングの最適な用途です。2 台目のサーバーを 1 晩 4 時間 (または何でも) レンタルし、それ以外の時間はオフにします。

これは 1 つの提案にすぎません。多くの解決策があり、状況によって異なります。

于 2010-09-19T14:36:38.060 に答える
0

2 番目については、スクリプトをドキュメント ルートの外に移動して、ブラウザからアクセスできないようにして直接呼び出すのが最善の解決策です。

php [location/script.php]

それができない場合は、IP チェックを行い、localhost IP からの呼び出しのみを許可します。

安全なチェックを組み込むこともできます。特定のユーザーに最後にメールを送信したのはいつかを保存し、別のユーザーに送信する前にそれを確認します。これにより、ハッカーだけでなく crontab の問題も防ぐことができます。

于 2010-09-19T14:25:48.330 に答える