human: 如何处理七牛云的智能多媒体服务使用说明

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

#  使用说明

最近更新时间: 2019-08-26 18:48:46

当七牛既有的数据处理功能不能满足用户需求时，用户可以[添加自定义数据处理资源](https://developer.qiniu.com/dora/manual/platform-
user-
guide)，然后运行自定义的数据处理程序，以处理七牛云上的数据。用户自定义的数据处理使用方式和七牛既有数据处理的方式完全一致，也支持管道处理、持久化、预处理操作方式，同时用户添加到自定义数据处理的功能能够与七牛的数据处理功能结合一起使用。

使用自定义数据处理可以将您的计算搬移至离您数据最近的地方，以最优的访问速度和最短的时间得到处理结果。

**特性**

  * 轻量级的应用
  * 与七牛现有的数据处理应用无缝连接
  * 自定义数据处理也支持管道处理、持久化、预处理操作等
  * 部署容易，可根据负载需要调节计算资源
  * 使用简单灵活，成本较低
  * 使用了内核级别的资源隔离和访问控制，数据安全可靠

**产品特点**

  * 零运维
  * 随时弹性伸缩
  * 按需使用，按需计费
  * 支持主流开发语言，提供一键部署服务

**运行数据安全**

由于使用了内核级别的资源隔离和访问控制，您无需担心您的运行实例及其相关数据会被相同物理主机上的其他实例非法访问。

**建议和注意事项**

一个理想的自定义数据处理应用的程序实例应当是无状态的，因为一个实例在被重启后会丢失前一次启动的运行数据（包括持久化数据）。另外，自定义数据处理可以访问外网。

**使用限制**

  * 单用户最大应用数：30个，如果需要更多，请[提交工单](https://support.qiniu.com/question)申请。
  * 单用户单个应用版本占用存储空间：20G

**计费方式**

资源配置价格 - 按需使用

- | 内存 | CPU | 系统盘 | GPU | 数据盘 | 按需￥/每小时 | 月计（按30天计算）  
---|---|---|---|---|---|---|---  
C1M1 | 1GB | 1 Core | 20GB | 0 | 0GB | 0.0815 | 58.68  
C2M2 | 2GB | 2 Core | 20GB | 0 | 0GB | 0.1631 | 117.432  
C2M4 | 4GB | 2 Core | 20GB | 0 | 0GB | 0.1671 | 120.312  
C4M4 | 4GB | 4 Core | 20GB | 0 | 0GB | 0.3081 | 221.832  
C4M8 | 8GB | 4 Core | 20GB | 0 | 0GB | 0.3161 | 227.592  
C8M8 | 8GB | 8 Core | 20GB | 0 | 0GB | 0.6161 | 443.592  
C8M16 | 16GB | 8 Core | 20GB | 0 | 0GB | 0.6321 | 455.112  
C16M16 | 16GB | 16 Core | 20GB | 0 | 0GB | 2.0875 | 1503  
C16M32 | 32GB | 16 Core | 20GB | 0 | 0GB | 2.1451 | 1544.472  
  
**注意：** C1M1的情况下，标准用户 和 高级用户 ，有 750 小时/月的免费额度。

# 最佳实践

此章节旨在帮助您从七牛自定义数据处理平台获得最大收益和满意度。

## 工作流

数据处理是自定义数据处理的核心功能和价值，因此，每个自定义数据处理需要做的事情非常简单，即专注数据处理本身：

  * 获取输入数据
  * 处理输入数据
  * 输出处理结果

正是基于如此简单的单元结构，七牛才能使用特有的管道机制自由地将多个数据处理／自定义数据处理的输入和输出像搭积木一样串起来，获得多样化、个性化的数据处理结果。

## 命名规则

自定义数据处理的命名是全局的，和七牛既有的数据处理处于相同的名字空间。因此，用户当前无法注册：

  * 七牛既有的数据处理名
  * 其他用户已经注册的自定义数据处理名

命名规则：

  * UTF-8 编码
  * 长度限制：[4, 20]
  * 必须由小写字母、数字、减号、下划线中的一种或多种类型的字符组合而成

## 建议

  * 如果您已经拥有了一个稳定运行的版本（镜像），在您准备发布一款新的版本时，建议您可以采用灰度测试的方式来平滑过度，例如：5个实例中，3个运行旧版本，2个运行新版本。如果采用灰度测试方式，您应当注意不同版本的功能和输出应当是一致，否则同一个用户多次请求您的应用时会得到不一致的结果。

  * 用户默认新建的自定义数据处理应用都是私有的，私有的含义是：该自定义数据处理应用只能被该应用创建的用户所请求调用，只有应用发布（需要发布应用，请[提交工单](https://support.qiniu.com/question)资讯详情）到应用市场后，该自定义数据处理应用才能被其他用户使用。

# 应用实例

实例是进行数据处理的基本单位，当用户请求达到自定义数据处理平台，自定义数据处理平台会将请求重定向到你的实例池中的某一个实例，在你的实例中处理过后，请求会返回给用户。因此你需要为实例指定其处理数据的逻辑，而处理数据的逻辑是通过镜像来表现，有关如何构建镜像，请参考发布版本和镜像。

**发布版本**

发布版本需要包含可运行的docker镜像和定义自定义数据处理运行的资源配置、也可以设置日志收集地址和健康检查配置。

**调整实例数**

您可以在实例管理界面手动对发布版本运行实例的数量进行调整，普通用户默认的每个应用在每个区域的最大实例数量是50个，如果需要更多，请[提交工单](https://support.qiniu.com/question)申请。

**自动伸缩**

您可以通过开启自动伸缩功能，可根据实例运行负载的情况自动弹性扩容和缩容实例数，从而实例按需分配，降低成本。该功能目前只支持华东区域。

目前提供以下四种自动伸缩策略：

  * CPU平均使用量
  * 内存平均使用量
  * 单实例平均请求数
  * 定时扩缩容

# 监控和统计

## 监控

为了方便用户了解自己启用实例的运行情况和健康状态等信息，七牛自定义数据处理平台会为每个用户启用的实例进行状态监控，您可以根据这些信息了解实例池的负载情况，并根据需要调解实例的数量。

监控服务有以下特性：

  * 监控服务延时较低，您可以看到最近5分钟之前的数据。
  * 监控的数据保留7天。
  * 目前提供三种监控维度：
    * CPU占用率
    * 内存使用量
    * 请求次数

## 统计

七牛会统计每一个自定义数据处理应用的请求次数和响应时间，您可以根据这些信息了解你的自定义数据处理应用被调用的情况。

统计服务有以下特性：

  * 统计服务从创建自定义数据处理应用开始进行统计。
  * 次数统计包括成功的调用次数和失败的调用次数。
  * 统计服务提供4种范围的选择：
    * 6小时
    * 1天
    * 1周
    * 自定义时间范围（1周内）
  * 统计服务略有延迟。

# 发布版本和镜像

## 发布版本

发布版本是应用开发自定义数据处理中一个非常重要的概念，每当您上传了一个镜像，都将创建一个新的版本。

一个典型的使用流程是:

  * 上传Docker镜像
  * 用户填写发布版本信息
  * 调整实例数

## 镜像

自定义数据处理程序需要是一个基于Linux构建的，可运行的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 请求，并返回该程序当前的健康状态（可选）

服务程序处理数据的工作流为：

  * 从接收到的 HTTP POST 请求中获取待处理文件的信息（可以通过URL参数传入也可以通过Body传入）
  * 从接收到的 HTTP POST 请求中获取参数信息
  * 根据自定义的方式处理数据
  * 将处理结果以 HTTP Response 的方式返回

如何开发自定义数据处理程序，请参考[快速入门](http://developer.qiniu.com/article/dora/ufop/v2/ufop-
fast.html#develop)文档。  

## 示例

镜像的构建和验证可以参考[Demo](https://github.com/qiniu-ufop/ufop-golang-demo)。

# 问题排查

提交了版本并实例调整数之后，实例数等待很久也没有变化？

可能的原因如下：

  * 用户的Dockerfile没有指定[ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#/entrypoint) 或 [CMD](https://docs.docker.com/engine/reference/builder/#/cmd)，建议用户先在本地调试通过后，再上传镜像。

以上内容是否对您有帮助？