4 Star 8 Fork 0

Xavier-Lam / qiniu-ufop

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Qiniu-ufop

PyPI

本项目提供一个便捷高性能的七牛自定义数据处理脚手架,以便开发人员专注数据处理业务逻辑.

目前尚未编写单元测试,也没有完善的异常处理机制.采用Python 3.6进行开发,不确保其他版本运行正常.

项目官方站点 https://github.com/Xavier-Lam/qiniu-ufop

Quickstart

安装

通过pip安装项目

pip install qiniu-ufop

开始项目

使用qiniu-ufop命令,快速生成项目

qiniu-ufop createproject

通过createproject命令,qiniu-ufop在当前目录下生成了一个app.py文件.

编写业务代码

以下是一个简单示例:

# app.py

from qiniu_ufop import QiniuUFOP

ufop = QiniuUFOP()

@ufop.task(route=r"^(?:/(?P<name>\w+))?$")
def debug(buffer, args, content_type):
    return "hello " + args.get("name", "world")

假设该自定义数据处理名称为qiniu,待处理的文件链接为https://qbox.me/example.jpg. 则调用链接是https://qbox.me/example.jpg?qiniu/qq*,响应输出为*hello qq

编写说明参见开发 章节

本地运行项目

qiniu-ufop runserver --debug
qiniu-ufop runworker

注意: 在windows下开发需额外安装eventlet,运行runworker时使用命令qiniu-ufop runworker -P eventlet

详见调试章节

生成Dockerfile并发布

qiniu-ufop deploy -t <image-tag> -n <ufop-name> -v <version>

该命令为一键部署命令,一键部署需满足相关条件,请参阅一键部署章节.如需定制化部署,可参见手工部署章节

激活

在你的自定义处理的版本列表中调整实例数,即可使用

注意

七牛有一个BUG,在代码中没办法取到正确的cpu核数

  • 使用一键部署,框架会取一键部署的配置项flavor(实例类型,默认C1M1)作为CPU核数,开启相应数量的worker及web
  • 自行部署时,请务必在环境变量(开发路径下的.env文件)中写入CPU核数CPU_COUNT或实例配置FLAVOR,才能开启正确数量的worker及web,否则,qiniu-ufop将默认取单核,也就是单实例运行web及worker

开发

数据处理器实际上是一个celery任务,这个任务必须接受一个route参数,指明会路由到该处理器的cmd,如果全局只有一个处理器,可以使用.*^$作为路由.理论上可以使用celery复杂的任务分发.

被装饰的处理起接受三个参数,第一个是待处理文件的io.BytesIO,第二个是路由匹配到的参数字典,第三个是文件的Content-Type.

处理器返回字符串,bytes,json或是一个qiniu_ufop.Response对象.

日志可直接输出stderr.

使用

命令行工具

可通过

qiniu-ufop -h

看到详细说明

一键部署

一键部署假设用户

  • 本地安装有docker环境

  • 已安装并登陆qdoractl,qdoractl在PATH中

  • 已注册自定义处理程序

      qiniu-ufop deploy -t <image-tag> -n <ufop-name> -v <version>

手工部署

官方文档

此章节假定用户已完成自定义数据处理程序的开发,本地安装有docker环境,并处在自定义处理程序目录下

生成镜像

  • 构建docker镜像

      docker build . -t <tag>

上载自定义处理程序

  • 下载自定义数据处理命令行工具

  • 使用accesskey及secretkey登陆

      qdoractl login -u <access key>
  • 如果你尚未创建你的自定义处理程序,请创建

      qdoractl register <ufop> [-d <description>]
  • 上载自定义处理程序

      qdoractl push <tag>

配置

官方文档 自定义数据处理后台

其他依照官方文档配置,在高级配置中

  • 健康配置Path请填写/health
  • 日志路径添加
    • 任务处理异常日志 /var/log/worker/
    • web处理异常日志 /var/log/server/
    • supervisor日志 /var/log/supervisor/

调试

本地调试处理程序

可通过qiniu-ufop对处理程序进行调试

qiniu-ufop process [<cmd>] <filename>

注意:此处的cmd是不包括处理程序名的

命令的结果将直接打印再控制台上,如需持久化,可使用output参数,例如

qiniu-ufop process test.png -o output.png

本地调试webserver

启动服务器及worker

qiniu-ufop runserver --debug
qiniu-ufop runworker

访问

POST http://localhost:9100/handler?cmd=\<cmd>&url=<url>

或将文件作为body,POST到

POST http://localhost:9100/handler?cmd=\<cmd>

注意: 不是使用multipart/formdata进行文件上传

注意: 在windows下开发需额外安装eventlet,运行runworker时使用命令qiniu-ufop runworker -P eventlet

否则会报ValueError: not enough values to unpack (expected 3, got 0)

本地调试Docker

在项目目录下

qiniu-ufop dockerfile > Dockerfile
docker pull ubuntu:18.04
docker build . -t <tag>
docker run --name <name> -p 9100:9100 -t <tag>

访问

POST http://localhost:9100/handler?cmd=\<cmd>

注意: 在使用virtualbox时 localhost应改为虚拟机ip

问题排查

日志查看

七牛的日志查看好像经常取不到日志,建议自行在处理程序中埋一个下载日志的方法,来获取日志.可以参看示例项目

部署过程中遇到的异常

在运行qdoractl push时,可能会遇到该异常,反正我是遇到了

Get http://192.168.99.100:2376/v1.20/version: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02".

* Are you trying to connect to a TLS-enabled daemon without TLS?

遇到上述异常,首先登陆docker宿主机

docker-machine ssh

修改docker配置,设置DOCKER_TLS=no

sudo vi /var/lib/boot2docker/profile

重启docker服务

sudo /etc/init.d/docker restart

退出docker宿主机

exit

unset本机环境变量DOCKER_TLS_VERIFY(以windows为例)

set DOCKER_TLS_VERIFY=

再度执行部署(参见手工部署或一键部署)

Cookbook

使用git更新代码

  • 在工作路径下,生成ssh-key

      md .ssh
      ssh-keygen -f ./.ssh/id_rsa -t rsa -N ''
  • 将生成的 ./.ssh/id_rsa.pub 加入git仓库的部署密钥中

  • 修改Dockerfile,在cmd前加入

      RUN apt-get install git
      ADD ./.ssh /root/.ssh
      RUN chmod 400 /root/.ssh/id_rsa
      RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
      RUN git clone your@repository
  • 修改script.sh

      git pull origin master

注意: 由于将私钥加入了镜像,任何拿到你的镜像的用户,将可以获取到你的私钥

TODOS:

  • 异常处理
  • 单元测试
  • 测试异步

吐槽一下七牛的工单处理,我提了至少3个bug,要么装傻,要么说对不起,我们有问题,请你使用其他方法...另外文档自定义数据处理这块文档也比较糟糕.

有问题可以提issue我问我,star数上50再考虑单元测试吧~

Xavier-Lam@NetDragon

The MIT License (MIT) Copyright (c) 2014-2019 Xavier-Lam Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

提供一个便捷高性能的七牛自定义数据处理脚手架,以便开发人员专注数据处理业务逻辑. 该仓库为本人开发仓库 issue及协作开发请访问github仓库 展开 收起
Python 等 3 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/xavier-lam/qiniu-ufop.git
git@gitee.com:xavier-lam/qiniu-ufop.git
xavier-lam
qiniu-ufop
qiniu-ufop
master

搜索帮助

14c37bed 8189591 565d56ea 8189591