Serverless初探

1、背景

1.1 Serverless是什麼:

無服務器計算是指開發者在構建和運行應用時無需管理服務器等基礎設施,應用被解耦爲細粒度的函數,函數是部署和運行的基本單位。用戶只爲實際使用的資源付費。這些代碼徹底由事件觸發(event-trigger),平臺根據請求自動平行調整服務資源,擁有近乎無限的擴容能力,空閒時則沒有任何資源在運行。代碼運行無狀態,能夠輕易實現快速迭代、極速部署。html

1.2 Serverless的特色:

以函數爲擴展單位,虛擬化運行時環境(Runtime)。是現有計算資源的最小單位,具備徹底自動、一鍵部署、高度可擴展等特色。前端

1.3 Serverless的做用:

  • 低成本

運營成本,Serverless將用戶的服務器,數據庫,中間件委託於BaaS/FaaS,用戶將再也不參與基礎設施及軟件的維護,尤爲在大規模的集羣運營上成本大幅度下降。 開發成本,對比IaaS或者PaaS平臺的服務器或者操做系統,Serverless的架構中,用戶操做的是服務化的組件好比存儲服務,受權服務等,能夠縮短開發週期,下降開發難度。數據庫

  • 按需計費

Serverless/FaaS區別於IaaS/PaaS預先分配計算資源的計費方式,其計費方式一般是按請求次數及運行時間,一方面能夠最大程度利用資源,另外一方面真正的按需計費能夠下降用戶的資源成本。編程

  • 彈性伸縮

Serverless架構一個顯而易見的優勢即「橫向擴展是徹底自動的、有彈性的、且由服務提供者所管理」。json

  • 「綠色」計算

據統計,商業和企業數據中心的典型服務器僅提供5%~15%的平均最大處理能力的輸出,本質上這是對社會資源的一種浪費。而在Serverless架構下,提供商將提供更細力度的計算能力最大限度知足實時需求,資源利用率將大幅度提高,能夠認爲相對IaaS與PaaS Serverless/FaaS是一種 「綠色」 計算。bash

  • NoOps

運維的發展經歷了人肉運維,自動化運維,DevOps,AiOps等,而Serverless帶來一種新的運維模式,這種模式下用戶須要管理的只有Code能夠認爲NoOps。服務器

1.4 演進歷史

雲計算的發展從IaaS,PaaS,SaaS,到最新的BaaS,FasS,在這個趨勢中serverless(去服務器化) 計算資源發展Physical->Virtualisation->Cloud Compute->Container->Server-less

1.5 各廠商產品

目前各大公有云廠商都上線了本身的serverless,如:架構

2、簡單示例

2.1 示例背景

目前有客戶有需求對數量衆多的測試環境想經過非工做時間進行關機操做,天天早上工做時間提早進行開機,如此若是人工來操做重複週期性的操做顯然很是不合適,可是共有云目前沒有提供這種對服務器定時開關機操做的產品功能,只能利用其API來進行,可是須要一臺具有公網能力的服務器來發起API調用請求,此時恰好利用Serverless小試牛刀,本次示例利用騰訊無服務器雲函數(CFS)簡單示例下Serverless的一小部分功能,來實現此需求。less

2.2 建立函數

無服務器雲函數入門能夠參考官網文檔:入門概述運維

  • 選擇地域建立函數服務
  • 進行函數配置

填寫函數名稱,選擇程序函數運行的環境,選擇內存及函數運行的超時時間,最後能夠在高級配置內,配置函數環境變量,在此我將騰訊雲的ak配置在環境變量中以便後續調用。 注意:在配置函數中若是選擇VPC,編寫的函數是具備出公網調用的能力,對應的VPC須要具有此能力。

  • 編寫功能函數代碼

在此我利用騰訊雲的CVM的SDK進行了雲服務器的中止與開機操做,代碼的輸入支持在線編程,以及本地zip上傳和cos上傳代碼 ** 注意**:若是爲本地代碼調用的二進制或可執行文件,須要打包一併上傳。

完整啓動代碼(多個CVM能夠寫入event的json instance列表內)

# -*- coding: utf8 -*-
# _auth:kaliarch

from tencentcloud.common import credential
from tencentcloud.cvm.v20170312 import cvm_client, models
import os
import logging

# 騰訊雲secretid
SecretId = os.getenv('secretid')
# 騰訊雲secretkey
SecretKey = os.getenv('secretkey')
# 事件

def cmvstart_handler(event, context):
		# 定義操做的CVM地域及實例ID
    event = {
    "region": "ap-shanghai",
    "instanceids": ["ins-kqf9os9x"]
    }
    logger = logging.getLogger()
    cred = credential.Credential(SecretId, SecretKey)
    Region = event['region']
    InstanceIds =  event['instanceids']
    cvmoper = cvm_client.CvmClient(cred, Region)
    request = models.StartInstancesRequest()
    request.InstanceIds = InstanceIds
    logger.info('requests:%s' % request)
		# 操做CVM啓動
    response = cvmoper.StartInstances(request)
    result_content = response.to_json_string()
    logger.info('result_content')
    print(result_content)
    return result_content

複製代碼

中止的函數與此一致,在此只是拋磚引玉,其餘的重啓,中止,已經對其餘雲產品的操做等也均可以利用此來完成。

  • 進行在線函數功能測試

能夠利用在線函數測試功能,對功能函數進行測試 注意:在線測試的數據格式必須爲json格式,其傳入爲event變量中

  • 建立觸發方式

目前騰訊雲支持圖中的四種觸發方式,在此示例中適用於定時任務進行觸發

定時任務能夠選擇自定義配置,和Linux下的crond服務器配置一致。 注意:定時任務形式觸發不會傳入event變量,須要本身函數內部指定在建立函數配置時進行變量配置。

2.3 查看日誌

函數返回值部分將顯示運行結果,還將顯示代碼中 return 語句返回的函數執行結果。 運行信息部分將顯示函數運行的時間、內存等信息。 日誌部分將顯示函數運行時生成的日誌,包括用戶代碼中的打印語句、函數運行失敗trace stack等,將會寫入至日誌模塊。

2.4 官網示例

騰訊雲官網爲咱們瞭解及如何使用CFS,提供了不一樣的觸發條件示例及最佳實踐,能夠進行進一步瞭解:最佳實踐

3、思考

  • 在此只是最簡單的試用了一下CFS,其更強大的功能及優點在雲計算的潮流下後期會越顯明顯,適用場景衆多,業務進行拆分,分工更加精細。截取官網的一張最經常使用的移動與WEB應用圖,業務各模塊分離,函數具備彈性伸縮,前端入口爲各業務模塊的API網關,配合CDB/COS完成整體架構。

  • 無服務器雲函數想要後期更快的發展,須要進行業務邏輯的精細梳理和各函數調用,其次須要雲廠商多個性化定製服務,已經本身須要完善生態,最少無服務器雲函數支持自家雲上各產品。
相關文章
相關標籤/搜索