我有150个脚本,它们直接或间接地从IBM实例中提取数据,而我无法控制这些实例。我无法访问Cognos,因此这些脚本的最终数据源是模拟web浏览器以正常用户的身份登录以运行和下载报表。这是缓慢的(5秒到90秒取决于报告)。以前,这是由一个Perl脚本完成的,每当有人想要下载不同的报告时,这个脚本就会被复制。这意味着我们有非常重复的代码,并且经常在报告不再被使用后每天都在下载。我编写了一个微服务,从Cognos下载一个任意报告,试图替换所有Perl脚本。您向一个指示您想要的报表的url发出一个HTTP请求,这个微服务模拟一个浏览器下载报告,然后返回一个CSV或JSON文件(取决于您请求的内容)。这对于降低复杂性是很好的,因为每个脚本都可以在需要它的位置之上的一两行请求报表中的数据。当报告不再需要时,一切清理都是显而易见的。我们也不再需要同步调度(例如: Perl脚本在7:30下载数据,Python在7:35处理数据)。
许多报告在计算上是昂贵的,我最近收到了Cognos服务器管理员的大量电子邮件,该邮件基本上是“停止一遍又一遍地运行相同的报告,并尝试在关闭的时间内运行报告”。对我们来说,下班时间很晚。许多脚本所做的都是当人们在办公室时应该发生的事情(例如:我们有一个向特定人员发送电话的脚本),所以在许多情况下,我无法调整脚本运行的时间。在任何情况下,长达24小时的数据都是可以的。
我的想法是,因为每个报表都只是一个HTTP请求,所以我可以将一个缓存放在微服务的前面。但问题是,虽然我们每天运行相当多的报告,但大多数报告每天只运行一次。对于我所知道的大多数HTTP缓存,这将导致每个请求都被缓存遗漏。
这就是我想要发生的情况:第一次请求URL时,它是缓存丢失。URL从微服务中下载并传递给客户端。然后,服务器知道它可能会再次看到对该URL的请求,因此在关闭浏览时间内,它会刷新缓存。第二天,当脚本请求同一个URL时,它就是缓存命中,响应将立即返回。如果某个URL在一段时间内未命中,则缓存将其从每晚刷新的URL列表中删除。
基本上,我正在寻找一个HTTP缓存,它将了解哪些URL将被击中并在被请求之前下载它们。这样的东西已经存在了吗,还是我要写呢?
发布于 2019-12-15 15:49:41
许多脚本所做的都是当人们在办公室时应该发生的事情(例如:我们有一个向特定人员发送电话的脚本),所以在许多情况下,我无法调整脚本运行的时间。在任何情况下,长达24小时的数据都是可以的。
将数据收集与操作分离。
at作业。我的想法是,因为每个报表都只是一个HTTP请求,所以我可以将一个缓存放在微服务的前面。但问题是,虽然我们每天运行相当多的报告,但大多数报告每天只运行一次。对于我所知道的大多数HTTP缓存,这将导致每一个请求都是缓存丢失
如果您使用HTTP作为缓存设置(Ab),请更仔细地查看缓存软件的选项。例如,Squid可以强制对过期时间进行不符合规定的覆盖。然后,您的脚本可以在一夜之间获得数据,并在您真正想要的时候再次获得它。
这里的棘手之处是设置一个缓存时间,其中有命中和错过您想要的位置。就我个人而言,将数据收集和行动计划脱钩似乎是一个更干净的解决方案。
https://serverfault.com/questions/995597
复制相似问题