在期待我们的莫斯科Python Conf ++时,我们与金融科技初创公司的技术专家Oleg Churkin进行了简短的交谈,谈谈他在Celery方面的丰富经验:五十万个后台任务,错误和测试。
-告诉我一些有关您当前正在从事的项目的细节吗?目前,我从事一家金融科技初创公司
Statusmoney的工作 ,该公司分析用户的财务数据,并允许客户将其收入和支出与其他人群进行比较,设定支出限制,观察财富在图表上的增长或下降情况。 到目前为止,该项目仅针对北美市场。
为了分析财务信息,我们下载并存储所有用户交易,并与征信机构集成以获得有关信用历史记录的其他数据。
现在,我们拥有约20万用户,以及来自供应商的1.5 TB的各种财务数据。 约一百万笔交易
-什么是技术堆栈?当前项目的堆栈是Python 3.6,Django / Celery和Amazon Web Services。 我们积极使用RDS和Aurora来存储关系数据,使用ElasticCache来存储缓存和消息队列,使用CloudWatch,Prometheus和Grafana来进行警报和监视。 好吧,当然还有S3用于文件存储。
我们还非常活跃地使用Celery执行各种业务任务:发送通知和信件的大量邮寄,来自外部服务的各种数据的大量更新,异步API等。
在前端,我们有React,Redux和TypeScript。
-项目中负载的主要性质是什么以及如何处理它们
你应付吗?该项目的主要负担在于Celery执行的后台任务。 每天,我们执行大约一百万个不同的任务,例如,更新和处理(ETL)来自各银行,信贷局和投资机构的用户的财务数据。 另外,我们发送许多通知并为每个用户计算许多参数。
我们还实现了一个异步API,该API可以“脉冲化”来自外部源的结果,并且还可以生成许多任务。
目前,在调整基础架构和Celery之后,我们可以毫无问题地应对,但是在此之前,我一定会在报告中告诉您。
-如何扩展所有功能并提供容错能力?为了进行扩展,我们使用Auto Scaling Groups,这是我们的AWS云平台提供的工具箱。 Django和Celery在水平方向上可以很好地扩展,我们只对uWSGI / Celery工作者使用的最大内存量设置了一些限制。
-监视什么?为了监视cpu /内存使用情况以及系统本身的可用性,我们在AWS中使用Cloud Watch,我们使用Prometheus汇总了来自应用程序和Celery工作人员的各种指标,并构建了图形并将警报发送到Grafana。 对于Grafana中的某些数据,我们使用ELK作为源。
-您提到了异步API。 告诉更多有关您的情况。
安排。我们的用户有机会“链接”他们的银行(或任何其他金融)帐户,并向我们提供所有交易的访问权限。 我们在站点上动态显示“链接”和动态处理事务的过程,为此,我们使用通常从后端汇总当前结果的方法,后端获取数据,从几个重复的任务开始ETL管道。
-芹菜是有争议的产品。 你怎么和他住在一起?根据我的感觉,我们与Celery的关系现在处于“接受”阶段-我们弄清楚了框架是如何工作的,为自己挑选了设置,整理了部署,“覆盖”了监视,并编写了一些库来使例行任务自动化。 某些功能不足以让我们“开箱即用”,我们是自己添加的。 不幸的是,在为该项目选择技术堆栈时,Celery没有很多竞争对手,如果我们使用更简单的解决方案,我们将不得不增加更多的竞争对手。
我们从未遇到过Celery第四版中的错误。 大多数问题与我们对这一切的工作方式缺乏了解或与第三方因素有关。
我将在演讲中讨论我们项目中编写的一些库。
-我最喜欢的问题。 您如何测试所有这些音乐?芹菜任务已通过功能测试很好地测试。 我们在QA机架和舞台上的自动测试和手动测试的帮助下测试集成。 目前,我们尚未就定期任务的测试确定几个问题:如何让测试人员运行它们,以及如何验证这些任务的时间表是否正确(满足要求)?
-前端和布局的测试? 手动与手动的比例是多少
自动化测试?在前端,我们使用Jest并仅编写用于业务逻辑的单元测试。 Selenium自检现在覆盖了我们55%的业务关键案例,目前我们在TestRail中有大约600个测试,在后端有3,000个测试。
-您对莫斯科Python Conf ++的报告将如何?在
报告中,我将详细告诉您哪些任务以及如何使用Celery,并将其与现有竞争对手进行比较。 我将描述在设计具有大量任务的复杂系统时如何避免各种麻烦:应该立即指定哪些设置,以后可以保留哪些设置,如何部署新版本的代码以免在切换流量时丢失任务,我将共享用于监视任务的书面库和爆发。
我还将讨论在Celery上实现ETL管道的主题,并回答如何漂亮地描述它们,使用哪种重试策略,如何在资源有限的情况下精细限制执行的任务数量。 另外,我将描述我们使用哪些工具来实现任务的批处理,从而经济地消耗可用内存。
通常,如果您想了解以上所有方面的细节,请来。 希望您发现我的报告有用和有趣。