-
1 # 老生新談
-
2 # Aceyclee
Serverless 的概念或應用場景我們以前講過很多,這裡不再冗述。概括性地講 —— Serverless 的內涵就是對全部底層資源和運維工作的封裝,讓開發者更專注於業務邏輯。
完備的基礎性文章推薦閱讀這兩篇:
Serverless 基本概念入門 https://www.toutiao.com/i6794284259960947203/ Serverless 的執行原理與元件架構https://www.toutiao.com/i6794713387138810371/本回答嘗試從出圈的角度,以更接地氣的方式聊聊 Serverless。
先講個故事,疫情期間在家辦公,大家肯定沒少做飯,自己做飯才體會到家務不易,你需要:買菜買鍋、處理食材、煎炒蒸煮、最後洗碗。
聽起來是不是還挺像軟體開發?你需要有云伺服器、後臺開發、前端開發、還有運維。你想著,要是我能只翻兩下鏟子,然後就能吃飯那該多好。
巧了,有一些商家就提供了這種服務,幫你準備好了鍋、洗乾淨的食材、專業的廚師指點,你只要進去翻兩下鏟子,就能煮一頓精美的飯食!而且不用洗碗。
對應到軟體開發,開發者只需要關注業務邏輯(炒菜),而底層資源和運維工作(鍋碗瓢盆、食材處理)都不用再操心。終於到了正式復工的時間,你不用再自己做飯,新買的廚具就閒置了。你回想起昨天在商圈裡的美好體驗,家裡的廚具要是也在能用的時候付費,不用不收費多好啊。
嘿嘿,Serverless 亦如此,按水電般計費,當部署在其上的函式執行時才收費。所以回到題目中來,Serverless 本身是雲計算相關技術,並非前端技術,為何前端要關注 Serverless 呢?
答案很簡單 —— 解放生產力。
你的廚房裡已經準備好了所有廚具和處理好的食材,你現在只需要關心火候認真炒菜,成為美食博主指日可待。也就是文首所說的 —— 開發者能更專注於業務邏輯,其他的底層資源和運維工作已經全部封裝好了。
Talk is cheap, show you the code先給大家展示一個基於 Serverless 構建 docsify 文件的 demo。
原文連結:https://www.toutiao.com/i6795809244907045379/再進一步,我們演示個 Fullstack Application。該專案藉助 Serverless 社群現有的 @serverless/tencent-express 和 @serverless/tencent-website 元件來完成。
下面是一張簡單的元件依賴圖:
在開始所有步驟前,需執行 命令,全域性安裝 。1. 準備
新建專案目錄 ,在該專案目錄下新增 和 目錄。然後新增 和 配置檔案,專案目錄結構如下:
├── README.md // 專案說明文件├── api // Restful api 後端服務├── dashboard // 前端頁面├── .env // 騰訊雲相關鑑權引數:TENCENT_APP_ID,TENCENT_SECRET_ID,TENCENT_SECRET_KEY└── serverless.yml // serverless 檔案2. 後端服務開發
進入目錄 `api`,新增 `app.js` 檔案,編寫 `express` 服務程式碼,這裡先新增一個路由 `/`,並返回當前伺服器時間:```jsconst express = require("express")const cors = require("cors")const app = express()app.use(cors())app.get("/", (req, res) => {res.send(JSON.stringfy({ message: `Server time: ${new Date().toString()}` }))})module.exports = app```3. 前端頁面開發
本案例使用的是 `Vue.js` + `Parcel` 的前端模板,當然你可以使用任何前端專案腳手架,比如 Vue.js 官方推薦的 [Vue CLI](https://github.com/vuejs/vue-cli) 生成的專案。進入 `dashboard` 目錄,編寫入口檔案 `src/index.js`:```js// 這裡初始是沒有 env.js 模組的,第一次部署後會自動生成require("../env")const Vue = require("vue")module.exports = new Vue({el: "#root",data: {message: "Click me!",isVisible: true,},methods: {async queryServer() {const response = await fetch(window.env.apiUrl)const result = await response.json()this.message = result.message},},})```4. 配置
前後端程式碼都準備好了,再簡單配置下 `serverless.yml` 檔案了:```yamlname: fullstack-application-vuefrontend:component: "@serverless/tencent-website"# inputs 為 @serverless/tencent-website 元件的輸入# 具體配置說明參考:https://github.com/serverless-components/tencent-website/blob/master/docs/configure.mdinputs:code:src: distroot: frontendhook: npm run buildenv:# 下面的 API服務部署後,獲取對應的 api 請求路徑apiUrl: ${api.url}api:component: "@serverless/tencent-express"# inputs 為 @serverless/tencent-express 元件的輸入# 具體配置說明參考:https://github.com/serverless-components/tencent-express/blob/master/docs/configure.mdinputs:code: ./apifunctionName: fullstack-vue-apiapigatewayConf:protocol: https```5. 部署
部署時,只需要執行 `serverless` 命令就行,當然如果你需要檢視部署中的 `DEBUG` 資訊,還需要加上 `--debug` 引數,如下:```$ serverless# or$ serverless --debug```最後終端會 `balabalabala~`, 看到綠色的`done`就行了。
既然是全棧,怎麼少得了資料庫的讀寫呢?
讀者可移步作者原文繼續閱讀:《基於 Serverless Component 的全棧解決方案》https://www.toutiao.com/i6799170151217365507/
從這兩個小專案中已然得解 —— Serverless 的內涵就是對全部底層資源和運維工作的封裝,讓開發者更專注於業務邏輯。
寫在後面題主在問題描述中的思考很有價值,其實 Serverless 的確不是一個前端的概念,甚至都不是為了解決前端的問題而出現的,它其實就是雲計算發展的必經過程。
就好比,底層語言的發展趨勢肯定是高階語言。而高階語言肯定也會封裝起底層的硬體,讓程式設計師無需關心硬體的狀態,專注編碼。
十年前程式設計還是比較難的高階學科,如今小學已經開展程式設計課程。其實就是因為程式語言的發展,讓程式設計變得更加友好。
同樣地,Serverless 的出現和完善,也是讓軟體開發變得更加友好。不僅前端需要關注 Serverless,它可能屬於每一種型別的應用開發者。
而這會淘汰後端嗎?並不會!
後端會更聚焦於業務邏輯、資料處理、演算法策略等更專精的事情。
汽車的出現讓馬車伕成為了司機,技術在變革,工程師也將成長。
-
3 # 小爝
最近給同事也講了一下,要不部門內部我們自己嘗試嘗試Serverless?
同事問我收益是啥,我也一時說不上來,後來整理了一下,同步發一下吧。
首先如果在公司內部做serverless 的嘗試方案:
先搞清楚下面這幾個問題:
1,什麼是 serverless,對於前端和客戶端以及運維來說有什麼收益。
1.1 首先理解 serverless,需要先理解以下幾個概念:
Serverless 的演進和形成主要經歷了:1,IaaS(Infrastructure-as-a-Service,提供物理機服務),2,PaaS(Platform-as-a-Service,平臺既服務,如阿里雲,七牛,甚至我們自己的 nvm ,sce等),3,CaaS(Container-as-a-Service,容器既服務,類似我們現在內部的 docker k8s服務),4,FaaS(函式既服務,一個容器一個函式,使用時才消耗資源,不含儲存,只包含邏輯),5,Baas(backend-as-a-service,後端既服務,提供儲存,資料庫操作,訊息轉發,靜態服務等雲服務功能)。
我們目前整體新浪還處於 IaaS,PaaS結合 Caas 的階段,我們的服務目前有部署在物理機的,有部署在 nvm 平臺的,有部署在 容器cs服務中的。
那麼我們現在理解了 serverless 的演進後,我們可以認為 Faas 和 Baas 才是最終 serverless 的最後形態。
1.2 他對於前端和客戶端開發人員來說:
1,可以直接使用客戶端程式碼編寫後端和前端服務邏輯,利用 BaaS 提供的雲服務,關聯到 FaaS 中,實現對資料的操作,檔案的上傳,介面的呼叫,路由的註冊等,可以更快速無損的開發 app 應用和前端應用。
2,面向業務程式設計,不需要了解複雜的後端服務配置和部署等,只需要編寫函式完成 API 開發即可,加快生產力。
1.3 他對於後端人員來說:
1,不需要關注具體服務,只需要關注具體功能。
2,只需要面向 API程式設計,而不是業務程式設計。
1.4 他對於運維人員來說:
1,只需要維護好 faas 和 baas 的服務叢集即可。
2,更節約成本,而且會比 caas 和 paas 更節約伺服器資源,因為只有當函式介面被呼叫時,才會啟動容器,執行函式,執行完畢後再釋放函式,沒有呼叫則不會有資源浪費。
2,serverless 的使用場景:
2.1,首先我們說的主要還是 faas 和 bass 的使用場景。
2.1.1 純函式,比如計算,介面呼叫中轉,查詢服務,介面拼接,SSR等。
2.1.3 如果有儲存邏輯,比如上傳圖片,裁切,處理音影片等等,可以提供通用的 baas 服務的 sdk 或者 api 來進行處理即可。
2,結合部門自己的業務,我們什麼地方可以使用 serverless:
2.2.1 c 端場景需求:我們開發創新產品或者小程式,app,前端網頁時可以無需後端開發人員配合支援。
比如 我們要開發一個 ugc 的社群,類似微博,綠洲這種 app,我們需要的是註冊,登入,feed 流,增刪改查文章,上傳圖片,影片等功能。
場景1:那麼比如註冊,登入統一的 api(現在 sso 服務就可以直接複用,在 faas 中呼叫 sso 服務介面就可以)。
場景2:使用者的頭像上傳,圖片,影片上傳可以直接呼叫 s3的服務介面或者 cdn 介面直接用 faas 包裝即可,無需後端配合。
場景3:使用者釋出文章,刪除,修改文章等,需要操作資料庫,這裡包含了簡單的 curd 的業務邏輯,我們可以直接使用雲平臺建立好伺服器,然後接入 baas 中的比如 mysql 的 client,直接在 faas 中編寫對應的 curd 邏輯即可,或者利用一些開源的 curd 包,aws,阿里雲都有類似的功能,在新浪我們可以拆開成faas 和 baas 結合+paas 的解決方案。
那麼我們開發這麼一個 ugc 社群,當我們擁有了 serverless 架構服務後,我們完全可以純前端完成功能。(理想情況)
2.2.2 內部 b 端場景:
場景1:我們要實現一套無紙化辦公 app 或者 web 系統,比如我們的 scheme 服務,hybrid 後臺釋出服務中的部分邏輯,比如圈使用者,圈版本等介面都可以直接拆分到 faas 服務中。
其中場景2,我們目前需要申請伺服器,開發 crontab指令碼,再申請資料庫,進行資料二次處理寫入。或者還要在luwak上編寫 sql,配置任務,但是如果和 sql 無關的任務則luwak無法滿足需求。
3,serverless 的實現和開源方案,業界對比:
2,開源服務:Openfaas(社群的),KNative(google 的),OpenWhisk(IBM,太老了這個多個開源系統拼接),Kubeless,Fission(k8s 官方的),Fn(Oracle的,相容 AWS 的 Lambda 函式服務)
建議選 openfaas 或者 kubeless嘗試一下,看大家都比較推薦,因為咱們肯定是自建。
總結:其實還不錯,如果公司不用,我自己的個人專案還是可以選擇試試的。
回覆列表
Serverless 是一種 “無伺服器架構”,讓使用者無需關心程式執行環境、資源及數量,只要將精力 Focus 到業務邏輯上的技術。
現在公司已經實現 DevOps 化,正在向 Serverless 邁進,而為什麼前端要關注 Serverless?
對業務前端同學:
會改變前後端介面定義規範。一定會改變前後端聯調方式,讓前端參與伺服器邏輯開發,甚至 Node Java 混部。大大降低 Nodejs 伺服器維護門檻,只要會寫 JS 程式碼就可以維護 Node 服務,而無需學習 DevOps 相關知識。對一個自由開發者:
未來伺服器部署更彈性,更省錢。部署速度更快,更不易出錯。前端框架總是帶入後端思維,而 Serverless 則是把前端思維帶入了後端運維。
前端開發者其實是最早享受到 “Serverless” 好處的群體。他們不需要擁有自己的服務,甚至不需要自己的瀏覽器,就可以讓自己的 JS 程式碼均勻、負載均衡的執行在每一個使用者的電腦中。
而每個使用者的瀏覽器,就像現在最時髦,最成熟的 Serverless 叢集,從遠端載入 JS 程式碼開始冷啟動,甚至在冷啟動上也是卓越領先的:利用 JIT 加速讓程式碼實現毫秒級別的冷啟動。不僅如此,瀏覽器還是實現了 BAAS 服務的完美環境,我們可以呼叫任何函式獲取使用者的 Cookie、環境資訊、本地資料庫服務,而無需關心使用者用的是什麼電腦,連線了怎樣的網路,甚至硬碟的大小。
這就是 Serverless 理念。透過 FAAS(函式即服務)與 BAAS(後臺即服務)企圖在服務端製造前端開發者習以為常的開發環境,所以前端開發者應該更能理解 Serverless 帶來的好處。