天天看點

【serverless與微服務】華為雲函數工作流FunctionGraph

簡介

【serverless與微服務】華為雲函數工作流FunctionGraph

CNCF,全稱Cloud Native Computing Foundation(雲原生計算基金會),成立于 2015 年7月21日(于美國波特蘭OSCON 2015上宣布),其最初的口号是堅持和整合開源技術來讓編排容器作為微服務架構的一部分,其作為緻力于雲原生應用推廣和普及的一支重要力量,不論您是雲原生應用的開發者、管理者還是研究人員都有必要了解。

【serverless與微服務】華為雲函數工作流FunctionGraph

Serverless 的主要特點:

1、事件驅動----函數在 FaaS 平台中,需要通過一系列的事件來驅動函數執行。
2、無狀态----因為每次函數執行,可能使用的都是不同的容器,無法進行記憶體或資料共享。
  如果要共享資料,則隻能通過第三方服務,比如 ```Redis`` 等。 
3、無運維----使用serverless我們不需要關心伺服器,也不需要關心運維,這也是serverles思想的核心;
4、低成本----使用 Serverless 成本很低,因為我們隻需要為每次函數的運作付費。函數不運作,則不花錢,也不會浪費伺服器資源過度      

Serverless 常見服務商提供的解決方案

【serverless與微服務】華為雲函數工作流FunctionGraph

1、上圖是目前主要的一些 Serverless 服務,以及對應的服務解決方案。

2、從下往上,分别是基礎設施、開發工具和應用場景。

亞馬遜-微軟-谷歌

3、基礎設施主要是一些雲計算廠商提供,包括雲計算平台和各種 BaaS 服務,以及運作函數的 FaaS 平台。

前端主要是 Serverless 的使用者,是以對前端來說,最重要的開發工具這一層,我們需要依賴開發工具進行 Serverless 開發、調試和部署。

4、架構(Framework)

如今還沒有一個統一的 Serverless 标準,不同雲計算平台提供的 Serverless 服務很可能是不一樣的,這就導緻我們的代碼,無法平滑遷移。Serverless 架構一個主要功能是簡化 Serverless 開發、部署流程,另一主要功能則是屏蔽不同 Serverless 服務中的差異,讓我們的函數能夠在不改動或者隻改動很小一部分的情況下,在其他 Serverless 服務中也能運作。常見的 Serverless 架構有 Serverless Framework、ZEIT Now、Apex 等。不過這些基本都是國外公司做的,國内還沒有這樣的平台。

5、Web IDE

和 Serverless 緊密相關的 Web IDE 主要也是各個雲計算平台的 Web IDE。利用 Web IDE,我們可以很友善地在雲端開發、調試函數,并且可以直接部署到對應的 FaaS 平台。這樣的好處是避免了在本地安裝各種開發工具、配置各種環境。常見的 Web IDE 有 AWS 的 Cloud9、阿裡雲的函數計算 Web IDE、騰訊雲的 Cloud Studio。

6、當然,目前最主要的開發方式還是在本地進行開發。是以在本地開發 Serverless 的指令行工具也必不可少。

指令行工具主要有兩類,一類是雲計算平台提供的,如 AWS 的 aws、 Azure 的 az、阿裡雲的 fun;還有一類是 Serverless 架構提供的,如 serverless、now。

大部分工具如 serverless、fun 等,都是用 Node.js 語言來實作的。

7、應用場景

在開發工具上面一層,則是 Serverless 的一些垂直應用場景。除了使用傳統的服務端開發,目前使用 Serverless 技術的還有小程式開發,未來可能還會涉及到物聯網領域(IoT)。

基于 Serverless 的前端開發模式

【serverless與微服務】華為雲函數工作流FunctionGraph

1、在開始具體的案例之前,先看一下傳統開發流程。

在傳統開發流程中,我們需要前端寫頁面,後端工程師寫接口。後端寫完接口之後,把接口部署了,再進行前後端聯調。聯調完畢後再測試、上線。上線之後,還需要運維工程師對系統進行維護。整個過程涉及多個不同角色,鍊路較長,溝通協調也是一個問題。

2、而基于 Serverless,後端變得非常簡單了,以往的後端應用被拆分為一個個函數,隻需要寫完函數并部署到 Serverless 服務即可,後續也不用關心任何伺服器的運維操作。後端開發的門檻大幅度降低了。是以,隻需要一個前端就可以完成所有的開發工作。

當然,前端基于 Serverless 去寫後端,最好也需要具備一定的後端知識。涉及複雜的後端系統或者 Serverless 不适用的場景,還是需要後端開發。

serverless帶來的價值

1.降低營運複雜度

Serverless架構使軟體應用和伺服器實作了解耦,伺服器不再是使用者開發和營運應用的焦點。在應用上線前,使用者無須再提前規劃伺服器的數量和規格。在運維過程中,使用者無須再持續監控和維護具體伺服器的狀态,隻需要關心應用的整體狀态。應用營運的整體複雜度下降,使用者的關注點可以更多地放在軟體應用的體驗和改進以及其他能帶來更高業務價值的地方。

2.降低營運成本

伺服器不再是使用者關注的一個受管資源,營運的複雜度下降,應用營運所需要投入的時間和人力将大大降低。在最好的情況下,可以做到少數幾個應用管理者即可管理一個處理海量請求的應用系統。

3、縮短産品的上市時間

在Serverless架構下,應用的功能被解構成若幹個細顆粒度的無狀态函數,功能與功能之間的邊界變得更加清晰,功能子產品之間的耦合度大大減小。這使得軟體應用的開發效率更高,應用開發的疊代周期更短。

一句話總結serverless - less is more

使用 Serverless,我們不需要再過多關注服務端的運維,不需要關心我們不熟悉的領域,我們隻需要專注于業務的開發、專注于産品的實作。我們需要關心的事情變少了,但我們能做的事情更多了。

serverless實踐

基于華為雲對應的明星産品包括函數工作流FunctionGraph,體驗一下severless怎麼用。

架構、痛點等下相關資訊請點選華為雲函數官方文檔:

​​​https://support.huaweicloud.com/functiongraph/index.html​​

體驗思路

1、雲函數的思路是有一個事件(如向對象存儲存了一張照片),然後觸發雲函數對這張照片進行某種處理(比如照片美化),然後存放到另外一個地方去(如對象存儲另一個位置或mysql資料庫中)。這樣的好處是,無需啟用一個伺服器專門等有照片上傳事件,因為網際網路場景下,我們不知道客戶什麼時候會上傳照片,無需專門伺服器,就是severless的通俗了解了。有照片上傳了再自動處理,這是一種微服務的理念。

2、本文是體驗serverless的首次體驗,先熟悉一下雲函數怎麼操作,如何使用函數的輸入參數。

【操作步驟】

操作入口:

​​https://www.baidu.com/link?url=DMTpbH8V0rjpzM-wjA1muZcuWQdZBSexUdKKEu1ZXiggO3DRDdatkaOvWbcR6aYuil12tQFGzNe66wItkOq8ka&wd=&eqid=95456257000f54ca000000065ee4ce3a​​

1、登入華為雲官網,在“産品”-“基礎服務”-“計算”-“函數工作流Function Graph”,進入控制台。首次登入會提示申請體驗、開通權限等操作,按照提示開通即時生效。

2、先了解一下函數的輸入參數event、context的含義和用法。以python3.6為例:

​​​ https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html​​​ def handler (event, context)

入口函數名(handler):就是一個python檔案包中,觸發器執行的主函數,類似大家學C語言裡面的main函數。

執行事件(event): 該事件的相關參數,格式為key:value這種JSON資料結構。不同僚件的格式不一樣,詳情見下面的測試用例部分。比如是對象存儲OBS觸發的事件,那麼會包含OBS的桶資訊、檔案名、所屬區域等等。

上下文環境(Context):系統級公共輸入參數,固定格式不可改,對應字段的擷取方法可在上面的連結中擷取。 比如記錄了調用該函數的使用者的通路密鑰(AK/SK)、記錄函數運作過程種的日志檔案對象等等。

3、下面我們嘗試一下把每個輸入參數都讀取處理操作一下,掌握方法。

4、建立一個函數

【serverless與微服務】華為雲函數工作流FunctionGraph

5、設定函數的參數。“委托名稱”這個概念容易了解錯誤。當函數需要通路雲産品時,比如将照片存放到對象存儲OBS其他路徑,那麼需要獲得OBS授權,擷取授權的操作,就是這裡的“委托名稱”。

舉個生活的例子,比如我在外地工作,要委托老家的朋友去售樓部幫我買一個車位,那我需要給朋友先寫好一個委托書,當車位開始售賣時,朋友拿着委托書去買車位。車位售賣==>事件觸發器,朋友去買車位==>雲函數,我==>要另存為的對象存儲,委托書==>截圖中的“委托名稱”。

【serverless與微服務】華為雲函數工作流FunctionGraph

6、編寫測試用例

雲函數中的使用者參數(對應幫助文檔中描述的event字段),格式是自定義的,符合JSON格式即可。是以和測試用例需要比對起來。

【serverless與微服務】華為雲函數工作流FunctionGraph

7、編寫雲函數,并使用上一步的測試用例,執行測試。

【serverless與微服務】華為雲函數工作流FunctionGraph

8、檢視日志中結果,符合預期。

繼續閱讀