云计算

Serverless无服务器微服务实践-移动应用包分发服务

背景

阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性,可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。进行正确的函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。而且,您只需要为代码实际运行所消耗的资源付费,代码未运行则不产生费用。 
 
移动应用的打包和分发呈现明显的峰谷效用,用户常常需要短时间内准备大量资源保障分发的实时性,完成分发后又需要及时释放资源,降低成本。这里我们提供一个 好玩的模板,我们帮助地更快搭建一个基于 函数计算构建无服务器架构的包分发服务,在开发运维效率,性能和成本间取得良好的平衡。

在分包过程中,下载/修改/上传是一个比较消耗资源的任务,需要消耗大量的计算/网络资源。并且分包任务只在应用发布新版本时才会发生,需要在缩短短的时间内完成。针对这种有明显波峰波谷的场景,非常适合使用函数计算来完成。更重要的是这个服务是具有弹性伸缩和高可用能力的。

apk分包简介

apk_

更多参考 函数计算—无服务器微服务实践-移动应用程序包分发服务

准备工作:

1.安装节点

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bashnvm install 8

2.安装趣味工具

npm install @alicloud/fun -g

fun工具的某些子命令可能会用到docker,所以你需要安装好docker,具体参考文档: Fun安装教程

3.apk包准备

在这个实验中,我们会使用一个示例的apk包,可以从这里下载 qq-v2.apk

下载 qq-v2.apk,上传到自己的oss bucket中:

apk_

快速开始:

1.通过fun模板生成项目骨架

使用 fun init命令可以快捷的将本模板项目初始化到本地,执行命令:

$ fun init -n apk https://github.com/coco-super/package-distribution-service-for-serverless
start cloning...
Cloning into '.fun-init-cache-2fc2d680-eeff-11e9-a930-6fd4d1ac6506'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 23 (delta 0), reused 18 (delta 0), pack-reused 0
Unpacking objects: 100% (23/23), done.
finish clone.
? Please input a oss bucket name? sunfeiyu
Start rendering template...
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/.funignore
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/pom.xml
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/src
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/src/main
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/src/main/java
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/src/main/java/example
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/src/main/java/example/App.java
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/target
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/target/classes
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/target/classes/example
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/target/classes/example/App.class
+ /Users/ellison/simple-fc-uncompress-service-for-oss/apk/template.yml
finish rendering template.

其中-n表示要作为文件夹生成的项目名称。替换值是fun- app。morefun init命令格式选项说明请参考云栖文章 开发函数计算的正确姿势-使用Fun Init初始化项目

执行 fun init后会提示:输入一个oss的存储桶,请注意oss Bucket是全球唯一的,如已经被占用了,请换一个新的名称或者一个已经创建好的(已经创建好的,请确保区域一致)。

ps:输入的内容和 apk包准备中提到的oss bucket name是同一个,本示例为: sunfeiyu

4.编译

在模版项目的根目录下执行 fun build命令编译:

$ fun build 
using template: template.yml
start building function dependencies without docker
building apk/apk
running task flow MavenTaskFlow
running task: MavenCompileTask
running task: MavenCopyDependencies
running task: CopyMavenArtifacts
Build Success
Built artifacts: .fun/build/artifacts
Built template: .fun/build/artifacts/template.yml
Tips for next step
======================
* Invoke Event Function: fun local invoke
* Invoke Http Function: fun local start
* Deploy Resources: fun deploy

关于Fun构建构建函数详细请参照云栖文章 开发函数计算的正确姿势-使用Fun构建构建函数

5.服务部署

在模版项目的的根目录下执行 fun deploy部署到云端。

$ fun deploy
using template: .fun/build/artifacts/template.yml
using region: cn-shanghai
using accountId: ***********8320
using accessKeyId: ***********mTN4
using timeout: 60
Waiting for service apk to be deployed...
        make sure role 'aliyunfcgeneratedrole-cn-shanghai-apk' is exist
        role 'aliyunfcgeneratedrole-cn-shanghai-apk' is already exist
        attaching policies AliyunOSSFullAccess to role: aliyunfcgeneratedrole-cn-shanghai-apk
        attached policies AliyunOSSFullAccess to role: aliyunfcgeneratedrole-cn-shanghai-apk
        Waiting for function apk to be deployed...
                Waiting for packaging function apk code...
                The function apk has been packaged. A total of 15 files files were compressed and the final size was 3.13 MB
        function apk deploy success
service apk deploy success

6.执行函数

提供两种方式:

  1. 登陆阿里云函数计算 控制台,手动执行。
_
  1. 项目根目录下 fun invoke apk命令早期调用:
$ fun invoke apk
using template: template.yml
========= FC invoke Logs begin =========
FC Invoke Start RequestId: 23f34cc4-0cd3-40e0-9a04-f6586cf29be6
2019-10-14 17:06:35.971 [INFO] [23f34cc4-0cd3-40e0-9a04-f6586cf29be6] cmd: java -jar /code/walle-cli-all.jar put -c aliyun-fc /tmp/input.apk /tmp/output.apk
2019-10-14 17:06:36.152 [INFO] [23f34cc4-0cd3-40e0-9a04-f6586cf29be6] Success!
FC Invoke End RequestId: 23f34cc4-0cd3-40e0-9a04-f6586cf29be6
Duration: 666.13 ms, Billed Duration: 700 ms, Memory Size: 1024 MB, Max Memory Used: 254.55 MB
========= FC invoke Logs end =========
FC Invoke Result:
Success

查看结果

登陆oss查看已经生成新的apk包:

_apk_

将oss中qq-v2-signed.apk下载到本地。

查看渠道信息是否写入:

~/Downloads                                                                                                                                             ⍉
$ java -jar /Users/ellison/Downloads/walle-cli-all.jar show qq-v2-signed.apk
/Users/ellison/Downloads/qq-v2-signed.apk : {channel=aliyun-fc}

渠道信息 {channel=aliyun-fc}已写入,成功!

参考阅读

  1. 娱乐(无服务器娱乐)工具
  2. Fun Init自定义模板

“ 阿里巴巴云原生关注微服务,无服务器,容器,服务网格等技术领域,聚焦云原生流行技术趋势,云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

我还没有学会写个人说明!

个性化海报在爱奇艺视频推荐场景中的实践

上一篇

当“别人家的孩子”遇上“华为云ModelArts”

下一篇

你也可能喜欢

Serverless无服务器微服务实践-移动应用包分发服务

长按储存图像,分享给朋友

ITPUB 每周精要将以邮件的形式发放至您的邮箱


微信扫一扫

微信扫一扫