human: 如何处理七牛云的智能多媒体服务快速入门

gpt: [智能多媒体服务](https://developer.qiniu.com/dora) > 最佳实践 > 自定义数据处理（ufop） >快速入门

#  快速入门

最近更新时间: 2021-04-13 18:39:05

本教程分三部分介绍如何快速开发、部署和使用一个自定义数据处理的应用。

前期准备：

  * 一个[七牛账号 __](https://portal.qiniu.com/)
  * 根据操作系统，下载相应版本的[命令行工具 qdoractl](https://developer.qiniu.com/dora/tools/qdoractl)。
  * 本地运行Docker版本需为[1.12.0 __](https://github.com/docker/docker/blob/master/CHANGELOG.md#1120-2016-07-28)及以上

# 1 开发自定义数据处理程序

在开发自定义数据处理程序前，用户需要先在七牛创建一个自定义数据处理，主要是为了确定自定义数据处理的名称和访问模式。

## 创建一个自定义数据处理

**Step1** 登录七牛账号

通过 qdoractl 工具登录您的七牛账号，登录可以使用以下两种方式：

    
    
    $ qdoractl login -u <access key> -p <secret key>
    或
    $ qdoractl login 进入命令行交互界面进行登录
    

其中<access key> 和 <secret key> 可以在您的[密钥管理
__](https://portal.qiniu.com/user/key)中找到。

**Step2** 创建一个自定义数据处理

使用如下命令创建一个自定义数据处理：

    
    
    qdoractl register <ufop> [-d <description>] [-m <mode>]
    

参数、标志说明：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufop | **自定义数据处理名称** ，创建后不能修改 | string | 是  
-d 或 --description | 设置自定义数据处理的描述 | string | 否  
-m 或 --mode | 设置访问模式  
public : 任何人都能访问  
protected : apply 过的用户才能访问  
private : 只有自己才能访问。普通用户只能创建private或protected的自定义数据处理，默认是private | string | 否  
  
例如：

    
    
    $ qdoractl register doraufoptest -m private -d 'it is a test!'
    

会创建一个信息如下的自定义数据处理

  * 名称：doraufoptest
  * 模式：私有
  * 描述：it is a test!

命令参数介绍可以参考[命令行工具 qdoractl](https://developer.qiniu.com/dora/tools/qdoractl)。

## 开发自定义数据处理程序

自定义数据处理程序需要是一个基于Linux构建的，可运行的Docker镜像。镜像的构建和验证可以参考[Demo
__](https://github.com/qiniu-ufop/ufop-golang-demo)。

### 什么是可运行的Docker镜像？

可运行的Docker镜像在构建时需要在Dockerfile中指定入口程序([ENTRYPOINT
__](https://docs.docker.com/engine/reference/builder/#/entrypoint)或[CMD
__](https://docs.docker.com/engine/reference/builder/#/cmd))，同时该入口程序需要满足：

  * 启动后监听 9100 端口
  * 接受 HTTP POST /handler?cmd=XXX&url=XXX 的请求，并返回数据处理结果
  * 在一个自定义的路径上接收HTTP GET 请求，并返回该程序当前的健康状态（可选）

### 数据处理

数据处理接口如下：

METHOD | PATH | NOTE  
---|---|---  
POST | /handler?cmd=XXX&url=XXX | [cmd的值为该**自定义数据处理名称** ，url为待处理资源的地址  
  
请求包:

    
    
    POST /handler?cmd=XXX&url=XXX
    
    [body]
    

返回包：

    
    
    200 OK
    
    数据(可能二进制或 json 格式数据，由 APP 语义来定)
    

错误码:

  * 由 APP 定义，由 APP 使用方解释和使用

Note:

  * 请求包 query 参数中的 `url` 是可选参数，若有该参数且合法，则表明待处理的资源是通过 url 表征
  * 否则待处理资源通过请求body传递
  * 自定义数据程序必须同时支持这两种请求格式  
![](https://dora-doc.qiniu.com/ufop-developing-logic.png)

### 健康检查

建议用户配置健康检查url，七牛自定义数据处理框架会按照用户配置的调用间隔定时向该url发送GET请求来判断实例的健康状态，如果返回的status
code是非200，则七牛自定义数据处理框架会将该实例标示为非健康，并不再向该实例发送数据处理请求，从而将有问题的实例隔离出去。

### 验证镜像

在镜像制作完毕后，建议在本地运行该docker镜像，并发送两种数据请求和健康检查请求，来确认镜像功能正常。

# 2 部署自定义数据处理

部署自定义数据处理分为三步。

## Step1 上传自定义数据处理程序

把第一部分中开发并验证完的可运行的docker镜像，推送到七牛自定义数据处理镜像仓库，运行命令：

    
    
    qdoractl push <image_name> 
    

例如：

    
    
    qdoractl push ufopdemo:v1
    

会将名为 ufopdemo:v1 的镜像推送到七牛自定义数据处理镜像仓库

在推送成功后可以运行如下命令：

    
    
    qdoractl image
    

来查看当前用户所拥有的所有镜像，如：

    
    
    $ qdoractl image
    Name             Ctime
    ufopdemo:v1      2016-11-28 20:19:05
    

## Step2 创建发布版本

在镜像上传成功后，创建一个发布版本。

首先，需要准备发布版本的配置文件。运行以下命令：

    
    
    qdoractl release --mkconfig .
    

当前目录会生成一份名叫dora.yaml的配置文件，该配置文件包含下列参数：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufopname | 自定义数据处理名称 | string | 是  
verstr | 该发布的版本号 | string | 是  
image | 镜像名（可通过命令 qdoractl image 找到所有可用镜像） | string | 是  
desc | 设置发布的说明信息 | string | 否  
flavor | 设置需要的资源配置（可通过命令 qdoractl flavor 找到所有可用资源配置 ） | string | 是  
health_check | 设置健康检查  
path : string, 健康检查url，平台会向该url发送GET请求，并根据返回的http status code是否是200来判断该应用是否健康  
timeout : int, 调用健康检查的时间间隔，单位为秒 | struct | 否  
log_file_paths | 用户自定义日志路径，该路径下的用户日志会被采集并自动回收 | [string] | 否  
  
修改dora.yaml的配置文件。如下是一个已经修改好的配置文件的内容：

    
    
    $ cat dora.yaml
    
    ---
    ufopname: doraufoptest
    verstr: v1 
    image: ufopdemo:v1 
    desc:  a demo
    flavor: C1M1 
    health_check:
      path: "/health" 
      timeout: 3 
    log_file_paths: [] 
    

在修改完dora.yaml后，运行命令：

    
    
    qdoractl release --config .
    

基于当前目录下配置文件dora.yaml，向服务器发出一个创建发布版本请求，  
以上面的实例配置为例，执行结果如下：

    
    
    $ qdoractl release --config .
    Build success
    Ufop:      doraufoptest
               Version:      v1
               Image:        ufopdemo:v1
               Flavor:       C1M1
               Desc:         a demo
    You can also see the release via run `qdoractl release doraufoptest -d`
    

创建成功后， 可以使用命令：

    
    
    qdoractl release <ufop> -d
    

查看该自定义数据处理所有发布版本的详细信息，参数说明：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufop | 自定义数据处理名称 | string | 是  
  
例如：

    
    
    $ qdoractl release doraufoptest -d
    Mode:             PRIVATE
    
    Releases:
    Version  Image  Flavor  Desc  Health Check Path  Health Check Timeout      LogFilePaths
    v1       ufopdemo:v1     C1M1    a demo    /health      3    []
    
    Deploys:
    Version      Region      Expect      Actual
    

## Step3 调整实例数

创建完一个发布版本后，运行如下命令调整该发布版本的运行实例数：

    
    
    qdoractl deploy <ufop> <release_version> --region <region_name> --expect <number>
    

参数、标志说明：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufop | 自定义数据处理名称 | string | 是  
release_version | 设置发布版本（与创建发布版本中dora.ymal中的verstr一致） | string | 是  
-r 或 --region | 设置设置实例部署的区域 （qdoractl region 可以列出所有可用区域） | string | 是  
-e 或 --expect | 设置期望实例数 | int | 是  
  
例如：

    
    
    $ qdoractl deploy doraufoptest v1 --region z0 --expect 2
    Deploy success
    Please run `qdoractl deploy doraufoptest --id deploy-aeff0dc6-b5de-11e6-88be-6c92bf2f06d8-1480387870674711630` to view you deploy
    Please run `qdoractl release doraufoptest v1 -d` to view you release
    

调整实例数命令成功后，命令行工具会提示运行命令：

    
    
    qdoractl deploy <ufop> --id <deployment_id>
    

查看这次实例调整的最终执行状况

参数、标志说明：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufop | 自定义数据处理名称 | string | 是  
-i 或 --id | 查看指定id的部署信息（调整实例数执行成功后，会返回一个id，可以根据此id来查询该次调整的最终执行情况） | string | 是  
  
示例执行该命令，输出如下：

    
    
    $ qdoractl deploy doraufoptest --id deploy-aeff0dc6-b5de-11e6-88be-6c92bf2f06d8-1480387870674711630
    
    Version      Expect      Region      Created    Id    Status     Message
    
    v1           2           z0          2016-11-29 10:51:10      deploy-aeff0dc6-b5de-11e6-88be-6c92bf2f06d8-1480387870674711630      RUNNING
    
    

# 3 如何使用自定义数据处理

自定义数据处理启动（运行实例数大于0）之后，就可以直接通过 URL
同步触发或者使用[持久化数据处理](https://developer.qiniu.com/dora/api/persistent-data-
processing-pfop)操作使用该自定义数据处理。

    
    
    http://<resource_url>?<ufop>
    

参数说明：

名称 | 说明 | 类型 | 必填  
---|---|---|---  
ufop | 自定义数据处理名称 | string | 是  
resource_url | 处理对象的地址 | string | 是  
  
以上内容是否对您有帮助？