用Django+MySQL+Celery+RabbitMQ实现一个分布式测试系统

最近做了一个分布式的测试系统,目前实现了主要的架构和MVP(minimum viable product)版本的基本功能。在架构设计、数据库设计、具体实现等方面,(算是目前我做的架构最复杂的测试系统)还是花了2-3周的时间,终于MVP 版本算是出来了(今后根据需求和精力再考虑丰富更多的功能)。

使用Python开发,界面部分目前还没做;架构上使用到的东西,主要使用了:Django+DjangoRestFramework+MySQL+Celery+RabbitMQ。
如下图:

architecture diagram of test execution API

(此图在:http://www.processon.com/view/link/53a6e2440cf266a8fabce8b0)
应该来说,该系统的可扩展性还是比较好的,任务都是异步处理,而且可以实现分布式的worker来同时处理RabbitMQ中的消息。今后,如果调用量到了很大的数量级,还可以好好优化和水平扩展更多的worker。

在搭建该系统的过程中,由于以前都没在项目中实际用到这些技术,所以还是走了各种弯路,踩过一些坑。不细说了,参考资料中的网页链接或许值得一读。

参考资料:

http://mathematism.com/2010/02/16/message-queues-django-and-celery-quick-start/

http://maemual.net/?p=543

http://ashin.sinaapp.com/article/137/

时间: 2024-10-25 07:11:34

用Django+MySQL+Celery+RabbitMQ实现一个分布式测试系统的相关文章

使用django+mysql+scrapy制作的一个小说网站

小说网站用的程序都是千篇一律的,jieqi + guanguang,无聊时间学习python+django,也做了一个小说网站,下面说一说做这个网站一些过程, 制作这种采集站,最要紧的是要有一个好的采集器,在python的世界里面,爬取网页真是小菜一碟,urllib urllib2 requests 都是神器,不过为了追求程序的稳定性和易用性,我采用了scrapy这个第三方采集库 在windows下安装这个采集库有点麻烦,给大家推荐一个网站 http://www.lfd.uci.edu/~goh

kafka:一个分布式消息系统

1.背景 最近因为工作需要,调研了追求高吞吐的轻量级消息系统Kafka,打算替换掉线上运行的ActiveMQ,主要是因为明年的预算日流量有十亿,而ActiveMQ的分布式实现的很奇怪,所以希望找一个适合分布式的消息系统. 以下是内容是调研过程中总结的一些知识和经验,欢迎拍砖. 2.基础知识 2.1.什么是消息队列 首先,我们来看看什么是消息队列,维基百科里的解释翻译过来如下: 队列提供了一种异步通信协议,这意味着消息的发送者和接收者不需要同时与消息保持联系,发送者发送的消息会存储在队列中,直到接

zabbix企业级分布式监控系统--zabbix-server和zabbix-agent的配置过程

首先,大家应该了解一下,什么是zabbix? Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent(代理),也可以支持SNMP.IPMI.JMX.Telnet.SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警.其灵活的扩展性和丰富的功能是其他监控系统不能比的.相对来说,他的总体功能做得非常优秀,其界面也很简洁美观. 在国内,BAT的部分业务.豆瓣.58同城.PPTV.搜狐.Letv.人人.网易.小米.360等公司都在使用Zabb

Django中Celery的实现

Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Celery介绍 Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度. 上图展示的是Celery的架构,它采用典型的生产者-消费者模式,主要由三部分组成:broker(消息队列).workers(消费者:处理任务).backend(存储结果). 消息中间件:Celery本

Django使用Celery异步任务队列

1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队列(MQ.Redis). 1.1  Celery原理 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件:Celery本身不提供消息服务,但

django+django-celery+celery的整合实战

django+django-celery+celery的整合 本篇文章主要是由于计划使用django写一个计划任务出来,可以定时的轮换值班人员名称或者定时执行脚本等功能,百度无数坑之后,终于可以凑合把这套东西部署上.本人英文不好,英文好或者希望深入学习或使用的人,建议去参考官方文档,而且本篇的记录不一定正确,仅仅实现crontab 的功能而已.希望深入学习的人可以参考http://docs.jinkan.org/docs/celery/.首先简单介绍一下,Celery 是一个强大的分布式任务队列

Django使用Celery自动更新缓存

目录 Celery 官网: Celery架构 使用场景 Celery的安装配置 Celery执行异步任务 包架构封装: 基本使用: 高级使用: django中使用 Celery 官网: Celery 官网: http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/

如何构建一个分布式爬虫!

分布式爬虫概览何谓分布式爬虫?通俗的讲,分布式爬虫就是多台机器多个 spider 对多个 url 的同时处理问题,分布式的方式可以极大提高程序的抓取效率.构建分布式爬虫通畅需要考虑的问题(1)如何能保证多台机器同时抓取同一个URL?(2)如果某个节点挂掉,会不会影响其它节点,任务如何继续?(3)既然是分布式,如何保证架构的可伸缩性和可扩展性?不同优先级的抓取任务如何进行资源分配和调度?基于上述问题,我选择使用celery作为分布式任务调度工具,是分布式爬虫中任务和资源调度的核心模块.它会把所有任

centos6.5+Django+mysql+nginx+uwsgi

1.nginx的安装.这里采用nginx-1.6.0, 建立一个shell脚本然后执行. #!/bin/bash nginx_version="nginx-1.6.0" yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel cd soft tar zxvf $nginx_version".tar.gz" cd $nginx_version ./configure --error-log-pa