02.29 Serverless: 你好,世界

前言

近年來,IT技術的更新迭代速度非常快,每個時間點都有典型的代表名詞以及概念,就目前而言,人工智能領域中的機器學習、深度學習、強化學習等名詞和概念就非常熱,同時區塊鏈、物聯網等技術發展也是異常火熱。在雲計算領域,有這樣一個技術被眾多雲廠商認為是“風口項目”,甚至可以顛覆現有云計算中的某些格局,為此包括AWS、谷歌以及騰訊雲、阿里雲等在內的雲廠商,都為此投入了重大人力以及精力進行相關產品建設,它就是Serverless技術。

單純的和大家分享什麼是Serverless,可能不是很符合我的個人性格,所以,我將會在這個專欄,通過實踐,和大家一起學習Serverless,沒有華麗的語言和修飾,沒有誇張的修辭和描述,一切建立在生產,實踐,工程之上。

入門Serverless雲函數

我們可以打開騰訊云云函數:

Serverless: 你好,世界

在這裡點進去,新建一個函數:

Serverless: 你好,世界

建立函數的時候,我們可以填寫一個函數名字,然後選擇運行環境:

Serverless: 你好,世界

在這裡,大家可以看到,這裡有Python(2.7/3.6),Nodejs(6.10/8.9),PHP(5.6/7.2)以及Java,Golang等語言,是不是有一點小激動,主流的編程語言,這裡都可以用,也就是說,無論你是什麼語言愛好者,只要在這個列表中,那麼OK,你就可以愉快的來使用Serverless架構。

Serverless: 你好,世界

填寫好相關信息,點擊下一步即可到寫代碼的地方:

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的函數入口。再看一下描述:

Serverless: 你好,世界

可以看到,這裡就是一個執行方法,以Python語言為例:

<code>index.main_handler/<code>

這裡面index就是文件名,main_handler就是入口方法。

我們點擊完成,來體驗一下:

Serverless: 你好,世界

選擇函數代碼:

Serverless: 你好,世界

點擊測試,就可以愉快的體驗:

Serverless: 你好,世界

可以看到,這裡的測試結果,已經輸出了:

"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")

輸出結果:

Serverless: 你好,世界

由此,我們可以對應的看出兩個神秘參數的真實身份:

Serverless: 你好,世界

初步判斷,event裡面是一些入參內容,可能是用戶指定,而context則是函數執行的上下文,包括一些環境變量、函數信息等。

通過騰訊雲的文檔:

可以看到這樣的描述:

Serverless: 你好,世界

由此可見,我們的猜測,貌似沒毛病。

接下來,我們來做一個神奇的操作:讓Hello World成為不一樣的Hello World!

Serverless: 你好,世界

選擇這樣的API網關觸發器:

Serverless: 你好,世界

保存之後可以看到這樣一個地址:

Serverless: 你好,世界

我們打開網址:

Serverless: 你好,世界

看到了什麼?是的,看到了我們剛才的你好世界。改變我們的程序代碼:

<code># -*- coding: utf8 -*-import jsondef main_handler(event, context):    return("I love Serverless! So cool!")/<code>
Serverless: 你好,世界

保存之後,刷新剛才的網頁:

Serverless: 你好,世界

簡單的配置,就讓我們的你好世界,成了web版的你好世界,要知道,這是我們Serverless的入門第一節課,我們就可以做一個網頁了!

Serverless: 你好,世界

百度一下,如何配置一個Web,有超級多的教程,但是無論如何apache,nginx的安裝和配置貌似都是需要的,但是在Serverless架構下:你可以點點點。

非常簡單的,我們完成了一你好世界,非常簡單的,我們做了一個網頁,非常簡單的….

總結

So cool!

是的,雲函數,你可以當作是一個非常有趣項目,他是雲計算的一種表現形式,也被很多人稱之為真正的雲計算,用戶真的可以不再關注服務器資源:如何配置環境,如何安裝服務器軟件,如何……用戶只需要關注自己的代碼,就可以實現自己想要的一起,這是一個你好世界,更是在向Serverless架構,雲計算問好,這是一個你好世界,更是一個不一樣的你好世界。

通過Serverless架構,你可以更簡單,更快速的創建自己的項目,完成自己的工作,怎麼樣,想不想和我一起來Serverless?


Serverless: 你好,世界


分享到:


相關文章: