Azure Function初探

Azure Function,一開始聽到這名詞是很納悶的,因為相對於Azure VM(Virtual Machine)、Azure DB(Database)等名詞來說,後者是即便沒有接觸也很好想像就是VM、DB放在別人家,User只要連線過去使用,但function卻是包含在一隻程式、甚至只是class中的一個區塊的程式碼,因此對於一個長時間都只在寫後端Service的人而言,腦袋頓時轉不過來,只剩下滿腦子的問號。

其實答案很簡單:就像API通訊一樣。

Azure Function其實是就是把Function的程式碼轉放在Azure上,而程式透過呼叫API的方式給予input、並在response中取得Function的ouput。

作為Azure產品中的一種Serverless compute服務,Azure Function所需要的機器資源均交由Azure進行管理與分配,而費用也則採取效用計算的形式(基於應用程序消耗的實際資源量進行費用計算),對於開發者來說則不需要考慮Server是Linus還是Windows、亦不需考量要準備多少的記憶體與CPU等,開發者只需要選擇開發語言進行撰寫Function即可。

※ Azure Function的費用計算方式詳見官方說明:https://azure.microsoft.com/zh-tw/pricing/details/functions/

 

Azure Function提供的功能不少,此次僅以Trigger作為探討目標。

 

建立完Azure Function後,如下圖,可利用呼叫API的方式進行測試;下圖中,紅框內為Azure上的Function code、綠框內為測試的Request。

Azure Function img

除外,建立完Azure Function後,還可使用Azure提供的管理功能,如下圖,Azure提供設定該Azure Function是否需要驗證或是匿名即可呼叫(Authorization level預設設定為Function,即需要一組API的Key才可呼叫)、Http method的限制、Route等等。

Azure Function img

個人以為Azure Function比起一般的Function,除卻Server平台環境不進行比較,在異動更新方面,Azure Function更新程式僅須透過Azure portal的管理介面中進行異動儲存即可,相對於一般程式從打開cs檔→更新Function code→編譯的流程,Azure Function確實相對便利許多,尤其在客戶需求尚未確定、一直在變化的時候,這種便利性就會隨著工程師異動程式的頻率而體現。

但相對的,當程式需要提高效能時,直接呼叫程式內的Function一定會比呼叫Azure Function來得快速,因為無論Azure提供的網路有多麼迅速,呼叫Azure Function的過程中,從Request到接收Response、甚至是把封包內容轉換成程式內部需要的資料格式等,這過程中用在Http通訊的所消耗的成本是無法忽略的,尤其是在須要大量呼叫的時候會更為明顯。

其次,Azure Function畢竟是一種Serverless compute服務,所以一般Serverless compute所具有的缺點Azure Function多少也逃不開,例如不常使用的Function在呼叫的時候,就像是要重新叫醒IIS起床、把API啟動一樣,會花費較長的時間;在上述的範例中,每次呼叫該Azure Function約花費不到100毫秒的耗時,但隔了三小時後進行呼叫,所花費的時間就會有700毫秒、甚至到5000毫秒以上的耗時。

 

於是,在初步探討完Azure Function完後,筆者感概:「總覺得Azure Function方便歸方便,但在簡訊系統這類要求效能的程式上,並不適用啊。」

同事:「不過要是像NAS那樣須要隨時Check IP的時候,那種Get IP的小Function就很方便了。」

「也是。」

 

 

Reference :

  1. https://blogs.msdn.microsoft.com/visualstudio/2017/08/21/why-you-should-care-about-serverless-computing/
  2. https://docs.microsoft.com/en-us/azure/azure-functions/
  3. https://en.wikipedia.org/wiki/Serverless_computing

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料