前言
近年來,IT技術的更新迭代速度非常快,每個時間點都有典型的代表名詞以及概念,就目前而言,人工智能領域中的機器學習、深度學習、強化學習等名詞和概念就非常熱,同時區塊鏈、物聯網等技術發展也是異常火熱。在雲計算領域,有這樣一個技術被眾多雲廠商認為是“風口項目”,甚至可以顛覆現有云計算中的某些格局,為此包括AWS、谷歌以及騰訊雲、阿里雲等在內的雲廠商,都為此投入了重大人力以及精力進行相關產品建設,它就是Serverless技術。
單純的和大家分享什麼是Serverless,可能不是很符合我的個人性格,所以,我將會在這個專欄,通過實踐,和大家一起學習Serverless,沒有華麗的語言和修飾,沒有誇張的修辭和描述,一切建立在生產,實踐,工程之上。
入門Serverless雲函數
我們可以打開騰訊云云函數:
在這裡點進去,新建一個函數:
建立函數的時候,我們可以填寫一個函數名字,然後選擇運行環境:
在這裡,大家可以看到,這裡有Python(2.7/3.6),Nodejs(6.10/8.9),PHP(5.6/7.2)以及Java,Golang等語言,是不是有一點小激動,主流的編程語言,這裡都可以用,也就是說,無論你是什麼語言愛好者,只要在這個列表中,那麼OK,你就可以愉快的來使用Serverless架構。
填寫好相關信息,點擊下一步即可到寫代碼的地方:
看一下這個代碼很簡單:
<code> # -*- coding: utf8 -*- import json def main_handler(event, context): print("Received event: " + json.dumps(event, indent = 2)) print("Received context: " + str(context)) print("Hello world") return("Hello World")/<code>
整個代碼內容,只有一個函數,就是main_handler,動腦一下,都可以猜到,這個一定就是騰訊雲Serverless的函數入口。再看一下描述:
可以看到,這裡就是一個執行方法,以Python語言為例:
<code>index.main_handler/<code>
這裡面index就是文件名,main_handler就是入口方法。
我們點擊完成,來體驗一下:
選擇函數代碼:
點擊測試,就可以愉快的體驗:
可以看到,這裡的測試結果,已經輸出了:
"Hello World"
這說明,我們已經成功跑起來了雲函數:你好,世界
超乎想象
剛剛,我們簡單的運行了一下函數,我們有沒有發現一件事情:
- 我們沒有配置環境
- 我們沒有安裝Python環境
傳統情況下,我們要寫一個python程序,我們需要下載Python軟件,然後安裝,配置環境,才可以編寫程序,而就在剛剛,我們貌似,在線編寫了一個軟件,並且運行了?
是的,Serverless架構實際上可以看作是FaaS+BaaS,其中FaaS就可以看成是函數計算,而BaaS就是後端的服務。我們目前體驗的這種在線的編程運行過程,就是FaaS重的一部分。
說完這裡,我們再來看看我們的代碼和輸出的結果:
<code># -*- coding: utf8 -*-import jsondef main_handler(event, context): print("Received event: " + json.dumps(event, indent = 2)) print("Received context: " + str(context)) print("Hello world") return("Hello World/<code>
"Hello World"
<code>日誌:START RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364aEvent RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364aReceived event: { "key1": "test value 1", "key2": "test value 2"}Received context: {'memory_limit_in_mb': 128, 'time_limit_in_ms': 3000, 'request_id': '2ba40ad6-1806-11ea-9ec2-52540075364a', 'environ': ';SCF_NAMESPACE=default', 'function_version': '$LATEST', 'function_name': 'hello_world', 'namespace': 'default', 'get_remaining_time_in_millis': <function>.<lambda> at 0x7f063a9f9488>}Hello worldEND RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364aReport RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a Duration:0.34ms Memory:128MB MaxMemoryUsed:19.5039MB/<lambda>/<function>/<code>
我們通過這樣一個對比,我們可以看到這樣一個對應關係:
行數4的代碼:
print("Received event: " + json.dumps(event, indent = 2))
輸出結果:
<code>Received event: { "key1": "test value 1", "key2": "test value 2"}/<code>
行數5的代碼:
print("Received context: " + str(context))
輸出結果:
<code>Received context: {'memory_limit_in_mb': 128, 'time_limit_in_ms': 3000, 'request_id': '2ba40ad6-1806-11ea-9ec2-52540075364a', 'environ': ';SCF_NAMESPACE=default', 'function_version': '$LATEST', 'function_name': 'hello_world', 'namespace': 'default', 'get_remaining_time_in_millis': <function>.<lambda> at 0x7f063a9f9488>}/<lambda>/<function>/<code>
行數6的代碼:
print("Hello world")
輸出結果:
<code>Hello world/<code>
行數7的代碼:
return("Hello World")
輸出結果:
由此,我們可以對應的看出兩個神秘參數的真實身份:
初步判斷,event裡面是一些入參內容,可能是用戶指定,而context則是函數執行的上下文,包括一些環境變量、函數信息等。
通過騰訊雲的文檔:
可以看到這樣的描述:
由此可見,我們的猜測,貌似沒毛病。
接下來,我們來做一個神奇的操作:讓Hello World成為不一樣的Hello World!
選擇這樣的API網關觸發器:
保存之後可以看到這樣一個地址:
我們打開網址:
看到了什麼?是的,看到了我們剛才的你好世界。改變我們的程序代碼:
<code># -*- coding: utf8 -*-import jsondef main_handler(event, context): return("I love Serverless! So cool!")/<code>
保存之後,刷新剛才的網頁:
簡單的配置,就讓我們的你好世界,成了web版的你好世界,要知道,這是我們Serverless的入門第一節課,我們就可以做一個網頁了!
百度一下,如何配置一個Web,有超級多的教程,但是無論如何apache,nginx的安裝和配置貌似都是需要的,但是在Serverless架構下:你可以點點點。
非常簡單的,我們完成了一你好世界,非常簡單的,我們做了一個網頁,非常簡單的….
總結
So cool!
是的,雲函數,你可以當作是一個非常有趣項目,他是雲計算的一種表現形式,也被很多人稱之為真正的雲計算,用戶真的可以不再關注服務器資源:如何配置環境,如何安裝服務器軟件,如何……用戶只需要關注自己的代碼,就可以實現自己想要的一起,這是一個你好世界,更是在向Serverless架構,雲計算問好,這是一個你好世界,更是一個不一樣的你好世界。
通過Serverless架構,你可以更簡單,更快速的創建自己的項目,完成自己的工作,怎麼樣,想不想和我一起來Serverless?
閱讀更多 GoServerless 的文章