我想创建一个网络爬虫,它将一些网站的内容保存在blob存储中。在Azure上做这件事的正确方法是什么?我是否应该启动一个工作者角色,并使用Thread.Sleep方法使其每天运行一次?
我还想知道,如果我使用这个Worker角色,如果我创建它的两个实例,它将如何工作?我注意到在使用"Compute Emulator UI“时,命令"Trace.WriteLine”同时在两个实例上工作,有人能澄清这一点吗?
我使用php创建了相同的爬虫,并将cron作业设置为每天启动脚本一次,但它花了6个小时才抓取全部内容,这就是为什么我想使用Azure。
发布于 2016-01-02 13:37:42
这是正确的方法,从2014年1月起,微软引入了Azure WebJobs,在那里你可以创建一个项目(例如控制台),并将其作为计划任务运行(发生一次,循环)
https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/ http://www.hanselman.com/blog/IntroducingWindowsAzureWebJobs.aspx
发布于 2012-06-01 03:55:38
考虑到工作者角色基本上是Windows2008Server,您可以运行与本地运行相同的代码。
但是,考虑到角色实例可能重新启动的原因有几个:操作系统更新、崩溃等。在这些情况下,您可能会丢失正在完成的工作。所以..。您可以通过以下几种方式处理此问题:
有一件事需要考虑,那就是把你的网络爬行分解成不同的任务(url?)并将它们单独放在队列中?这样,您就可以进行扩展,在同一实例中运行多个实例,或者可能运行多个线程(因为web爬行很可能是阻塞操作,而不是cpu和带宽密集型操作)。
发布于 2012-06-01 03:55:12
每天运行一次的单个工作角色可能是最好的方法。不过,我不会使用线程睡眠,因为您可能想要重新启动实例,然后它可能会在一天前或一天后启动,具体取决于您的编程。如何将任务命令作为消息放在Azure队列中,并在它被工作者角色拾取后将其出队,然后在Azure队列中添加一次新的任务命令。
https://stackoverflow.com/questions/10840267
复制相似问题