Serverless 微服务实践-移动应用包分发服务
背景
阿里云函數計算是事件驅動的全托管計算服務。通過函數計算,您無需管理服務器等基礎設施,只需編寫代碼并上傳。函數計算會為您準備好計算資源,以彈性、可靠的方式運行您的代碼,并提供日志查詢、性能監控、報警等功能。借助于函數計算,您可以快速構建任何類型的應用和服務,無需管理和運維。而且,您只需要為代碼實際運行所消耗的資源付費,代碼未運行則不產生費用。
移動應用的打包和分發呈現明顯的峰谷效用,用戶常常需要短時間內準備大量資源保障分發的實時性,完成分發后又需要及時釋放資源,降低成本。這里我們提供一個 [fun](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://github.com/alibaba/funcraft) 模板,幫助我們更快地搭建一個基于[函數計算](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://helpcdn.aliyun.com/product/50980.html)構建 Serverless 架構的包分發服務,在開發運維效率,性能和成本間取得良好的平衡。
在分包過程中,下載/修改/上傳是一個比較消耗資源的任務,需要消耗大量的計算/網絡資源。并且分包任務只在應用發布新版本時才會發生,需要在盡可能短的時間內完成。針對這種有明顯波峰波谷的場景,非常適合使用函數計算來完成。更重要的是這個服務是具有彈性伸縮和高可用能力的。
apk 分包簡介
更多參考[函數計算–Serverless 微服務實踐-移動應用包分發服務](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://yq.aliyun.com/articles/699972)。
準備工作:
1.安裝 node
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash nvm install 82.安裝 fun 工具
npm install @alicloud/fun -gfun 工具的某些子命令可能會用到 docker,所以你需要安裝好 docker,具體參考文檔:[Fun 安裝教程](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://github.com/aliyun/fun/blob/master/docs/usage/installation-zh.md)。
3.apk 包準備
在這個實驗中,我們會使用一個示例的 apk 包,可以從這里下載 qq-v2.apk。
下載 qq-v2.apk ,上傳到自己的 oss bucket中:
快速開始:
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。更多fun init 命令格式選項說明請參考云棲文章[開發函數計算的正確姿勢 —— 使用 Fun Init 初始化項目](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://yq.aliyun.com/articles/674363)。
執行 fun init后會提示:輸入一個 oss 的 bucket,注意 oss Bucket 是全球唯一的,如已經被占用了,請換一個新的名稱或者一個已經創建好的(已經創建好的,請確保 region 一致)。
ps: 輸入的內容和 apk 包準備中提到的 oss bucket name 是同一個,本示例為:sunfeiyu
4. 編譯
在模版項目的根目錄下執行 fun build 命令編譯:
$ fun build using template: template.yml start building function dependencies without dockerbuilding apk/apk running task flow MavenTaskFlow running task: MavenCompileTask running task: MavenCopyDependencies running task: CopyMavenArtifactsBuild SuccessBuilt artifacts: .fun/build/artifacts Built template: .fun/build/artifacts/template.ymlTips for next step ====================== * Invoke Event Function: fun local invoke * Invoke Http Function: fun local start * Deploy Resources: fun deploy關于 Fun build 構建函數詳細請參照云棲文章 [開發函數計算的正確姿勢 —— 使用 Fun Build 構建函數](https://statistics.functioncompute.com/?title=Serverless 微服務實踐-移動應用包分發服務(Fun 3.0 升級版)&author=孫飛宇&src=&url=https://yq.aliyun.com/articles/719102)。
5.服務部署
在模版項目的的根目錄下執行 fun deploy 部署到云端。
$ fun deploy using template: .fun/build/artifacts/template.yml using region: cn-shanghai using accountId: ***********8320 using accessKeyId: ***********mTN4 using timeout: 60Waiting for service apk to be deployed...make sure role 'aliyunfcgeneratedrole-cn-shanghai-apk' is existrole 'aliyunfcgeneratedrole-cn-shanghai-apk' is already existattaching policies AliyunOSSFullAccess to role: aliyunfcgeneratedrole-cn-shanghai-apkattached policies AliyunOSSFullAccess to role: aliyunfcgeneratedrole-cn-shanghai-apkWaiting 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 MBfunction apk deploy success service apk deploy success6.執行函數
提供兩種方式:
查看結果
登陸 oss 查看已經生成新的 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} 已寫入,成功!
參考閱讀
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術圈。”
總結
以上是生活随笔為你收集整理的Serverless 微服务实践-移动应用包分发服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在一起 10 年了,这封信你一定要收下
- 下一篇: 2020 云原生技术 7 大领域趋势全预