Azure Function可以說比較早期的一個serverless服務,隨著這些年云服務的大行其道,Serverless在概念越來越火,什么叫serverless?
Serverless computing (or serverless for short), is an execution model where the cloud provider is responsible for executing a piece of code by dynamically allocating the resources. And only charging for the amount of resources used to run the code.
從上面的定義可以知道serverless指的是用戶不用考慮服務器之類的,只需要把的代碼放到云服務商提供的serverless服務里運行,并且收取的費用是按照執行代碼時占用的資源。所以如果你的代碼不是需要一直運行著的,那就意味著你使用serverless服務比使用傳統的服務更加省錢。
在Azure里越來越多的服務有了serverless,除了剛才說的Azure Function,還有了Serverless Kubernetes(使用virtual nodes),數據庫方面CosmosDB,和傳統的SQL也都有了serverless,讓用戶在使用時更加省錢。
Azure SQL Database serverless: https://docs.microsoft.com/en-us/azure/azure-sql/database/serverless-tier-overview
Azure Cosmos DB serverless: https://docs.microsoft.com/en-us/azure/cosmos-db/serverless
通常我們在開發一個應用時需要用到好幾個環境,比如開發環境,測試環境,生產環境,有時候還會需要一個UAT環境,一般除了生產環境,其他環境的使用率都會比較低,這時候如果使用serverless的服務,那會剩下很多云服務費用。
那我們看看在開發Teams app的時候如何使用serverless,一個最最簡單(用來demo級別的)的teams app的架構如下:
Teams和Azure的bot service進行交互,然后bot service和我們的服務通過HTTP api進行交互,在這里我們使用的是Azure Function,在Function里使用HTTP trigger,這樣就可以把http接口暴露給bot service。
這個架構我之所以說是demo級別,因為連數據庫都沒有用,我們知道通常情況下一個系統肯定需要DB。好,讓我們加上數據庫。
我們這里可以使用上面說的SQL serverless或者是Cosmos DB serverless,但這個架構我只能說是pilot級別的架構,就是說只是用來做一些嘗試性的試驗項目。
如果我們要做一個真正的產品,哪怕是一個微型的產品,我們至少還需要日志系統(用來監控運行情況或者查錯)和存放秘密的地方(比如保存數據庫的連接字符串)。我們再來升級一下:
我們可以使用Azure的App Insights和Key Vault這兩個服務,這兩個可以算是serverless,因為我們在使用它們的時候不需要關心任何的運行他們的服務器,只需要根據保存數據的多少和調用次數進行付費,非常好用。
上面這個架構只是一個微型teams app產品的架構,如果需要做一個面向全球用戶的teams app,那整套架構會非常復雜,我后面會寫多篇文章來說明如何設計一個面向全球用戶的teams app架構。