我正在致力于图像托管网站(图库的竞争对手),并需要加强我的游戏。新照片通过FTP上传或放置在服务器上,并进行索引(快速),然后稍后缩略图(缓慢)。PHP/MySQL中的异步消息传递?
最简单的实现是允许用户上传,然后索引和缩略图,而他们等待(缓慢的网页加载)。管理员可以登录索引,然后缩略图手动上传的其他文件(缓慢页面加载,刷新并可能需要几小时)。
我现在的实现是用户上传原因索引,而他们等待,有时(随机)整个网站索引在正常页面负载之上搭载(对用户造成额外的边缘延迟)。网站上的网页指的是缩略图应该存在的网址。如果用户请求不存在的缩略图,则在等待时创建它(“懒惰缩略图”)。
2的好处是在多核系统上使用所有内核。缺点是,第一次需要一页新照片加载30x50 MB,并且页面超时,其中一些图像完成,其他图像处理最后的加载。
问题是在这里实现任务处理的正确方法是什么?如果它扩展到共享数据库上的多个服务器,则为奖励点。
一个想法如下(可能是乱码):
我想过做一个数据库中的作业表:
id INT NOT NULL AUTO_INCREMENT,
priority INT NOT NULL,
worker INT,
workstarted DATETIME,
func CHAR(10) NOT NULL,
args VARCHAR NOT NULL,
PRIMARY KEY(id),
INDEX(priority),
UNIQUE(func,args) -- prevent duplicate jobs if user does F5
然后当工作需要完成,插入一行,并创建一个工作者线程(如果足够的线程不存在)。然后等待响应,并在作业成功完成或5秒后超时后继续。如果发生超时,请使用AJAX将内容提供给用户。
事情我不知道该怎么做这种方法是:如果足够的工作线程存在(使用表和心脏跳动?),工作人员如何发送响应(完成时删除作业和如果失败,写另一个表?),请求者如何高效地等待响应或超时(比轮询数据库更好?)。根据这些方法,系统可以随着在不同服务器上运行的员工进行扩展。
这看起来像是要走的路。这是一个成熟的项目,所以我需要检查和评估0MQ的成熟程度,并确保它不会很快被取代。谢谢! –
祝您的项目顺利! :) –