DataFlux Func
DataFlux Func 是一个基于Python 的类ServerLess 的脚本开发、管理及执行平台。
DataFlux Func
读作data flux function
,系统内有时会缩写为DFF
。
前身为DataFlux 下属的一个函数计算组建,目前已成为可独立运行的系统。
本系统主要分为2个部分:
- Server:使用Node.js + Express 构建,主要提供Web UI 客户端、对外API 接口
- Worker:使用Python3 + Celery 构建,主要提供Python 脚本的执行环境(内含Beat模块)
本文档主要说明离线安装部署本项目的步骤。
注意:本文所有涉及到的shell命令,在root用户下可直接运行,非root用户下需要添加sudo运行
系统及环境要求
- 本系统使用
docker stack
部署, 因此要求当前系统已经安装docker
,且可以正常使用docker stack
携带版安装脚本本身已经自带了
docker
的安装包并会在部署时自动安装。 用户也可以先行安装docker
后运行部署脚本,部署脚本在发现docker
已经安装后会自动跳过这部分处理。使用
docker stack
需要Docker Swarm模式, 可以使用docker swarm init
初始化当前节点。如果本机存在多个网卡,需要在上述初始化命令中指定网卡, 如:
docker swarm init --advertise-addr=ens33
。 本机网卡列表可以通过ifconfig
或者ip addr
查询
- 运行DataFlux Func 需要满足以下条件:
- CPU 核心数 >= 2
- 内存容量 >= 4GB
- 磁盘空间 >= 20GB
- 操作系统为 Ubuntu 16.04 LTS/CentOS 7.6 以上
- 纯净系统(安装完操作系统后,除了配置网络外没有进行过其他操作)
下载携带版
运行以下命令,即可自动下载DataFlux Func携带版的所需文件:
/bin/bash -c "$(curl -fsSL https://t.dataflux.cn/func-portable-download)"
命令执行完成后,所有所需文件都保存在当前目录下新创建的dataflux-func-portable
目录下。
直接将整个目录通过U盘等移动存储设备复制到目标机器中。
手工下载携带版
如需要手工下载,以下是所有的文件列表:
- README.md
- Docker 二进制程序: docker-18.06.3-ce.tgz
- Docker 服务配置文件: docker.service
- MySQL 镜像: mysql.tar.gz
- Redis 镜像: redis.tar.gz
- Mosquitto 镜像: eclipse-mosquitto.tar.gz
- DataFluxFunc 镜像: dataflux-func.tar.gz
- Docker Stack 配置文件:docker-stack.example.yaml
- DataFluxFunc 部署脚本:run-portable.sh
手工下载所有文件后,放入新建的dataflux-func-portable
目录下即可。
注意:如有更新,【重新下载所有文件】。请勿自行猜测哪些文件有变动,哪些没有变动
注意:手工下载时,如使用浏览器等下载时,请注意不要下载到缓存的旧内容!!
多网卡注意点
如果本机存在多个网卡,需要在Docker Swarm 初始化命令中指定网卡,如:
docker swarm init --advertise-addr=ens33
可以直接修改run-portable.sh
后执行脚本,也可以自行安装Docker并初始化Swarm后运行脚本。
本机网卡列表可以通过ifconfig
或者ip addr
查询。
如果脚本运行因多网卡中断,可手工初始化Docker swarm 后重新运行脚本
部署运行
携带版建议直接使用附带的安装脚本安装。
docker stack
的自动部署脚本部署
使用基于确保已满足上文中的「系统及环境要求」
在已经下载的dataflux-func-portable
目录下,
运行以下命令,即可自动配置并最终启动整个DataFlux Func:
/bin/bash run-portable.sh
使用自动部署脚本可以实现几分钟内快速部署运行,自动配置的内容如下:
- 运行MySQL、Redis、DataFlux Func(包含Server,Worker,Beat)
- 自动创建并将所有数据保存于
/usr/local/dataflux-func/
目录下(包括MySQL数据、Redis数据、DataFlux Func 配置、日志等文件) - 随机生成MySQL
root
用户密码、系统Secret,并保存于DataFlux Func 配置文件中 - Redis不设密码
- MySQL、Redis 不提供外部访问
执行完成后,可以使用浏览器访问http://localhost:8088
进行初始化操作界面。
注意:如果运行环境性能较差,应当使用docker ps
命令确认所有组件成功启动后,方可访问(见以下列表)
dataflux-func_mysql
dataflux-func_redis
dataflux-func_server
dataflux-func_worker-0
dataflux-func_worker-1-6
dataflux-func_worker-7
dataflux-func_worker-8-9
dataflux-func_beat
安装选项
自动安装脚本支持一些安装选项,用于适应不同的安装需求
添加安装选项时,只需要在自动部署命令后添加--{参数}[ 参数配置(如有)]
即可,如:
# 指定安装目录,同时开启MQTT组件(mosquitto)
/bin/bash run-portable.sh --install-dir /home/dev/datafluxfunc --mqtt
具体参数详情见下文
--mini
:安装迷你版
针对低配置环境下,需要节约资源时的安装模式。
开启后:
- 仅启动单个Worker 监听所有队列
- 遇到重负载任务更容易导致队列阻塞和卡顿
- 系统任务和函数任务共享处理队列,相互会受到影响
- 系统要求降低为:
- CPU 核心数 >= 1
- 内存容量 >= 2GB
- 如不适用内置的MySQL、Redis,系统要求可以进一步降低
--install-dir {安装目录}
:指定安装目录
需要安装到与默认路径/usr/local/dataflux-func
不同的路径下时,可指定此参数
--no-mysql
:禁用内置MySQL
需要使用已有的MySQL数据库时,可指定此参数,禁止在本机启动MySQL。
注意:启用此选项后,需要在安装完成后的配置页面指定正确的MySQL连接信息
--no-redis
:禁用内置Redis
需要使用已有的Redis数据库时,可指定此参数,禁止在本机启动Redis。
注意:启用此选项后,需要在安装完成后的配置页面指定正确的Redis连接信息
--mqtt
:启用内置MQTT Broker
需要安装后,同时在本机启动MQTT Broker时,可指定此选项。
注意:内置的MQTT Broker 为eclipse-mosquitto
,并会自动生成对应的数据源
更新部署
注意:如果最初安装时指定了不同安装目录,更新时也需要指定完全相同的目录才行
需要更新部署时,请按照以下步骤进行:
- 使用
docker stack rm dataflux-func
命令,移除正在运行的服务(此步骤可能需要一定时间) - 使用
docker ps
确认所有容器都已经退出 - 参考上文,重新部署(脚本不会删除原先的数据)
重启服务
需要重新启动时,请按照以下步骤进行:
- 使用
docker stack rm dataflux-func
命令,移除正在运行的服务(此步骤可能需要一定时间) - 使用
docker ps
确认所有容器都已经退出 - 使用
docker stack deploy dataflux-func -c {安装目录}/docker-stack.yaml
重启所有服务
查询日志
默认情况下,日志文件保存位置如下:
环境 | 日志文件位置 |
---|---|
容器内 | /data/dataflux-func.log |
宿主机 | {安装目录}/data/dataflux-func.log |
数据库自动备份
默认情况下,数据库备份文件保存位置如下:
环境 | 日志文件位置 |
---|---|
容器内 | /data/sqldump/dataflux-func-sqldump-YYYYMMDD-hhmmss.sql |
宿主机 | {安装目录}/data/sqldump/dataflux-func-sqldump-YYYYMMDD-hhmmss.sql |
提示:旧版本的备份文件命名可能为dataflux-sqldump-YYYYMMDD-hhmmss.sql
数据库备份文件默认默认情况下,每小时备份一次,最多保留7天(共168份)
完全卸载
某些情况无法直接升级的时候,需要先完全卸载后重新部署
需要完全卸载时,请按照以下步骤进行:
- 视情况需要,使用脚本集导出功能导出脚本数据
- 使用
docker stack rm dataflux-func
命令,移除正在运行的旧版本(此步骤可能需要一定时间) - 使用
rm -rf {安装目录}
命令,移除所有相关数据
参数调整
默认的参数主要应对最常见的情况,一些比较特殊的场景可以调整部分参数来优化系统:
参数 | 默认值 | 说明 |
---|---|---|
LOG_LEVEL |
WARNING |
日志等级。 可以改为 ERROR 减少日志输出量。或直接改为 NONE 禁用日志 |
_WORKER_CONCURRENCY |
5 |
工作单元进程数量。 如存在大量慢IO任务(耗时大于1秒),可改为 20 提高并发量,但不要过大,防止内存耗尽 |
_WORKER_PREFETCH_MULTIPLIER |
10 |
工作单元任务预获取数量。 如存在大量慢速任务(耗时大于1秒),建议改为 1 |
项目介绍
主要功能
- 脚本管理:支持草稿,脚本集,导入导出等
- Web端简易编辑器:基于CodeMirror,支持代码高亮、函数快速跳转定位、直接指定函数运行等
- 内置多种数据库驱动:提供统一封装的数据操作接口
- 环境变量:方便脚本运行时获取配置
- 授权链接:允许函数以限定的方式开放为HTTP API
- 自动触发配置:允许函数定时自动运行,满足Crontab 语法
- 批处理:允许函数异步运行
- 脚本导入导出:方便备份、批量部署
- 其他...
支持的数据库
数据库/消息队列/中间件 | 所用第三方库 | 兼容数据库 |
---|---|---|
DataFlux DataWay(HTTP方式) | dataway-python-sdk-nodep | |
InfluxDB(HTTP方式) | influxdb | 阿里云时序数据库InfluxDB 版 |
MySQL | mysqlclient | MariaDB 、Percona Server for MySQL 、阿里云PolarDB MySQL 、阿里云OceanBase 、阿里云分析型数据库(ADB) MySQL 版 |
Redis | redis | |
Memcached | python3-memcached | |
Clickhouse(TCP方式) | clickhouse-driver | |
Oracle数据库 | cx-Oracle | |
Microsoft SQL Server | pymssql | |
PostgreSQL | psycopg2-binary | Greenplum Database 、阿里云PolarDB MySQL 、阿里云分析型数据库(ADB) PostgreSQL 版 |
mongoDB | pymongo | |
elasticsearch(HTTP方式) | requests | |
NSQ (Lookupd, HTTP方式) | requests | |
MQTT | paho-mqtt |