实施通知制度的最有效方式是什么?

时间:2014-11-26 作者:Gixty

我即将开始为我的网站实施通知系统,我想知道在开发之前需要考虑哪些性能指标。

我需要为大量用户(数十万)做这件事,所以我需要对我做的每一步都非常小心。

对于每个通知,我需要为自定义分类法(通知)创建一个新术语,以将其显示在用户的通知面板上,并使用wp_mail. 另一方面,我可以创建一个带有meta_key 调用通知,然后将每个通知保存在meta_value 作为一个数组,您对此有何看法?

现在,让我们假设正在跟踪10000个用户(以下系统已经实现)。我需要通知所有10000个用户,用户A发布了一些东西。我如何处理保存10000个术语(或user\\u meta)和仅为一个操作发送10000封电子邮件?

目前,我正在考虑使用wp_schedule_event 这样我就可以限制每10分钟发送100封电子邮件。

但是,如果10个用户同时发布一篇帖子,而他们有数千个追随者,会怎么样呢。通知所有追随者的最佳方式是什么?

或者,我可以只向每个用户发送一封电子邮件,突出显示他们关注的人的热门帖子。这当然会更容易处理,你认为呢?

还有一件事,每天发送10000封或更多的电子邮件有多贵?

你对此有何看法?

2 个回复
最合适的回答,由SO网友:Jonathan 整理而成

如果您希望在没有积压工作的情况下获得即时通知,我会同时考虑这两种情况Node.js 和插座。io。您应该能够非常轻松地使用它们,并与WordPress集成。这个sample chat application on the Socket.io 该网站与您将要做的事情相差不远。

基本上,在LAMP/LNMP堆栈上触发一个事件,它会命中节点。js/插座。io服务器位于XXXX端口,它会响应或出错。如果成功,您将返回呼叫,从而提醒用户,如果出现错误,您只需记录(&;把它们藏起来不让公众知道。

就绩效而言,我的建议仅仅是因为规模。假设有100000个活跃用户,每个用户每天只触发几次警报,即24小时内有200-300000个呼叫。要排队加入人工cron系统,甚至是服务器上的标准cron,需要做很多工作。我个人不相信cron会处理它,如果有一个解决方案,就像我提到的那样,可以很容易地解决这个问题,而不会有太多麻烦,更重要的是,您在脚本编写端不依赖数据库,比如MySQL。所有这些都将发生在用于分析目的的快速日志记录(成功、错误、用户名、时间戳等)和基本文本请求的处理中。身份验证将使用WordPress在主服务器上处理,因此基本上可以锁定节点。js服务器关闭,仅接受和发送响应。

至于电子邮件,如果你打算每天发送10万封(可能是100万封)电子邮件,那么甚至不应该考虑使用同一服务器的电子邮件,也不应该尝试自己托管它。MailChimp运行Mandrill。那里每天50万美元的费用将略高于100美元。SendGrid每天超过200美元,MailGun每天245美元。到目前为止,这并不便宜,但您可以自己动手,每天收到50万封电子邮件并返回给您,因此,您的邮件服务器会因尝试发送的持续和过度负载而瘫痪&;接收几乎相同的负载。

我使用了SendGrid和Mandrill。在我看来,曼德里尔是两者中的佼佼者。我已经和他们在一起一年多了,从来没有出现过问题,也没有出现过交付/反弹失败的情况。简单易用-设置DKIM&;你域上的SPF(他们会告诉你使用什么),这就是它的全部内容。

至于点击用户/帖子元,这是不确定的。有一个非常好的插件叫做高级自定义字段,它利用了post meta。对于简单的元框,它的速度几乎和其他任何东西一样快;帖子进去了,数据出来了(尽管数据出来的速度比进去的速度快得多)。当您开始变得更复杂时,例如ACF所做的事情,这时您真的需要决定是元框还是CPT是更好的选择。

使用CPT(自定义帖子类型),您可以简单地将内容框用作存储的主要字段。它已经存在,没有数据序列化(我相信这会发生在元框中-我知道它会发生在选项表中),并且可以使用预先存在的查询调用它,因此您不用编写新的查询。

依我看,如果你执意使用WordPress作为拦截工具,那么CPT将是一条必经之路。至少对于CPT,您可以选择向其添加meta。

SO网友:Sisir

如米洛所示。小心发送太多电子邮件,否则您的IP将被禁止/列入黑名单。

就我个人而言,我更喜欢创建一个表作为电子邮件队列,并按间隔发送它们WP Cron API。

默认情况下wp_mail() 使用phpmail() 这是不太可靠的,并可能最终在垃圾邮件文件夹。Using SMTP for sending email 是一种更可靠的方式来避免垃圾邮件。It is also very important 您的用户知道您将向他们发送电子邮件。他们应该非常清楚,这样一来,人们打击“报告为垃圾邮件”的案件将是最低限度的Amazon SES, Send Grid, Mail Gun 等等。在应用程序中创建一个与这些外部服务连接的接口,并发送批量电子邮件

结束

相关推荐

Performance on WPMS

我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?