天天看點

使用Azure Serverless來開發Teams App

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的架構如下:

使用Azure Serverless來開發Teams App

Teams和Azure的bot service進行互動,然後bot service和我們的服務通過HTTP api進行互動,在這裡我們使用的是Azure Function,在Function裡使用HTTP trigger,這樣就可以把http接口暴露給bot service。

這個架構我之是以說是demo級别,因為連資料庫都沒有用,我們知道通常情況下一個系統肯定需要DB。好,讓我們加上資料庫。

使用Azure Serverless來開發Teams App

我們這裡可以使用上面說的SQL serverless或者是Cosmos DB serverless,但這個架構我隻能說是pilot級别的架構,就是說隻是用來做一些嘗試性的試驗項目。

如果我們要做一個真正的産品,哪怕是一個微型的産品,我們至少還需要日志系統(用來監控運作情況或者查錯)和存放秘密的地方(比如儲存資料庫的連接配接字元串)。我們再來更新一下:

使用Azure Serverless來開發Teams App

我們可以使用Azure的App Insights和Key Vault這兩個服務,這兩個可以算是serverless,因為我們在使用它們的時候不需要關心任何的運作他們的伺服器,隻需要根據儲存資料的多少和調用次數進行付費,非常好用。

上面這個架構隻是一個微型teams app産品的架構,如果需要做一個面向全球使用者的teams app,那整套架構會非常複雜,我後面會寫多篇文章來說明如何設計一個面向全球使用者的teams app架構。

繼續閱讀