基于Python Django + Celery + RabitMQ+Clickhouse+S3的数据导出服务

本文介绍了如何利用Python Django、Celery、RabbitMQ、Clickhouse和S3构建数据导出服务。在原有方案中,业务前端请求触发数据查询并存储于S3,由Celery消费MQ消息。新方案加入了数据团队,查询操作转至Clickhouse,仍使用Celery和MQ,但增加了数据交互的复杂性。目前架构存在功能重复,但考虑性能优化和削峰填谷,保留了现有设计。

基于Python Django + Celery + RabitMQ+Clickhouse+S3的数据导出服务

工作背景

由于线上的查询与导数任务影响了业务的数据库查询性能,于是需要大数据团队负责将这块业务梳理到数据侧进行。

主要的工作流程

主要的工作流程架构图
上图展示了在业务与data的接口侧的现在的技术架构图。下面对这个过程进行说明下:
原来业务的旧方案(图中的左边部分):

  1. 业务前端通过导出请求,将请求打到她们自己的后台服务器上,这时候,服务器会做两件事情,(1)为这个请求生成一个UUID,并将这个请求消息的相关参数存入到mysq 中,(2)将这个消息存入到MQ中。
  2. 消费者进程(Celery)读取MQ中的消息,并按照消息中的参数,请求查询业务数据库,将查询结果写到S3文件中。并将S3的链接与执行状态写到mysql库中。
  3. 前端轮询接口,查询到该任务的状态信息后,即成功消息,与S3文件链接链接。生成生成相应的下载页面。
  4. 页面点击下载后,通过S3的文件链接,下载S3文件。

新的加入数据团队的方案(整个图):

  1. 业务前端通过导出请求,将请求打到她们自己的后台服务器上,这时候,服务器会做两件事情,(1)为这个请求生成一个UUID,并将这个请求消息的相关参数存入到mysq 中,(2)将这个消息存入到MQ中。
  2. 消费者进程(Celery)读取MQ中的消息,并将请求转发到DATA 侧。
  3. DATA接收到了请求后,后续的操作与业务类似。即服务器会做两件事情,(1)为这个请求生成一个UUID,并将这个请求消息的相关参数存入到mysq 中,(2)将这个消息存入到MQ中。
  4. 消费者进程(Celery)读取MQ中的消息,并按照消息中的参数,请求查询Clickhouse数据库,将查询结果写到S3文件中。并将S3的链接与执行状态写到mys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值