使用无服务器实现文件处理的批处理 - DZone Cloud


按计划的时间间隔处理批量文件是当今企业应用程序系统中最常用的自动化任务之一。这种类型的批处理文件处理可用于各种用例,例如创建备份,分析日志,执行计算等。

在本文中,我们将构建一个满足以下要求的批处理文件处理解决方案。

  1. 外部应用程序以随机​​时间间隔将文件上载到预配置的位置(这超出了我们的实现范围)。
  2. 我们的应用程序每隔1小时检查一次该文件位置,并逐个处理当前存在的所有文件。
  3. 成功处理文件后,将删除该文件以防止重复处理。
  4. 处理完当前批次的所有文件后,将向处理预先配置的电子邮件地址或多个地址发送包含处理详细信息(已处理文件总数,成功处理的数量和失败次数)的通知。

现在我们有两种主要方法来构建此解决方案。一种是传统方法,另一种是现代无服务器方法。让我们首先简要介绍一下传统方法及其缺点。然后使用后一种方法来构建此解决方案。

传统方法
如果我们考虑传统方法,完整解决方案将包含以下组件:

  • 外部应用程序将文件上载到的SFTP服务器,我们的应用程序将从中读取这些文件。
  • 我们的应用程序用于发送通知电子邮件的电子邮件服务器或第三方电子邮件服务提供商。
  • 将运行我们的应用程序的应用程序服务器
  • 我们的应用程序将安排cron任务以1小时的间隔触发某个例程,此例程将从SFTP服务器获取文件列表,处理每个例程并最终发送通知电子邮件。

尽管这种方法效果很好并且已经使用了很多年,但是与它相关的缺点很少。其中主要的是成本。在这里,您需要维护SFTP服务器,应用程序服务器以及可能还有电子邮件服务器。即使外部应用程序即使在一两天内没有上传任何文件,您仍然必须保持SFTP服务器全天候运行并支付费用,因为您不知道何时上传文件。应用程序服务器也是如此。根据您的处理类型,单个批处理过程可能只需几分钟。因此,在触发下一个批处理之前,您的应用程序服务器不会执行任何有效的工作,除非您在其中部署其他一些应用程序。

除此之外,您还需要开发一个复杂的应用程序,它不仅包含您的处理逻辑,还包含与与其他系统(如SFTP和电子邮件)交互相关的重要应用程序逻辑。

无服务器方法
但是现在变得越来越突出的无服务器模式使得这种情况出乎意料地简单且具有成本效益。例如,如果您使用AWS S3进行文件存储,则只需支付文件大小。如果您使用AWS Lambda进行处理,您只需要支付实际处理时间,而不是空闲时间的一分钱。

如何集成AWS组件以构建我们的解决方案。

  1. 配置S3存储桶以存储文件,直到它们被处理为止。
  2. 一个SNS主题配置为发布处理的通知和所需的电子邮件地址订阅了它。
  3. 一个LAMBDA功能与必要的权限,程序从S3存储读取文件,处理它们,删除处理的文件,最后将通知发送到SNS主题。
  4. 的CloudWatch预定事件被配置为在1小时的时间间隔以触发lambda函数。