Skip to content

Instantly share code, notes, and snippets.

@lintianzhi
Last active August 29, 2015 14:14
Show Gist options
  • Save lintianzhi/ad2b9890d76ba9055a2d to your computer and use it in GitHub Desktop.
Save lintianzhi/ad2b9890d76ba9055a2d to your computer and use it in GitHub Desktop.
ufop-step-by-step-v0.2

Getting Started with Ufop on Qiniu

====

1. Introduction

这个教程的目的是快速上手部署和使用一个 Ufop 的应用。

当然这个教程开始前需要做一下的准备:

reg  // 注册
while(reg)
	build          // 上传和编译
	check version  // 切换版本
	resize/start   // 启动运行实例
	upgrade        // 升级实例 

2. 注册一个Ufop

这个步骤中,首先需要通过 qufopctl 工具登陆您的账号,登陆可以使用下面两种方式:

$ qufopctl login <Username> <Passwd>

或者

$ qufopctl login <AccessKey> <SecretKey>

其中,<Username><Passwd>分别替换成您的用户名和密码,<AccessKey><SecretKey>可以在您的账号设置中找到。登陆之后用一下的命令可以注册一个 Ufop 操作:

$ qufopctl reg ufoptest_v2 -mode 2 -desc 'it is another test!'
Ufop name:	     ufoptest_v2
Access mode:	 PRIVATE
Description:	 it is a test!

该命令注册了一个名为 ufoptest_v2 的 ufop 操作,其中模式为私有,描述为 it is another test!。具体命令中的参数可以参考 Ufop 完全操作指南

3. 制作程序包

Ufop 注册完成之后,您还需要提供一个监听9100端口二进制服务程序和一个启动脚本形成的程序包。 其中二进制服务程序即为您实现的自定义的 fop 操作。具体的协议规则参考 Ufop 完全操作指南

3.1 提供二进制服务程序

下面提供一个 golang 实现返回文件 mimetype 的程序:ufoptest.go。将其编译为 Linux 64位 二进制服务程序 ufoptest_v2:(该 demo 需要 golang 编译 Linux 64位环境,或者直接使用我们提供的程序)

$ GOOS=linux GOARCH=amd64 go build ufoptest.go
$ mv ufoptest ufoptest_v2
$ ls -l ufoptest_v2
-rwxr-xr-x  1 user  staff  5996192 Jan 17 19:25 ufoptest_v2

ufoptest即为已经编译好的二进制服务程序。

3.2 提供启动脚本

你还需要提供一个名为ufop.yaml的启动脚本,该脚本通常需要完成对服务程序的环境配置工作和程序启动工作。脚本内容如下:

image: ubuntu
build_script:
	- mv $RESOURCE/* .
	- chmod +x ufoptest_v2
run: ./ufoptest_v2

保存即可。具体参数规格可以参考Ufop 完全操作指南

3.3 上传程序

将生成的二进制服务程序和启动脚本打成放在同一程序目录结构下,譬如放在ufop_v2目录下。结构如下:

$ tree
.
└── ufop_v2
    ├── ufop.yaml
    └── ufoptest_v2

然后通过 qufopctl 的 build 参数上传程序目录:

$ qufopctl build ufoptest_v2 -dir ufop_v2
checking files ...
getting upload token ...
making .tar file ...
uploading .tar file ...
upload .tar succeed, please check image info and switch image version.

这时说明程序目录已经上传成功。可以通过 qufopctl 的 imageinfo 查询当前 ufop 的版本的 build 信息。

$ qufopctl imageinfo ufoptest_v2
version: 1
state: build success
createAt: 2015-01-21 11:18:25.676351549 +0800 CST

3.4 切换程序版本

通过 qufopctl 的 info 参数可以看到 Ufop 操作当前的状态:

$ qufopctl info ufoptest_v2
Ufop name:	     ufoptest_v2
Owner:		     1380307171
Version:	     0
Access mode:	 PRIVATE
Description:	 it is another test!
Create time:	 1970-01-01 08:00:00 +0800 CST
Instance num:	 2
Max instanceNum: 5
Flavor:	         default
Access list:	 1380307171

可以看到版本号仍然为 0,表示 Ufop 本身的版本号并未随着 build 操作而升级,所以我们需要做一个版本切换的操作:

$ qufopctl ufopver ufoptest_v2 -c 1

此时再查询 Ufop 的 info 时,会发现 Ufop 的版本号已经升级到版本1.

4. 启动 Ufop 运行实例

在完成绑定的动作后,由于还没有实例运行,因此 Ufop 还未处于未启动状态,下面通过 qufopctl 工具添加两个 Ufop 运行实例并启动 Ufop :

$ qufopctl resize ufoptest_v2 -num 2
Resize instance num from 2 to 2.

然后可以通过一下啊命令查询刚刚部署的 ufoptest_v2 的基本信息:

$ qufopctl info ufoptest_v2
Ufop name:	     ufoptest_v2
Owner:		     1380307171
Version:	     1
Access mode:	 PRIVATE
Description:	 it is another test!
Create time:	 1970-01-01 08:00:00 +0800 CST
Instance num:	 2
Max instanceNum: 5
Flavor:	         default
Access list:	 1380307171

通过下面的命令可以查询到ufoptest运行实例的基本状态

$ qufopctl state ufoptest_v2
instance 1	[state] Running
instance 2	[state] Running

5. 使用

Ufop 启动了之后,就可以直接通过 URL 同步触发或者使用持久化处理操作使用该 Ufop。

http://itisatest.qiniudn.com/gogopher.jpg?ufoptest_v2

通过上面的 URL 就会返回该图片的 mimetype 类型 image/jpeg

6. 版本切换

如果绑定的 Ufop 代码或者配置文件在本地做了修改,那么就需要进行这个这个操作。

6.1 重新上传程序

如果在程序目录下修改或者添加了内容,只需要重新调用 build 命令,即可重新上传。

$ qufopctl build ufoptest_v2 -dir ufop_v2
checking files ...
getting upload token ...
making .tar file ...
uploading .tar file ...
upload .tar succeed, please check image info and switch image version.

现在调用 imageinfo 命令来查询 ufoptest_v2 这个 Ufop 当前的版本状态,会多一个新的 +1 版本号:

$ qufopctl imageinfo ufoptest_v2
version: 2
state: build success
createAt: 2015-01-21 14:16:55.733727952 +0800 CST

version: 1
state: build success
createAt: 2015-01-21 11:18:25.676351549 +0800 CST

但此时,运行在当前实例上的程序还是version 1,所以这里需要切换程序版本,同时升级运行实例。

$ qufopctl ufopver ufoptest_v2 -c 2
$ qufopctl upgrade ufoptest_v2 -range 1:2

两条命令,将 Ufop 操作版本号切换到version 2,同时升级两个运行实例上 Ufop 程序。

现在重新查看 ufoptest_v2的状态,可以看到,版本号已经升级为2.

$ qufopctl info ufoptest_v2
Ufop name:	     ufoptest_v2
Owner:		     1380307171
Version:	     2
Access mode:	 PRIVATE
Description:	 it is another test!
Create time:	 1970-01-01 08:00:00 +0800 CST
Instance num:	 2
Max instanceNum: 5
Flavor:	         default
Access list:	 1380307171

这时,可以重复步骤5,进行对升级后的 Ufop 操作进行调用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment