Serverless: 你好,世界

前言

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

單純的和你們分享什麼是Serverless,可能不是很符合個人我的性格,因此,我將會在這個專欄,經過實踐,和你們一塊兒學習Serverless,沒有華麗的語言和修飾,沒有誇張的修辭和描述,一切創建在生產,實踐,工程之上。nginx

入門Serverless雲函數

咱們能夠打開騰訊云云函數:web

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

創建函數的時候,咱們能夠填寫一個函數名字,而後選擇運行環境:編程

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

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

看一下這個代碼很簡單:服務器

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

整個代碼內容,只有一個函數,就是main_handler,動腦一下,均可以猜到,這個必定就是騰訊雲Serverless的函數入口。再看一下描述:架構

能夠看到,這裏就是一個執行方法,以Python語言爲例:less

index.main_handler

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

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

選擇函數代碼:

點擊測試,就能夠愉快的體驗:

能夠看到,這裏的測試結果,已經輸出了:

"Hello World"

這說明,咱們已經成功跑起來了雲函數:你好,世界

超乎想象

剛剛,咱們簡單的運行了一下函數,咱們有沒有發現一件事情:

  • 咱們沒有配置環境
  • 咱們沒有安裝Python環境

這貌似是一個在線的編輯器?

傳統狀況下,咱們要寫一個python程序,咱們須要下載Python軟件,而後安裝,配置環境,才能夠編寫程序,而就在剛剛,咱們貌似,在線編寫了一個軟件,而且運行了?

是的,Serverless架構實際上能夠看做是FaaS+BaaS,其中FaaS就能夠當作是函數計算,而BaaS就是後端的服務。咱們目前體驗的這種在線的編程運行過程,就是FaaS重的一部分。

說完這裏,咱們再來看看咱們的代碼和輸出的結果:

# -*- 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
"Hello World"
日誌:
START RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Event RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Received 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 main.<locals>.<lambda> at 0x7f063a9f9488>}
Hello world
END RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Report RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a Duration:0.34ms Memory:128MB MaxMemoryUsed:19.5039MB

咱們經過這樣一個對比,咱們能夠看到這樣一個對應關係:

行數4的代碼:

print("Received event: " + json.dumps(event, indent = 2))

輸出結果:

Received event: {
  "key1": "test value 1",
  "key2": "test value 2"
}

行數5的代碼:

print("Received context: " + str(context))

輸出結果:

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 main.<locals>.<lambda> at 0x7f063a9f9488>}

行數6的代碼:

print("Hello world")

輸出結果:

Hello world

行數7的代碼:

return("Hello World")

輸出結果:

由此,咱們能夠對應的看出兩個神祕參數的真實身份:

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

經過騰訊雲的文檔:

雲函數 基本概念 - 開發指南 - 文檔中心 - 騰訊雲​cloud.tencent.com

能夠看到這樣的描述:

因而可知,咱們的猜想,貌似沒毛病。

接下來,咱們來作一個神奇的操做:讓Hello World成爲不同的Hello World!

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

保存以後能夠看到這樣一個地址:

咱們打開網址:

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

# -*- coding: utf8 -*-
import json
def main_handler(event, context):
    return("I love Serverless! So cool!")

保存以後,刷新剛纔的網頁:

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

百度一下,如何配置一個Web,有超級多的教程,可是不管如何apache,nginx的安裝和配置貌似都是須要的,可是在Serverless架構下:你能夠點點點。

很是簡單的,咱們完成了一你好世界,很是簡單的,咱們作了一個網頁,很是簡單的....

總結

So cool!

是的,雲函數,你能夠看成是一個很是有趣項目,他是雲計算的一種表現形式,也被不少人稱之爲真正的雲計算,用戶真的能夠再也不關注服務器資源:如何配置環境,如何安裝服務器軟件,如何......用戶只須要關注本身的代碼,就能夠實現本身想要的一塊兒,這是一個你好世界,更是在向Serverless架構,雲計算問好,這是一個你好世界,更是一個不同的你好世界。

經過Serverless架構,你能夠更簡單,更快速的建立本身的項目,完成本身的工做,怎麼樣,想不想和我一塊兒來Serverless?

相關文章
相關標籤/搜索