Board logo

标题: 快速构建 DMS Web 应用程序之利刃: Flask + Celery + Redis + Cloudant(2) [打印本页]

作者: look_w    时间: 2018-12-7 18:55     标题: 快速构建 DMS Web 应用程序之利刃: Flask + Celery + Redis + Cloudant(2)

相关技术简介FlaskFlask 是一个基于 Python 的轻量级 Web 框架,WSGI 工具箱采用 Werkzeug,模板引擎使用        Jinja2。由于其不依赖于特殊的工具或库,并且没有数据抽象层、表单验证或是其他任何已有多种库可以胜任的功能,从而保持核心简单、易于扩展,而被定义为"微"框架。但是,Flask        可以通过扩展来添加应用功能。并且 Flask 具有自带开发用服务器和 debugger、集成单元测试和 RESTful 请求调度 (request dispatching)、支持        secure cookie 的特点。
Jinja2 是基于 Python 的模版引擎,支持 Unicode,具有集成的沙箱执行环境并支持选择自动转义。Jinja2 拥有强大的自动 HTML        转移系统,可以有效的阻止跨站脚本攻击;通过模版继承机制,对所有模版使用相似布局;通过在第一次加载时将源码转化为 Python 字节码从而加快模版执行时间。
RedisRedis 是一个使用 ANSIC 语言编写、遵守 BSD 协议、Key-Value 的存储系统。拥有支持数据持久化、支持 string、map、list、set、sorted        set 等数据结构和支持数据备份的特点。
Redis        会周期性地把更新的数据写入磁盘或把修改操作写入追加的记录文件,并且在此基础上实现主从(master-slave)同步,因此数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。而且由于        Redis 完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
MQMQ 消息队列是一种应用程序的通信方法,应用程序可通过读写出入对立的消息进行通信。MQ 是一种消费者-生产者        (Producer-Customer)模式的实现。生产者-消费者模式由生产者、消费者和缓存区三个模块构成。缓存区作为一个中介的存在,生产者将数据放入缓存区,消费者从缓存区取出数据。本系统中,Flask        作为生产者,Salesforce 作为消费者,而 MQ        则是中间的缓存区。应用生产者-消费者模式能够有效的降低两者之间的耦合,减少互相之间的依赖;由于缓存区的存在,消费者无需直接从生产者处获取数据,能够支持并发任务、减少阻塞。
RabbitMQ 则是由 erlang 开发的 AMQP(高级消息队列协议)的开源实现,作为一个消息队列管理工具与 Celery        集成后,负责处理服务器之间的通信任务。RabbitMQ 的使用过程如下:
RabbitMQ 常用的 Exchange Type 有以下三种:
CeleryCelery 是一个基于 Python 的分布式异步消息任务队列,通过它可以实现任务的异步处理,支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。并且 Celery        拥有任务失败或执行中断时自动尝试重新执行任务的高可用性以及处理任务的高效性。Celery        的架构是由消息中间件、任务执行单元和任务执行结果存储三部分构成的,所以在执行时需要配合一个消息中间件(Broker)来实现接收和发送任务消息,本文中消息中间件由 Redis +        RabbitMQ 共同实现,RabbitMQ 作为 Broker,Redis 作为 Backend。图 2 是 Celery 的工作流程图:
图 2. Celery 工作流程图
CloudantIBM Cloudant NoSQL Database for Bluemix(简称 Cloudant)在整个系统中作为数据库存在,是以 Apache CouchDB        为基础开发的多租户、独立、安装的服务。Cloudant 是一个 NoSQL 数据库即服务(DBaaS)。该服务是一个运营数据存储,用于存储 JSON        文档并对其建立索引,并且可以处理并行的读写操作。客户可以通过 HTTP API 从应用程序获取(get)、放置(put),查询(query)JSON        文档并对其建立索引(index)。
PicklePickle 是 Python 的标准模块之一,无需单独安装,主要有以下两类接口:
模块化后的对象以二进制的形式保存在文件中,后缀为 .pkl。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0