2.1 在线医生的总体架构
- 架构图分析:
- 整个项目分为: 在线部分和离线部分
- 在线部分包括: werobot服务模块, 主要逻辑服务模块, 句子相关模型服务模块, 会话管理模块(redis), 图数据库模块以及规则对话/Unit模块.
- 离线部分包括: 结构与非结构化数据采集模块, NER模型使用模块, 以及实体审核模型使用模块.
- 在线部分数据流: 从用户请求开始, 通过werobot服务, 在werobot服务内部请求主服务, 在主服务中将调用会话管理数据库redis, 调用句子相关模型服务, 以及调用图数据库, 最后将查询结果输送给对话规则模版或者使用Unit对话API回复.
- 离线部分数据流: 从数据采集开始, 将获得结构化和非结构化的数据, 对于结构化数据将直接使用实体审核模型进行审核, 然后写入图数据库; 对于非结构化数据, 将使用NER模型进行实体抽取, 然后通过实体审核后再写入图数据库.
2.2 总体架构中的工具介绍
学习目标:
- 了解总体架构中使用了哪些工具.
-
- Flask web服务框架
- Redis数据库
- Gunicorn服务组件
- Supervisor服务监控器
- Neo4j图数据库
- 掌握总体架构中各个工具的简介, 作用, 安装和基本使用方法.
2.2.1Flask web服务框架:
2.2.2Redis数据库
安装:参考https://www.cnblogs.com/langtianya/p/5187681.html
https://askubuntu.com/questions/868848/how-to-install-redis-on-ubuntu-16-04
- curl -O http://download.redis.io/redis-stable.tar.gz
- /home/username/redis-stable中:tar xzvf redis-stable.tar.gz
- cd redis-stabel中
- make
- make test
- sudo make install
- 启动redis服务,使用默认配置(redis.conf);通过启动参数告诉redis使用指定配置文件使用下面命令启动。
-
cd src
-
./redis-server
-
./redis-server redis.conf
- 启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:
-
$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar" -
启动redis-server之后可以通过redis_demo.py文件
-
# coding=utf-8 # redis配置 REDIS_CONFIG = { "host": "0.0.0.0", "port": 6379 } # 导入redis驱动 import redis # 创建一个redis连接池 pool = redis.ConnectionPool( **REDIS_CONFIG) # 从连接池中初始化一个活跃的连接对象 r = redis.StrictRedis(connection_pool=pool) # hset表示使用hash数据结构进行数据写入 # uid代表某个用户的唯一标识 uid = "8888" # key是需要记录的数据描述 key = "该用户最后一次说的话:".encode('utf-8') # value是需要记录的数据具体内容 value = "再见, 董小姐".encode('utf-8') r.hset(uid, key, value) # hget表示使用hash数据结构进行数据读取 result = r.hget(uid, key) print(result.decode('utf-8'))
输出:再见,董小姐
-
2.2.3 Gunicorn服务组件:
简介:
Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务组件(WSGI: Web Server Gateway Interface),移植自Ruby的独角兽(Unicorn )项目,具有使用非常简单,轻量级的资源消耗,以及高性能等特点.
作用:
- 在项目中, Gunicorn和Flask框架一同使用, 能够开启服务, 处理请求,因其高性能的特点能够有效减少服务丢包率.
安装:
# 使用pip安装gunicorn pip install gunicorn==20.0.4
基本使用
# 使用其启动Flask服务: gunicorn -w 1 -b 0.0.0.0:5000 app:app # -w 代表开启的进程数, 我们只开启一个进程 # -b 服务的IP地址和端口 # app:app 是指执行的主要对象位置, 在app.py中的app对象 # 如果使其在后台运行可使用: # nohup gunicorn -w 1 -b 0.0.0.0:5001 app:app &
2.2.4Supervisor服务监控
简介:
- Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程, 并守护这些进程。
作用:
- 在项目中, Supervisor用于监控和守护主要逻辑服务和redis数据库服务.