关于已保存搜索、程序和安全/性能提示技巧的电子邮件警报?
Posted
技术标签:
【中文标题】关于已保存搜索、程序和安全/性能提示技巧的电子邮件警报?【英文标题】:Email Alerts on saved searches, procedure and safety/performance tips&tricks? 【发布时间】:2010-09-19 14:17:19 【问题描述】:我为我的用户(现在只有 2,000 个)建立了一个电子邮件提醒 所以每天晚上 crontab 都会执行一个 php 脚本来查询 mysql 以查找与用户保存的搜索匹配的内容。就我而言,这是一个分类网站,但我想学习以防我不得不为更大的客户构建一些东西
我的担忧是:
如果我的用户增长 x10 或 x100倍?服务器会去吗 碰撞?有什么建议你可以建议 管理类似的东西?
有什么方法可以保护我的文件 cron/nightly_script.php 是 在调用它之外执行表单 浏览器的网址?考虑 我在 crontab 中使用字符串 喜欢:
lynx [绝对 url/script.php]
电子邮件爆炸怎么样?对于每个 查询查询是否有结果 脚本发送一封电子邮件,所以这意味着 电子邮件爆炸......它会是 自动被视为垃圾邮件 那么我可以列入黑名单吗?
谢谢!!!
【问题讨论】:
【参考方案1】:如果我的用户增长 x10 或 x100倍?服务器会去吗 碰撞?有什么建议你可以建议 管理类似的东西?
由于内存/cpu 使用量过大,您的服务器可能会崩溃/变慢。您应该使用像 redis/beanstalkd/gearmand 这样的消息队列来限制您的电子邮件警报。我偏爱redis。将blocking pop/push 与predis 库一起使用,支持阻止弹出/推送。
有什么方法可以保护我的文件 要执行的 cron/nightly_script.php 在 url 中调用它之外的形式 浏览器?考虑使用 a crontab 中的字符串,如:
如果您想扩展,请不要使用 cron。而是创建几个守护进程。
1 调度发送消息(这部分也可以是cron)到消息队列, 1 处理发送到消息队列的消息。不需要每次都生成守护进程,并且生成进程(相对)昂贵。其次,您的脚本不应再调用任何 URL,而是直接调用 PHP 脚本(CLI)。
电子邮件爆炸呢?对于每个 查询查询是否有结果 脚本发送一封电子邮件,所以这意味着 电子邮件爆炸......它会是 自动认为垃圾邮件,然后 我可以列入黑名单吗?
使用消息队列时,您可以自我节流!
【讨论】:
【参考方案2】:好吧,您可能应该修改您的脚本,以便分散负载。例如,您可以让 cron 每天运行 4 次以上,每次它执行一定比例的用户群,而不是每天都执行一次。
您可以将它从 Web 服务器目标路径中取出,并将 cron 放在我无法从外部访问的地方。可以这样执行:php /location/of/script.php
我想这取决于您将通知发送给谁,但您应该考虑发送此通知的频率。
【讨论】:
【参考方案3】:第一:监控服务器,观察负载和运行时间。它不应该崩溃,但您可能会发现负载过高并且对网页的请求开始变慢。
但要注意的一件事是 PHP 的内存垃圾有时会很奇怪,因此请注意 cron 作业的内存使用情况。如果它达到高 PHP 将崩溃。
如果它开始变得太多,那么有很多解决方案;例如,无需将 Web 服务器和电子邮件发送在同一台机器上。只要他们可以访问同一个数据库,就设置第二台服务器仅用于发送电子邮件。这就是云计算的完美之处,每晚 4 小时(或其他任何时间)租用第二台服务器,然后在其余时间关闭它。
这只是一个建议......有很多解决方案,这实际上取决于您的情况。
【讨论】:
【参考方案4】:至于第 2 点,最好的解决方案是将脚本移到文档根目录之外,这样就无法从浏览器访问它并直接调用它
php [location/script.php]
如果你不能这样做,我会做一个 IP 检查,只允许从本地 IP 调用它。
您还可以构建安全检查:存储您上次向特定用户发送电子邮件的时间,并在发送另一个电子邮件之前检查该时间。这将防止 crontab 问题以及黑客。
【讨论】:
你为什么要创建 2 个答案? @alfred 这是 3 个完全独立的问题,每个问题都是不同的专业领域.. 我做了一个然后我想我会再做一个,虽然它对编辑来说是 2 个大问题。以上是关于关于已保存搜索、程序和安全/性能提示技巧的电子邮件警报?的主要内容,如果未能解决你的问题,请参考以下文章