Serverless 是各大云服務商提供出來的一種無服務的計算資源,為什么叫無服務呢,因為如果你使用 serverless,你只需要關注應用層,而無需關心底層基礎設施,無需運維,簡而言之,serverless 并不是真的無服務,而是關于有服務的不歸你管,云服務商幫你搞定,比如 Google,AWS 或者 TencentCloud,
關注點分離,好呀好!有了 serverless 以后只需要也只能關心業務了,這也不知是喜是憂,但你也無需過于擔心,這是對已有并且成熟的開發模式的挑戰,解決痛點有限,因此很多團隊對于替換為 serverless 也動力不足,
但是我仍然建議你學習 serverless,畢竟各大云廠商對于 serverless 有很多免費額度可以讓你薅羊毛,對于個人開發者利好,
Serverless Framework
serverless 是基于各大云服務商的產品,每一個云廠商對于 serverless 都有一套自己的 API,為了能夠兼容這些 API,為了讓你的代碼 Write Once, Run Everywhere,于是 serverless framework 誕生了,
通常認為 serverless = faas + baas,然而 serverless framework 只兼容到了 faas,對于 baas,如各家提供的資料存盤服務,要做到兼容還是很難,
快速開始
serverless framework 與騰訊云的云函式來開始一個 hello world 吧!
$ npm install -g serverless
$ mkdir hello
$ cd hello
$ serverless create --template tencent-nodejs --name hello
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.67.0
-------'
Serverless: Successfully generated boilerplate for template: "tencent-nodejs"
此時在 hello 目錄自動生成了關于 serverless 在騰訊云的 hello, world 版,由于缺少關于騰訊云的 plugin 需要首先裝包
$ npm i
簡述
serverless.yaml
serverless.yaml 是 serverless framework 的核心,是一個 sls 服務的資源組態檔,如果把 sls 等同于 faas + baas,那么 faas 與 baas 的配置都在這里,
service: hello
# 云廠商的資訊,如 aws/google/aliyun/tencent
provider:
name: tencent
runtime: Nodejs8.9 # Nodejs 版本號
credentials: ~/credentials
plugins:
- serverless-tencent-scf # 騰訊云對 sls 的適配
functions:
hello_world: # 函式名
handler: index.main_handler # 該函式所呼叫的函式
index.js
exports.main_handler = (event, context, callback) => {
callback(null, 'Hello World');
};
index.js 中是 faas 中的核心,function,在 callback 中來回呼你所需的資料,
部署
使用 sls deploy 打包資源并部署到騰訊云,此時需要你在騰訊云的憑證資訊,你可以通過與騰訊云系結的微信掃碼授權,相比其他廠商需要手動維護憑證資訊,還是很方便的,
# 其中 sls 是 serverless 的簡寫
$ sls deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading service package to cos[sls-cloudfunction-ap-guangzhou]. hello-dev-KamjFZ-2020-04-15-21-47-11.zip
Serverless: Uploaded package successful /Users/xiange/Documents/hello/.serverless/hello.zip
Serverless: Creating function hello-dev-hello_world
Serverless: Updating code...
Serverless: Updating configure...
Serverless: Created function hello-dev-hello_world
Serverless: Setting tags for function hello-dev-hello_world
Serverless: Creating trigger for function hello-dev-hello_world
Serverless: Deployed function hello-dev-hello_world successful
Serverless: Service Information
service: hello
stage: dev
region: ap-guangzhou
stack: hello-dev
resources: 1
functions: hello_world: hello-dev-hello_world
# 如果需要部署到生產環境
$ sls deploy --stage production
稍等一分鐘,就可以看到部署成功的資訊,
函式呼叫
本地函式可以很簡單地通過呼叫函式名來執行,serverless 也可以通過 sls invoke 來呼叫函式,
$ sls invoke --function hello_world
Serverless:
"Hello World"
----------
Log:
START RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac
Event RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac
END RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac
Report RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac Duration:64ms Memory:128MB MemUsage:21.8125MB
日志與監控
serverless 號稱 noops,很大程度上是由于少了 log 及 metrics 的基礎設施搭建,使用 sls logs 與 sls metrics 可以獲取相關資訊,但是豐富度及可定制化就完全不如 kubernetes 運維了,
$ sls logs
Serverless: {
"FunctionName": "hello-dev-hello_world",
"RetMsg": "\"Hello World\"",
"RequestId": "fc72271f-eede-4dbb-8315-f24045597db7",
"StartTime": "2020-04-15 21:48:55",
"RetCode": 0,
"InvokeFinished": 1,
"Duration": 1,
"BillDuration": 1,
"MemUsage": 74870780,
"Log": "START RequestId: fc72271f-eede-4dbb-8315-f24045597db7\nEvent RequestId: fc72271f-eede-4dbb-8315-f24045597db7\n2020-04-15T13:48:55.344Z\tfc72271f-eede-4dbb-8315-f24045597db7\t{}\n \nEND RequestId: fc72271f-eede-4dbb-8315-f24045597db7\nReport RequestId: fc72271f-eede-4dbb-8315-f24045597db7 Duration:1ms Memory:128MB MemUsage:71.402344MB",
"Level": "",
"Source": ""
}
Serverless: {
"FunctionName": "hello-dev-hello_world",
"RetMsg": "\"Hello World\"",
"RequestId": "62b5760e-5545-4316-bef6-423d4b568396",
"StartTime": "2020-04-15 21:48:45",
"RetCode": 0,
"InvokeFinished": 1,
"Duration": 2,
"BillDuration": 2,
"MemUsage": 74870780,
"Log": "START RequestId: 62b5760e-5545-4316-bef6-423d4b568396\nEvent RequestId: 62b5760e-5545-4316-bef6-423d4b568396\n2020-04-15T13:48:47.995Z\t62b5760e-5545-4316-bef6-423d4b568396\t{}\n \nEND RequestId: 62b5760e-5545-4316-bef6-423d4b568396\nReport RequestId: 62b5760e-5545-4316-bef6-423d4b568396 Duration:2ms Memory:128MB MemUsage:71.402344MB",
"Level": "",
"Source": ""
}
$ sls metrics
Serverless: Service wide metrics
2020-04-14 22:09:45 - 2020-04-15 22:09:45
Service:
Invocations: 5
Outflows: 0
Errors: 0
Duration(avg.): 7.3 ms
Functions:
hello-dev-hello_world:
Invocations: 5
Outflows: 0
Errors: 0
Duration(avg.): 7.3 ms
小結
從本篇文章,可以大概知道如何在騰訊云初建一個 serverless 函式,并且知道了如何執行并且呼叫它,而關于 sls 的原理,如服務編排以及容器化,可以再繼續深入學習,
One More Thing
3 秒你能做什么?喝一口水,看一封郵件,還是 —— 部署一個完整的 Serverless 應用?
復制鏈接至 PC 瀏覽器訪問:https://serverless.cloud.tencent.com/deploy/express
3 秒極速部署,立即體驗史上最快的 Serverless HTTP 實戰開發!
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您可以在 最佳實踐 里體驗更多關于 Serverless 應用的開發!
推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3917.html
標籤:其他
上一篇:離線及實時實操架構
