Php 我可以为我的应用程序使用cron作业吗(需要具有极高的可伸缩性)?

Php 我可以为我的应用程序使用cron作业吗(需要具有极高的可伸缩性)?,php,linux,api,cron,cron-task,Php,Linux,Api,Cron,Cron Task,我将要进行一个大型项目,在这个项目中,我需要安排任务(cron作业)来运行一个脚本,该脚本将循环遍历我的整个实体数据库,并每隔10分钟调用多个API,如Facebook、Twitter和Foursquare。我需要这个应用程序是可扩展的 我已经预见到一些潜在的陷阱… 从API获取数据的速度很慢 由于我的数据库中有数千条记录(不断增加),在10分钟内处理每一条记录将花费太多的时间 某些共享服务器仅在30秒后停止脚本运行 由于持续运行密集型脚本而导致服务器问题 我的问题是如何构造我的应用程序…? 我

我将要进行一个大型项目,在这个项目中,我需要安排任务(cron作业)来运行一个脚本,该脚本将循环遍历我的整个实体数据库,并每隔10分钟调用多个API,如Facebook、Twitter和Foursquare。我需要这个应用程序是可扩展的

我已经预见到一些潜在的陷阱…

  • 从API获取数据的速度很慢
  • 由于我的数据库中有数千条记录(不断增加),在10分钟内处理每一条记录将花费太多的时间
  • 某些共享服务器仅在30秒后停止脚本运行
  • 由于持续运行密集型脚本而导致服务器问题
  • 我的问题是如何构造我的应用程序…?

  • 我是否可以创建多个cron作业来处理数据库的小部分(这必须是自动化的)
  • 这可能需要数千个cron作业。。这是可持续的吗
  • 如何绕过某些服务器的30秒问题
  • 有没有更好的办法
  • 谢谢

    请参阅以绕过30秒限制

    要在PHP中调度作业,请参阅:

  • 我个人会考虑一个更健壮的框架来处理作业调度(参见Grails with Quartz),而不是重新发明轮子并编写自己的作业调度程序。不要忘记,您可能需要不时检查任务的状态,因此您需要一个关于任务的日志解决方案

    我要承担一个大项目,我需要安排时间 任务(cron作业)来运行一个脚本,该脚本将在我的整个系统中循环 实体数据库,并调用多个API,如 Facebook、Twitter和Foursquare每10分钟一次。我需要这个 应用程序必须是可伸缩的

    最好的选择是将应用程序设计为使用分布式数据库,并将其部署在多个服务器上

    您可以将其设计为在两个“级别”的服务器中工作,这与map-reduce方法没有什么不同:只执行查询和“预摘要”某些数据的轻量级服务器(“map”),以及聚合数据的服务器(“reduce”)

    一旦您这样做了,您就可以建立一个性能基线并进行计算,比如说,如果您每分钟可以生成2000个查询,并且可以处理尽可能多的响应,那么每20000个用户就需要一个新服务器。在“每分钟生成2000个查询”中,您需要考虑:

    • 从数据库检索数据
    • 从控制服务器到控制服务器的流量带宽
    • Facebook、Foursquare、Twitter等的流量带宽
    • 本地登录的必要性(可能提取并上传日志摘要到命令和控制)
    这种体系结构的一个优点是,您可以从小处着手—可以使用运行连接器、映射器、减速器、命令和控制以及持久性的单机构建测试台。当您成长时,您只需将不同的服务外包给不同的服务器

    在多个分布式计算平台上,通过明智地在地理位置或连接性方面分配映射器,这还允许您更快地运行查询,并通过使用Amazon“区域”等功能降低各种平台之间的通信成本(Amazon还有一个消息服务,您可能会发现它对于任务之间的通信很有价值)

    注意:我不确定PHP是否是这整件事的正确工具。我宁愿考虑Python


    但是,在每个实例20000个用户的流量级别上,我认为您最好与Facebook、Foursquare等公司的同事讨论一下。至少您可以收集一些策略,例如将连接器脚本作为独立任务运行,每个连接器根据该服务的用户ID对其队列进行排序,以利用本地的少量数据可能会有,并且利用流水线技术以较少的服务器负载压缩更多带宽。最多,他们可能会向您推荐批量API或不同的协议,或者以1万亿美元的价格购买您:-)

    这里最大的问题是您选择了共享服务器,这听起来不像是合适的托管方式-获取VPS。至于问题:1是的,2,一个cron作业可以用来完成所有的调度3。不要使用共享服务器4。如上所述如果您希望在这种规模上做一些事情,那么共享服务器不应该是一个问题。你应该寻找一个VPS或专用服务器,或者多个。好的,谢谢,@Dagon-如果我要分割我的数据库,如何使用一个cron作业来完成所有的调度?我需要在10分钟内处理数据库中的每条记录,当然我需要运行多个cron作业。例如:(cron1调度script.php?records=1-999&cron2调度script.php?records=1000-1999)?1个cron作业,用于检查数据库,查看它现在应该生成什么;比多个cron作业更易于管理。您还应该考虑并行运行,启动两个脚本,一个获取记录1-100,另一个获取记录2-200,等等。我发现每个核心都有一个脚本工作得很好,这取决于服务器正在做什么Tanks@Iserni,这正是我要找的。我围绕这个想法做了更多的研究。