當(dāng)人們聽到無服務(wù)器這個(gè)詞時(shí),它常常會(huì)讓人聯(lián)想到在Amazon Lambda上執(zhí)行的功能即服務(wù)(functions-as-a-service)。但這只是一個(gè)方面。顧名思義,它是提供云原生應(yīng)用程序所需的所有基礎(chǔ)設(shè)施的抽象。這包括Google Cloud Storage等存儲(chǔ),Azure SQL等數(shù)據(jù)庫(kù),以及Confluent托管版本Apache Kafka提供的分析。
請(qǐng)注意,筆者的例子涉及三個(gè)不同的云提供商。這是因?yàn)?,隨著我們走向一個(gè)無服務(wù)器的世界,我們很可能會(huì)采取多云的方法,即從多個(gè)提供商那里消費(fèi)最好的服務(wù)。請(qǐng)不要與在多個(gè)云提供商的類似基礎(chǔ)設(shè)施上運(yùn)行相同的工作負(fù)載相混淆。
現(xiàn)在多云還不是常態(tài),但它是20世紀(jì)90年代面向服務(wù)的架構(gòu)(SOA)提出的愿景,到2020年,我們離這個(gè)目標(biāo)更近了。
面向服務(wù)的架構(gòu)(SOA)是一種軟件設(shè)計(jì)風(fēng)格,應(yīng)用程序組件通過網(wǎng)絡(luò)上的通信協(xié)議向其他組件提供服務(wù)。SOA服務(wù)是一個(gè)獨(dú)立的功能單元,可以遠(yuǎn)程訪問、獨(dú)立操作和更新,例如在線檢索信用卡對(duì)賬單。SOA還打算獨(dú)立于供應(yīng)商、產(chǎn)品和技術(shù)。
其思想是大型軟件應(yīng)用程序可以分解為提供離散功能的服務(wù)。這些是“黑盒”服務(wù),底層基礎(chǔ)設(shè)施從最終用戶抽象出來。將服務(wù)組合起來作為一個(gè)應(yīng)用程序以一致的方式運(yùn)行。
微服務(wù)和事件驅(qū)動(dòng)架構(gòu)
隨著微服務(wù)已經(jīng)發(fā)展成為一種設(shè)計(jì)模式,我們看到基礎(chǔ)設(shè)施提供商如谷歌、紅帽、Datadog、Twilio、Salesforce和其他提供通用基礎(chǔ)設(shè)施(如對(duì)象存儲(chǔ))和更專業(yè)服務(wù)(如機(jī)器學(xué)習(xí)和監(jiān)控)的廠商。理想情況下,在云原生世界中,你應(yīng)該使用最好的方法組合這些服務(wù)來創(chuàng)建應(yīng)用程序。
那么,這些服務(wù)的交互框架是什么呢?事件,事件,事件。事件只是從一個(gè)系統(tǒng)到另一個(gè)系統(tǒng)的消息,其中一個(gè)系統(tǒng)中的更改被傳遞到另一個(gè)系統(tǒng)。例如,當(dāng)一個(gè)數(shù)據(jù)集上傳到對(duì)象存儲(chǔ)時(shí),機(jī)器學(xué)習(xí)服務(wù)可以提供對(duì)數(shù)據(jù)集內(nèi)容的一些分析。
這些事件在系統(tǒng)之間來回流動(dòng),利用一個(gè)系統(tǒng)的結(jié)果驅(qū)動(dòng)另一個(gè)系統(tǒng)。這是一個(gè)事件驅(qū)動(dòng)的架構(gòu)(EDA)。實(shí)時(shí)流式傳輸這些事件為應(yīng)用程序提供數(shù)據(jù)管道、流式分析和數(shù)據(jù)集成。共享事件的流行方式是通過流式平臺(tái)(如Apache Kafka)或消息代理(如Rabbit MQ)來實(shí)現(xiàn)。
EDA的趨勢(shì)正被行業(yè)中一些最大的廠商所利用。SAP正在開發(fā)Kyma,一個(gè)用基于Knative的無服務(wù)器功能和微服務(wù)擴(kuò)展應(yīng)用程序的平臺(tái)。它提供了一系列“粘在一起”的云原生項(xiàng)目,以簡(jiǎn)化擴(kuò)展的創(chuàng)建和管理。Kyma項(xiàng)目支持以下圍繞事件的愿景:
——使客戶能夠插入最適合其需求的消息傳遞中間件,以及并行運(yùn)行多個(gè)消息傳遞實(shí)現(xiàn)。
——篩選事件并僅傳輸具有現(xiàn)有訂閱(觸發(fā)器)的事件。
——支持在一個(gè)請(qǐng)求中發(fā)送多個(gè)事件。
Cloud Run for Anths是Google Kubernetes Engine(GKE)上的一個(gè)無服務(wù)器開發(fā)平臺(tái),也是由Knative提供的。現(xiàn)在它包含了一個(gè)事件特性,允許用戶在Google Cloud上運(yùn)行事件驅(qū)動(dòng)的系統(tǒng)。一些例子包括:
——云存儲(chǔ)事件觸發(fā)數(shù)據(jù)處理管道。
——每次數(shù)據(jù)加載完成時(shí),BigQuery審核日志事件都會(huì)啟動(dòng)一個(gè)進(jìn)程。 ——云調(diào)度程序事件觸發(fā)批處理作業(yè)。與Linux系統(tǒng)上的cronjob不同,它是基于云的。
這些特性正在包含到產(chǎn)品中。這表明,未來將是事件驅(qū)動(dòng)的,并將加速云原生應(yīng)用程序的自動(dòng)化。
應(yīng)用程序流
在這一點(diǎn)上,絕大多數(shù)的EDA似乎都被軟件的技術(shù)基礎(chǔ)所吸引。例如,GitHub Actions自動(dòng)化了CI/CD、構(gòu)建、測(cè)試和部署的軟件工作流。另一個(gè)例子是AWS EventBridge,它接收來自SaaS(如Zendesk和Auth0)的事件,并將它們路由到AWS服務(wù)(如Lambda)。
然而,從長(zhǎng)遠(yuǎn)來看,將云服務(wù)連接在一起的能力,并不是只與與筆者所說的一般基礎(chǔ)設(shè)施(存儲(chǔ)、計(jì)算和網(wǎng)絡(luò))相關(guān),而是更專業(yè)化的服務(wù),將提供更強(qiáng)大、更強(qiáng)大的應(yīng)用程序。例如,TriggerMesh正在尋找在Salesforce和數(shù)據(jù)湖之間共享數(shù)據(jù)的方法,并將這些數(shù)據(jù)通過Elastic進(jìn)一步分析?;蛘邚腉itHub到Twilio/SendGrid,從Azure日志到Splunk,從SonarSource靜態(tài)代碼分析到Kaka轉(zhuǎn)換和過濾事件,并將它們導(dǎo)出為可供谷歌、微軟和亞馬遜云服務(wù)使用的云事件。
總結(jié)
我們正進(jìn)入一個(gè)激動(dòng)人心的時(shí)刻。從價(jià)格和易用性的角度來看,基礎(chǔ)設(shè)施從未如此容易訪問。微服務(wù)是一個(gè)云原生代理,面向在單體中使用的軟件庫(kù)。當(dāng)你把它們結(jié)合在一起,你就可以制造應(yīng)用程序——不僅僅是客戶端服務(wù)器,而是獨(dú)立的網(wǎng)絡(luò)應(yīng)用程序,這些應(yīng)用程序跨云,甚至是一個(gè)內(nèi)部數(shù)據(jù)中心。由于事件驅(qū)動(dòng)的架構(gòu)和低延遲網(wǎng)絡(luò),這些應(yīng)用程序能夠以更快的速度實(shí)時(shí)移動(dòng)。
原文鏈接:
https://thenewstack.io/the-new-multicloud-serverless-application-flows-and-automation/