JQi*_*ian 6 nlp amazon-web-services celery python-2.7 aws-lambda
目前,我正在开发一个基于NLP分析和可视化文本数据的系统。
后端(Python + Flask + AWS EC2)处理分析,并使用API将结果反馈到仅处理交互式可视化的前端(FLASK + D3 + Heroku)应用程序。
现在,原型中的分析是一个基本的python函数,这意味着在大文件上分析需要花费更长的时间,从而在API数据桥接到前端期间导致请求超时。以及许多文件的分析都是在线性阻塞队列中完成的。
因此,要扩展此原型,我需要将Analysis(text)函数修改为后台任务,这样它就不会阻止进一步执行,并且一旦函数完成就可以进行回调。输入文本是从AWS S3提取的,输出是一种相对较大的JSON格式,也打算存储在AWS S3中,因此API桥将简单地提取此JSON,其中包含前端应用程序中所有图形的数据。(我发现S3比创建大型关系数据库结构来存储持久数据要容易一些。)
我正在用Celery做一些简单的示例,并发现它很适合作为解决方案,但是我只是在AWS Lambda中进行了一些阅读,从规模上看,这似乎是一个更好的解决方案...
该Analysis(text)函数使用一个预先构建的模型,并从相对常见的NLP python包中进行操作。由于我缺乏扩展原型的经验,因此我想询问您的经验,并判断哪种解决方案最适合这种情况。
谢谢 :)
我想分享个人经验。我将繁重的工作移到了AWS Lambda上,我必须承认ROI相当不错。例如,我的任务之一是为客户生成月度报表,然后也将其邮寄给客户。每个语句的数据都输入到Jinja模板中,该模板为我提供了该语句的HTML。使用Weasyprint,我将HTML转换为Pdf文件。然后邮寄这些pdf声明是最后一步。我研究了直接创建pdf文件的各种方法,但对我来说它们似乎不可行。
也就是说,当规模较小时,即当客户数量较少时,芹菜很棒。值得一提的是,在执行此任务期间,我观察到CPU使用率很高。我将为每个客户将此任务添加到celery队列中,celery工作者将从中提取任务并执行。
但是,当规模变高时,芹菜并没有成为一个可靠的选择。CPU使用率很高(我不怪它是芹菜,但这是我观察到的)。芹菜虽然还不错。但是请务必理解,芹菜可以解决结垢问题。垂直缩放可能对您没有帮助。因此,随着后端的增长,您需要水平缩放以从芹菜中获得良好的性能。当队列中有许多任务在等待,并且工作人员的数量受到限制时,自然会有很多任务要等待。
因此,就我而言,我将CPU密集型任务移至了AWS Lambda。因此,我部署了一个函数,该函数将从客户的对帐单数据生成对帐单Pdf,然后将其邮寄。AWS Lambda立即解决了我们的扩展问题。其次,由于这更多的是定期任务,而不是日常任务-因此我们不需要每天运行芹菜。Lambda会在需要时启动-但在不使用时不会运行。此外,此功能在NodeJS中,因为我发现的npm软件包比我在Python中拥有的解决方案更有效。因此Lambda也是有优势的,因为您可以利用各种编程语言,但您的核心可能会保持不变。另外,我个人认为Lambda相当便宜-因为免费套餐每月提供大量计算时间(GB-秒)。也,会谨慎处理Lambda的基础服务器,以在可用时将其更新为最新的安全补丁。如您所见,我的维护成本已大大降低。
AWS Lambdas可根据需要进行扩展。另外,它们可以为实时流处理等任务,繁重的数据处理任务,或可能占用大量CPU的运行任务提供很好的用例。
| 归档时间: |
|
| 查看次数: |
2802 次 |
| 最近记录: |