Serverless 架構與事件規範

2022-06-10 19:27:08 字數 2342 閱讀 9800

本篇內容主要討論的是 serverless 架構與其事件規範的基礎原則。

首先,我們先來了解下在 http/web 場景下我們的典型的web場景是怎樣的:

這裡,我們不難看出典型的web場景其實是由三大塊內容,客戶端,伺服器,資料庫組成。客戶端在伺服器側通過型別 apache,nginx 等**伺服器來請求資料,**伺服器又通過資料庫來寫入或拉取資料資料。這個很簡單,也是我們最常用的 web 場景。

這裡面伺服器中可能涉及路由規則,鑑權邏輯以及其他各類複雜的業務**,同時,開發團隊要付出很大的精力在這個伺服器的運維上面,包括客戶量突然增多時是否需要擴容伺服器?伺服器上的指令碼,業務**等是否還在健康執行?是否有黑客在不斷地對伺服器發起攻擊?

那麼接下來,我們來看下 serverless 服務是如何請求資料的吧:

serverless 場景下,客戶端需要通過 api 閘道器 baas 來訪問函式 faas 服務,然後在通過函式計算做資料庫鏈結實現資料庫的寫入和拉取。

當客戶端和資料庫未發生變的前提下,伺服器變化巨大,之前需要開發團隊維護的路由模組以及鑑權模組都將接入服務商提供的 api 閘道器系統以及鑑權系統,開發團隊無須再維護這兩部分的業務**,只需要持續維護相關規則即可。同時業務**也被拆分成了函式粒度,不同函式表示不同的功能。

從上面的例子中,我們不難發現,其實乙個完整的 serverless 請求其實是有兩大塊的,即我們的 faas 服務和我們的 baas 服務。那麼,簡單敘述下 serverless,其實由兩部分組成的,即我們的 faas+baas。

了解完整體 serverless 的情況,我們來看下傳統 faas 的基礎架構,其實傳統 faas 最關鍵的核心概念是我們的呼叫,我們可以通過 event sources 事件源呼叫另乙個函式的 function 來實現單個函式的擴充套件,整體的原理圖如下所示:

這樣,我們引出出來另乙個概念,就是事件,什麼是事件?事件是怎麼定義的?

我們可以引出來 cloudevents ,它是⼀種規範,⽤於以通⽤格式描述事件資料,以提供跨服務、平台和系統的互動能⼒。 事件格式指定了如何使⽤某些編碼格式來序列化 cloudevent。⽀持這些編碼的相容 cloudevents 實現必須遵循在相應的事件格式中指定的編碼規則。所有實現都必須⽀持 json 格式。

事件 (event) ⽆處不在,然⽽每個事件源產⽣的事件各不相同。由於缺乏事件的統⼀描述,對於事件的開發者來說,需要不斷地重複學習如何消費不同型別的事件。 例如同⼀個⼚商的 cmq 產⽣的事件和 api ⽹關觸發器產⽣的事件是不同的,不同⼚商的 api ⽹關觸發器產⽣的事件也可能是不同的。

必須的事件屬性(required attributes)

• id - 識別事件

• source - 識別發⽣事件的上下⽂

• specversion - 事件使⽤該版本的 cloudevents 規範

• type - 發⽣相關事件的型別值

• data - data的資料內容格式

• subject -事件開發者有關的事件上下⽂主題

• tiem - 事件發⽣的事件

聊完我們的事件,我們來談談另外乙個核心呼叫,其實在 serverless 架構中,呼叫簡單分為四種:

可以根據不同的用例從不同的事件源呼叫函式,例如:

同步請求(req / rep),例如 http 請求,grpc 呼叫

非同步訊息佇列請求(發布/訂閱),例如 rabbitmq,aws sns,mqtt,電子郵件,物件(s3)更改,計畫事件(如 cron 作業)

訊息/記錄流:例如 kafka,aws kinesis,aws dynamodb streams,資料庫 cdc

批量作業,例如etl作業,分布式機器學習,hpc 模擬

不同型別的事件源包括:

雖然每個事件提供的資料可能在不同的事件源之間有所不同,但事件結構應該是通用的,能夠封裝關於事件源的特定資訊。

如上就是關於 serverless 架構與事件規範的一點思考,希望可以給到大家一些幫助。

傳送門:

推薦閱讀:《serverless 架構:從原理、設計到專案實戰》

Serverless 的執行原理與元件架構

本文重點 下開發者使用 serverless 時經常遇到的一些問題,以及如何解決 過去一年,我們和大量 serverless 使用者進行了線上和線下的交流,了解大家的業務場景 對 serverless 的看法和使用體驗。大部分使用者認為 serverless 會是雲計算下一階段的必然趨勢,但不是現在...

Serverless架構的前世今生

雲計算的不斷發展,湧現出很多改變傳統it架構和運維方式的新技術,而以虛擬機器 容器 微服務為代表的技術更是在各個層面不斷提公升雲服務的技術能力,它們將應用和環境中很多通用能力變成了一種服務。但無論這些技術應用在 幫助企業 降本增效 是技術變革永恆的主題。serverless架構的出現,帶來了跨越式的...

AI 事件驅動場景 Serverless 實踐

事件驅動是指事件在持續事務管理過程中,進行決策的一種策略。可以通過調動可用資源執行相關任務,從而解決不斷出現的問題。通俗地說是當使用者觸發使用行為時對使用者行為的響應。在 serverless 場景下,事件驅動完美符合其設計初衷之一 按需付費。圖 knative 模型 knative 主要包括兩大部...