函數計算-建立一個簡單的數學計算函數場景
Serverless作為一種微服務是一種概念,Serverless允許你提供代碼或可執行程序提交給雲廠商的解析服務(如阿裏雲的FunctionComputer等),由解析服務來為你執行它們,而你無需自己管理服務器、配置環境、Web環境等。這就是所謂的執行即服務execution-as-a-service,這樣的一種概念聽起來非常吸引人,實際上也可以算是一場革命,引用一張經典圖軌跡圖,讓大家看看整個IT運維運行的發展軌跡,如下圖:
圖解:猶如我們從爬行動物猩猩一樣,最初靠兩隻手和兩隻腳慢慢的挪動,到逐步站立走穩,到最後解放雙手直立行走成為真正的人,這種演變過程猶如整個IT發展的過程,首先經過笨重的物理機--》虛擬化--》雲計算--》容器--》微服務整個演變,這樣的演變,開發者變得更加純粹、自由、更加輕量。開發者開始無需關注硬件資源,無需考慮多線程,無需考慮擴容,無需考慮流量瞬間峰值的未雨綢繆,極大解放研發生產力,專注做自己擅長的事情(Coding),我甚至覺得,未來的開發者或許就剩下前端開發而無了後端開發。
哪麼Serverless到底特點都在哪裏,適用那些業務場景?
其特點:
1、細粒度的計算資源分配
2、不需要預先分配資源
3、真正意義上的高度擴容和彈性
4、按需使用,按需計費。
根據Serverless的這些通用特點,我歸納出幾種典型使用場景,供大家參考。
事件請求場景
Aã 網店中的商品圖片維護,根據商品陳列位置,要求需要動態切割成不同尺寸圖片,或者打上不同水印,當店家把圖片上傳到阿裏雲OSS上,會通過Function computer上定製的trigger來觸發函數計算,根據計算規則,生成不同尺寸的圖片,滿足電商陳列使用,整個過程無需再搭建額外服務器,也無需網站美工幹預。
Bã 物聯網行業中,由於物聯網設備傳輸數據量小,且往往是固定時間間隔進行數據傳輸,因此經常涉及低頻請求場景。例如:物聯網應用程序每分鍾僅運行一次,每次運行50ms,這意味著CPU的使用率為0.1%/小時,這也意味著其實有1000個相同的應用可以共享計算資源。而Serverless架構下,用戶可以購買每分鍾100ms的資源來滿足計算需求,通過這種方式就能夠有效解決效率問題,降低使用成本。
Cã 用戶注冊時發郵件驗證郵箱地址,同樣通過定製的事件來觸發後續的注冊流程,而無需再配置額外的應用無服務器來處理後續的請求。
事件觸發固定時間觸發,例如在夜間或者服務空閑時間來處理繁忙時候的交易數據,或者跑批量數據,來生成數據報表,通過serverless方式,不用再額外購買利用率並不高的處理資源。流量突發場景
A、移動互聯網應用經常會麵對突發流量場景,例如:移動應用的通常流量情況是QPS 20,但每隔五分鍾會有一個持續10s的QPS 200流量(10倍於通常流量),傳統架構下企業必須擴展QPS 200的硬件能力來應對業務高峰,即使高峰時間僅占整個運行時間的4%;而在Serverless架構下,用戶可以利用彈性擴展特性,快速構建新的計算能力來滿足當前需求,當業務高峰後,資源能夠自動釋放,有效節省成本。
Bã 視頻直播某次專場活動,由於無法預估會有多少點播的觀眾視頻接入,把轉碼和流量擴容這部分內容通過Function來處理,無需考慮並發和流量擴容。
處理大數據場景
Aã 由於安全審計問題,你需要從存放在OSS(多個region)裏過去一年的數據拿出來(1個小時一個文件),你需要從中找出特定關鍵字訪問的日誌,同時做聚合運算(計算出總值)。如果使用阿裏雲Function Compute。你可以把訪問高峰期每兩小時的日誌,或者訪問低穀期每四小時的日誌交給一個計算函數處理,處理結果存入RDS,使用一個函數分派數據給另一個函數,使其執行成千上萬個相同的實例。這樣會同時運行近千個計算函數(24 x 365 / 10),在不到一分鍾的時間內完成整個工作。同樣的事情交給ECS+計算腳本來做計算,單單為這些instance配置網絡就讓人頭疼(不同region無法走內網下載OSS文件):instance的數量可能已經超出了子網中剩餘IP地址的數量(比如,你的VPC使用了24位掩碼)。
1、Service定義: 服務是資源管理的基本單位 ,可以授權管理等,簡單理解為空間或者java中的包名。
2、Even定義: 任何能夠觸發函數執行的事情稱之為事件 ,一個Even中可以觸發多個Tigger來執行函數
3、Trigger定義: 用戶通過觸發器定義和管理事件的生成方式, 觸發直接對應的執行函數。
4、Function定義:真正執行的執行函數, 函數是調度和運行的基本單位。
5、Project 和log Store 定義:主要是存儲執行日誌,整體配置稍微複雜,但是日誌方便後續追蹤和調試程序。
阿裏雲執行函數可以通過兩種方式來執行,可以在控製台上配置好service,even,trigger和書寫Function後執行即可看到結果,還可以通過命令行工具Fcli工具來執行函數,目前阿裏雲支持的腳本語言僅限於Nodejs,聽說很快要推出python版本。
Fcli界麵如下:

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程序即可看到結果一個科學計算的例子
明白上麵概念後,我來簡單實現一個計算一個隨機數的例子,通過控製台進行配置:


3、編寫Function(函數執行時間最長300秒),見圖:
代碼段:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
var min_nmu = 1000;
var max_nmu = 10000;
var generatedNumber = Math.floor(Math.random() * max_nmu) + min_nmu;
callback(null, generatedNumber);
};
4、查看執行結果:配置Project+Store,略微複雜,後續使用方便,注意這塊內容是收費的,費用較低。配置完成後,點擊執行看看執行結果:

現狀:
目前Function compute和OSS產品能無縫集成,後續阿裏雲推出API Gateway可以完美地連接到任何其他的雲產品,也非常容易構建出控製流量、安全認證、標準化的WEB服務等,後續阿裏雲還承諾再推出Python、Java等執行環境。
最後更新:2017-06-14 18:02:01