Add delay to publish post

时间:2015-07-29 作者:Joe Conlin

我正在运行多个服务器,当人们在上传特色图像后立即发布帖子时,我遇到了一个问题,该图像不能立即在所有服务器上可用。

我知道我可以让每个人都安排发帖,但我希望在点击发布几分钟时插入一个延迟。任何关于如何实现这一目标的想法都会非常有用。

1 个回复
SO网友:kovshenin

我认为,增加延迟并不是真正解决问题,而是将其隐藏起来,直到您增长并添加更多的媒体和服务器,因此lsyncd将花费更长的时间,您每次都必须增加延迟。

还有,更新现有帖子怎么样?人们可能会添加媒体项目和更新,或者向库中添加更多项目,您将不得不在每次保存操作上添加延迟,听起来非常粗糙、脆弱和糟糕的用户体验。

我可以想出三种方法来解决这个问题。首先,如果在目标服务器上找不到请求的文件,您可以将请求代理到wp内容/上载到“主”服务器。我想你可以用try_files 在nginx中:

try_files $uri @proxy;
location @proxy {
    proxy_pass http://master:80;
}
这应该可以很好地与当前设置配合使用,并且@proxy 将在使用lsyncd的复制尚未完成时启动。

第二种方法是使用分布式文件系统,如GlusterFS或Ceph。您可以以类似NFS的方式使用它们,即一次在多个节点上挂载、可读写,这样您就不必再拥有“主”web服务器——它们中的每一个都可以写入文件系统。

然而,请注意,在装载的远程文件系统上执行大量文件IO很容易成为性能瓶颈(#31066 因此,请确保在web服务器和文件系统集群之间有某种磁盘io缓存和非常低的延迟(至少是相同的机架或相同的数据中心)。

第三种选择是对象存储,最好使用HTTP访问,如Amazon S3。这将需要更繁重的工作,因为现在您必须将所有上载的文件移动到远程目标(不要被s3fs愚弄,它是一个蠕虫罐头),并且您将无法轻松地在本地执行操作,例如重新生成缩略图、从本地文件读取EXIF数据等。

现在,回答你原来的问题。与其增加延迟,我建议您考虑一下发布帖子的时间安排,比如用户点击发布按钮后的5分钟。为此,我会调查transition_post_status 行动,注意draft => publish 转换并将其更改为future 具有wp_insert_post().

希望有帮助!

结束

相关推荐

GET_POSTS()函数的内存问题

我在现有代码中遇到了一个致命错误,当我深入调试时,我发现它来自下面的代码行。get_posts( array(\"posts_per_page\"=>-1) ); 有人能解释为什么会这样以及如何克服它吗?错误:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /var/www/web0/html/blog/wp-includes/wp-db.php on