與 Serverless 的一次近距離接觸
- 如何理解 Serverless
Web 開發工程師與 Serverless 的第一次接觸
雲計算環境下的 Serverless
- 實例 Demo 展示
正文:
如何理解 Serverless
Serverless 是基於互聯網的系統,系統中的各個服務模塊不使用常規的服務進程,而是使用第三方的服務。
Serverless 可以讓演算法工程師把注意力集中到代碼與演算法上,而不是伺服器部署、擴展性的保證,更不需要關心基礎設施和服務架構。
正如選擇 Python 作為主語言的原因是它的語法糖、泛型夠簡單,我可以把更多的注意力集中在業務邏輯的整理和抽象上面
具體一點:
Serverless 的功能以 function 為最小的單元(FaaS · Function-as-a-Service),用戶訪問某個 function 時啟動一個容器執行 function 內的程序,執行結束回收這個容器,整個過程快至幾個毫秒就能完成。
Web 開發工程師與 Serverless 的第一次接觸
想像一下,你是一名 Web 開發工程師,你需要做一個單頁面應用,上傳一張圖並在幾秒後獲得一張梵高風格化的圖,像這樣:
Google 一下:
alexjc/neural-doodle
你好,我叫星辰,如果我告訴你,我還需要面向 Google 編程,你會藉此『證明』我不是一個『真正的』工程師。
這就尷尬了,不不...是這就簡單了
python doodle.py --style samples/Monet.jpg n --output samples/Coastline.png n --device=cpu --iterations=40n
Web 化對使用 Python 語言的 Web 工程師使用起來都不是事,理一遍邏輯:
- 瀏覽器發請求給服務端,body 是一張圖片二進位流;
- 服務端從 body 中取出二進位流,轉成圖片,調用 doodle.py 中的方法,轉換風格存儲之並返回存儲位置;
- 瀏覽器按位置請求圖片並展示之。
共三步,So easy!
下面,我們來試試 Serverless 的方式,理一遍邏輯:
- 將風格轉換的 function 製成一個 Docker 鏡像,上傳之後記住鏡像 ID;
- 將瀏覽器傳來的圖片和鏡像 ID 傳給 API-Gateway;
- API-Gateway 根據參數啟動指定鏡像的容器,並將圖片交給它,然後容器返迴風格轉換後的圖片;
- 接收並展示之
共四步,還多了一步,製作 Docker 鏡像什麼的,好麻煩,為什麼選擇後者呢?
因為傳統的方式:
- 需要一個 Server
- 需要自己部署
- 需要考慮負載
- 需要業務日誌
- 需要運維與監控
Serverless 的方式就高大上了:
- 數萬核級的計算能力,自動高效完成計算分布
- 只需關注業務演算法及任務編排,減輕運維負擔(資源部署、環境配置等)
- 以Docker方式打包自定義演算法,支持API方式編排、調用計算服務,易於集成到應用的業務流程
- 按實際消耗的計算資源計費,無需付出非計算資源(內存、磁碟)的費用,無需擔心浪費
都別說話,看我一頓操作 ↓
雲計算環境下的 Serverless (UCloud UGC)
- 創建私有倉庫(Web 界面)
- 登錄鏡像倉庫(CLI)
- 製作 HelloWorld Docker 鏡像(CLI)
- 上傳鏡像(CLI)
- 查看鏡像信息(Web 界面)
- 告警模板配置 (Web 界面)
- 發布任務(使用官方提供的 Python sdk)
- 查看任務統計(Web 界面)
- 查看監控(Web 界面)
>> 創建私有倉庫
https://consolev3.ucloud.cn/ugc/imageBucket>> 登錄鏡像倉庫
docker login cn-bj2.ugchub.service.ucloud.cnn
注意:使用 UCloud 賬號登錄即可,點擊註冊
>> 製作 helloworld Docker 鏡像(CLI)
docker build -t cn-bj2.ugchub.service.ucloud.cn/demo/helloworld:first .n
這裡使用最簡單的 HelloWorld Docker 鏡像來演示
Dockerfile
FROM centos:latestnCOPY ./helloworld.py /usr/bin/HelloWorld.pynRUN chmod +x /usr/bin/HelloWorld.pynRUN echo "export TERM=xterm" >> /root/.bashrcnENTRYPOINT ["/usr/bin/helloworld.py"]n
HelloWorld.py
#!/usr/bin/env pythonnimport sysnprint("hello world")nbody = sys.stdin.read()nsys.stderr.write(str(sys.argv[1:]))nwith open("/tmp/result", "w") as f:n f.write(body)n
>> 上傳鏡像(CLI)
docker push cn-bj2.ugchub.service.ucloud.cn/demo/helloworld:firstn
>> 發布任務(使用官方提供的 Python sdk)目前包含請求超時和失敗兩個模板
python example_SubmitTaskAndGetResult.pyn
注意配置一下自己賬號的公私鑰和你剛創建的 Docker image ID,具體看這個例子
>> 查看任務統計(Web 界面)這裡要注意,API-Gateway 的域名只有使用 UCloud 雲主機 UHost 才能解析
我如何使用 Django + Vue.js 快速構建項目 其中的第九步提到了如何創建 UHost 雲主機
包含調用次數,成功率,返回結果,還有花費的CPU時間等信息
https://consolev3.ucloud.cn/ugc/imageTask
>> 查看監控(Web 界面)實例Demo展示
Demo展示:圖片水印與風格化 - 知乎專欄 (此文牢騷有點多,直接看圖)
最後
希望您通過本文了解 Serverless 與 UCloud,歡迎關注 我
So,如果你是公司的研發 Leader ,合適的話,你會擁抱 Serverless 嗎?如果是創業公司呢?
推薦閱讀:
※深入淺出新一代雲網路——VPC中的那些功能與基於OpenStack Neutron的實現(三)-路由與隧道
※數字化轉型加速 華為要建一個怎樣的生態圈?
※Google Drive 支持增量同步嗎?國內使用速度如何?
※從跑馬圈地到深耕細作 雲計算競爭態勢悄然轉變