0

我为我的用户(现在只有 2,000 个)建立了一个电子邮件警报,所以每天晚上一个 crontab 执行一个 php 脚本来查询 mysql 以查找与用户保存的搜索匹配的内容。就我而言,这是一个分类网站,但我想学习以防我不得不为更大的客户构建一些东西

我的担忧是:

  1. 如果我的用户增长 x10 或 x100 倍会怎样?服务器会崩溃吗?你有什么建议可以管理这样的事情吗?

  2. 有什么方法可以保护我的文件 cron/nightly_script.php 在浏览器的 url 中调用它之外执行?考虑在 crontab 中使用字符串,例如:

    lynx [绝对网址/script.php]

  3. 电子邮件爆炸呢?对于每个查询,如果查询有结果,脚本会发送一封电子邮件,所以这意味着大量的电子邮件...是否会自动被视为垃圾邮件,然后我可以将其列入黑名单?

谢谢!!!

4

4 回答 4

1
  1. 好吧,您可能应该修改您的脚本,以便分散负载。例如,您可以让 cron 每天运行 4 次以上,每次它执行一定比例的用户群,而不是每天都执行一次。

  2. 您可以将它从 Web 服务器目标路径中取出,并将 cron 放在我无法从外部访问的地方。可以这样执行:php /location/of/script.php

  3. 我想这取决于您将其发送给谁,但您应该考虑发送此通知的频率。

于 2010-09-19T14:24:58.987 回答
1

第一:监控服务器,观察负载和运行时间。它不应该让它崩溃,但你可能会发现你已经到了负载过高并且对网页的请求开始减慢的地步。

但是要注意的一件事是 PHP 的内存垃圾有时会很奇怪,因此请注意 cron 作业的内存使用情况。如果它达到高 PHP 将崩溃。

如果它开始变得很多,那么有很多解决方案;例如,无需将 Web 服务器和电子邮件发送在同一台机器上。只要他们可以访问同一个数据库,就设置第二台服务器仅用于发送电子邮件。这就是云计算的完美之处,每晚 4 小时(或其他任何时间)租用第二台服务器,然后在其余时间关闭它。

这只是一个建议......有很多解决方案,这实际上取决于您的情况。

于 2010-09-19T14:36:38.060 回答
1

如果我的用户增长 x10 或 x100 倍会怎样?服务器会崩溃吗?你有什么建议可以管理这样的事情吗?

由于大量的内存/cpu 使用,您的服务器可能会崩溃/变慢。您应该使用像 redis/beanstalkd/gearmand 这样的消息队列来限制您的电子邮件警报。我偏爱redis。将阻塞弹出/推送与支持阻塞弹出/推送的predis库一起使用。

有什么方法可以保护我的文件 cron/nightly_script.php 在浏览器的 url 中调用它之外执行?考虑在 crontab 中使用字符串,例如:

如果要扩展,请不要使用 cron。而是创建几个守护进程。

  • 1 调度发送消息(这部分也可以是cron)到消息队列,
  • 1 处理发送到消息队列的消息。

不需要每次都生成守护进程,并且生成进程(相对)昂贵。其次,您的脚本不应再调用任何 URL,而是直接调用 PHP 脚本(CLI)。

电子邮件爆炸呢?对于每个查询,如果查询有结果,脚本会发送一封电子邮件,所以这意味着大量的电子邮件...是否会自动被视为垃圾邮件,然后我可以将其列入黑名单?

使用消息队列时,您可以限制自己!

于 2010-09-19T22:36:51.793 回答
0

至于数字 2,最好的解决方案是将脚本移到文档根目录之外,这样就无法从浏览器访问它并直接调用它

php [location/script.php]

如果你不能这样做,我会做一个 IP 检查,只允许从 localhost IP 调用它。

您还可以建立安全检查:存储您上次向特定用户发送电子邮件的时间,并在发送另一个电子邮件之前检查该时间。这将防止 crontab 问题以及黑客。

于 2010-09-19T14:25:48.330 回答