天天看點

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

serverless作為一種微服務是一種概念,serverless允許你提供代碼或可執行程式送出給雲廠商的解析服務(如阿裡雲的functioncomputer等),由解析服務來為你執行它們,而你無需自己管理伺服器、配置環境、web環境等。這就是所謂的執行即服務execution-as-a-service,這樣的一種概念聽起來非常吸引人,實際上也可以算是一場革命,引用一張經典圖軌迹圖,讓大家看看整個it運維運作的發展軌迹,如下圖:

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

<b>圖解:</b>猶如我們從爬行動物猩猩一樣,最初靠兩隻手和兩隻腳慢慢的挪動,到逐漸站立走穩,到最後解放雙手直立行走成為真正的人,這種演變過程猶如整個it發展的過程,首先經過笨重的實體機--》虛拟化--》雲計算--》容器--》微服務整個演變,這樣的演變,開發者變得更加純粹、自由、更加輕量。開發者開始無需關注硬體資源,無需考慮多線程,無需考慮擴容,無需考慮流量瞬間峰值的未雨綢缪,極大解放研發生産力,專注做自己擅長的事情(coding),我甚至覺得,未來的開發者或許就剩下前端開發而無了後端開發。

哪麼serverless到底特點都在哪裡,适用那些業務場景?

<b>其特點:</b>

1、細粒度的計算資源配置設定

2、不需要預先配置設定資源

3、真正意義上的高度擴容和彈性

4、按需使用,按需計費。

根據serverless的這些通用特點,我歸納出幾種典型使用場景,供大家參考。

<b>a、</b>網店中的商品圖檔維護,根據商品陳列位置,要求需要動态切割成不同尺寸圖檔,或者打上不同水印,當店家把圖檔上傳到阿裡雲oss上,會通過function computer上定制的trigger來觸發函數計算,根據計算規則,生成不同尺寸的圖檔,滿足電商陳列使用,整個過程無需再搭建額外伺服器,也無需網站美工幹預。

<b>b、</b>物聯網行業中,由于物聯網裝置傳輸資料量小,且往往是固定時間間隔進行資料傳輸,是以經常涉及低頻請求場景。例如:物聯網應用程式每分鐘僅運作一次,每次運作50ms,這意味着cpu的使用率為0.1%/小時,這也意味着其實有1000個相同的應用可以共享計算資源。而serverless架構下,使用者可以購買每分鐘100ms的資源來滿足計算需求,通過這種方式就能夠有效解決效率問題,降低使用成本。

<b>c、</b>使用者注冊時發郵件驗證郵箱位址,同樣通過定制的事件來觸發後續的注冊流程,而無需再配置額外的應用無伺服器來處理後續的請求。

事件觸發固定時間觸發,例如在夜間或者服務空閑時間來處理繁忙時候的交易資料,或者跑批量資料,來生成資料報表,通過serverless方式,不用再額外購買使用率并不高的處理資源。

<b>a、</b>移動網際網路應用經常會面對突發流量場景,例如:移動應用的通常流量情況是qps 20,但每隔五分鐘會有一個持續10s的qps 200流量(10倍于通常流量),傳統架構下企業必須擴充qps 200的硬體能力來應對業務高峰,即使高峰時間僅占整個運作時間的4%;而在serverless架構下,使用者可以利用彈性擴充特性,快速建構新的計算能力來滿足目前需求,當業務高峰後,資源能夠自動釋放,有效節省成本。

<b>b、</b>視訊直播某次專場活動,由于無法預估會有多少點播的觀衆視訊接入,把轉碼和流量擴容這部分内容通過function來處理,無需考慮并發和流量擴容。

<b>a、</b>由于安全審計問題,你需要從存放在oss(多個region)裡過去一年的資料拿出來(1個小時一個檔案),你需要從中找出特定關鍵字通路的日志,同時做聚合運算(計算出總值)。如果使用阿裡雲function compute。你可以把通路高峰期每兩小時的日志,或者通路低谷期每四小時的日志交給一個計算函數處理,處理結果存入rds,使用一個函數分派資料給另一個函數,使其執行成千上萬個相同的執行個體。這樣會同時運作近千個計算函數(24 x 365 / 10),在不到一分鐘的時間内完成整個工作。同樣的事情交給ecs+計算腳本來做計算,單單為這些instance配置網絡就讓人頭疼(不同region無法走内網下載下傳oss檔案):instance的數量可能已經超出了子網中剩餘ip位址的數量(比如,你的vpc使用了24位掩碼)。

<b></b>

<b>以上三個場景,都是非常典型的serverless場景。</b>

下面我結合阿裡雲的function compute這個産品來完成一個簡單場景的設定,阿裡雲的function compute目前主要組成部分有這幾大塊:

<b>1</b><b>、service</b><b>定義:</b> 服務是資源管理的基本機關 ,可以授權管理等,簡單了解為空間或者java中的包名。

<b>2</b><b>、event</b><b>定義: </b>任何能夠觸發函數執行的事情稱之為事件 ,一個event中可以觸發多個tigger來執行函數

<b>3</b><b>、trigger</b><b>定義</b>: 使用者通過觸發器定義和管理事件的生成方式, 觸發直接對應的執行函數。

<b>4</b><b>、function</b><b>定義</b>:真正執行的執行函數, 函數是排程和運作的基本機關。

<b>5</b><b>、project </b><b>和log store </b><b>定義</b>:主要是存儲執行日志,整體配置稍微複雜,但是日志友善後續追蹤和調試程式。

阿裡雲執行函數可以通過兩種方式來執行,可以在控制台上配置好service,even,trigger和書寫function後執行即可看到結果,還可以通過指令行工具fcli工具來執行函數,目前阿裡雲支援的腳本語言僅限于nodejs,聽說很快要推出python版本。

<b>fcli界面如下:</b>

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

從控制台界面上看,都是很常用命名方式,可以通過config來配置account_id,access_key_id和 access_key_secret等,每一個指令行都給了相對詳細的幫助,可以通過-help來檢視。

fcli的使用整體流程:

1、使用者先授權,要填寫accout_id,access_id,access_key,如果設定失敗,還需要重新用config進行重置,或者删除.fcli下的配置檔案

2、 建立service

3、建立project,store

4、授權grant service(4步驟,包括role,policy name,log project,log store)

5、進入service空間,開始寫function程式。

6、執行function程式即可看到結果

明白上面概念後,我來簡單實作一個計算一個随機數的例子,通過控制台進行配置:

<b>1、配置service,見圖:</b>

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

<b>2、配置trigger,見圖:</b>

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

<b>3、編寫function(函數執行時間最長300秒),見圖:</b>

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

代碼段:

<b>4、檢視執行結果:</b>配置project+store,略微複雜,後續使用友善,注意這塊内容是收費的,費用較低。配置完成後,點選執行看看執行結果:

函數計算-建立一個簡單的數學計算函數場景事件請求場景流量突發場景處理大資料場景一個科學計算的例子

<b>現狀:</b>

目前function compute和oss産品能無縫內建,後續阿裡雲推出api gateway可以完美地連接配接到任何其他的雲産品,也非常容易建構出控制流量、安全認證、标準化的web服務等,後續阿裡雲還承諾再推出python、java等執行環境。

繼續閱讀