軟件棧的商品化:應(yīng)用程序?yàn)橄鹊脑品?wù)如何改變游戲規(guī)則
今天讀到這篇文章,覺得不錯就翻譯一下。文章是翻譯自 Steef-Jan Wiggers The Commoditization of the Software Stack:How Application-first Cloud Services are Changing the Game[1],內(nèi)容來自 Bilgin Ibryam 在 QCon London 上的演講。Ibryam 在分享中從應(yīng)用開發(fā)和運(yùn)維兩個不同的維度來討論架構(gòu)的演進(jìn):內(nèi)部架構(gòu)和外部架構(gòu)。二者從單體應(yīng)用時期的明顯的界限,到如今界限愈來愈模糊。
我認(rèn)為隨著架構(gòu)的演進(jìn),應(yīng)用程序發(fā)生著巨大的變化,能力從應(yīng)用中分離出來,下沉到基礎(chǔ)設(shè)施中,甚至變成新的基礎(chǔ)設(shè)施。基礎(chǔ)設(shè)施,也從狹義上的物理設(shè)施、計(jì)算資源演變?yōu)檐浖x的能力,這些能力不斷地被產(chǎn)品化、商品化。新生代的基礎(chǔ)設(shè)施,以各種運(yùn)行時的方式游離在應(yīng)用程序之外,二者仍保持著一定的聯(lián)系:API。
以下是原文的翻譯。
云服務(wù)正在不斷演進(jìn),這影響著開發(fā)者構(gòu)建分布式應(yīng)用程序的方式。在 QCon London 大會上,來自 Diagrid[2] 的產(chǎn)品經(jīng)理 Bilgin Ibryam[3] 探討了云原生技術(shù)(如 Dapr[4])與面向開發(fā)者的云服務(wù)的交集。
Ibryam 首先介紹了如何看待從 單體應(yīng)用程序[5] 到 微服務(wù)[6] 的轉(zhuǎn)變,以及接下來會出現(xiàn)什么。此外,他還談到了云服務(wù)以及它正在以什么樣的形式塑造架構(gòu)的演變。
演講期間,Ibryam 講述了在云之前或云早期構(gòu)建應(yīng)用程序的不同階段(時間線),從基礎(chǔ)設(shè)施和應(yīng)用程序趨勢的角度探討了計(jì)算為先的云、以及應(yīng)用程序?yàn)橄鹊脑茣r代。
Ibryam 從云之前或云早期開始討論,這意味著應(yīng)用程序是單體 x 的。這個時代是在云計(jì)算成為主流之前,而且還沒有微服務(wù)。相反,開發(fā)人員必須使用圍繞業(yè)務(wù)邏輯的所有內(nèi)容,從異步交互(如消息傳遞)到打包和緩存。此外,由兩個團(tuán)隊(duì)(開發(fā)人員和運(yùn)維人員)管理的應(yīng)用程序?qū)雍突A(chǔ)設(shè)施之間也存在區(qū)別。
接下來,Ibryam 討論了云計(jì)算時代早期的內(nèi)部架構(gòu)。2010 年后,應(yīng)用開發(fā)復(fù)興并重新得到關(guān)注,還出現(xiàn)了一些重要且至今仍具有影響力的軟件開發(fā)趨勢。通過使用 C4模型[7] 或 4+1架構(gòu)模型視圖[8] 對架構(gòu)進(jìn)行可視化和描述,可以從不同角度來觀察架構(gòu)。Ibryam 采用了更為直接的方法,將其分為兩個層次:內(nèi)部架構(gòu)和外部架構(gòu)。內(nèi)部應(yīng)用程序架構(gòu)是開發(fā)人員創(chuàng)建并完全掌控的所有內(nèi)容,例如應(yīng)用程序中的不同層,或者如他所說,所有放入容器鏡像中的內(nèi)容。從運(yùn)維(Ops)視圖來看,這是一個黑盒。外部應(yīng)用程序架構(gòu)是應(yīng)用程序與之交互的所有內(nèi)容的集合,例如消息代理、數(shù)據(jù)庫甚至云服務(wù)。Ops 使其可靠、可觀測等。基于此,他討論了一些影響單體應(yīng)用程序開發(fā)的架構(gòu)設(shè)計(jì)方法,例如 領(lǐng)域驅(qū)動設(shè)計(jì)[9]、[六邊形架構(gòu)](https://en.wikipedia.org/wiki/Hexagonal_architecture_(software "六邊形架構(gòu)"))、洋蔥架構(gòu)[10] 和 清潔架構(gòu)[11]。12要素應(yīng)用程序[12] 和 微服務(wù)[13] 原則遵循這些方法,導(dǎo)致單體應(yīng)用程序幾乎成為反模式。
在云之前和云早期之后,計(jì)算優(yōu)先的云應(yīng)運(yùn)而生,從單體應(yīng)用程序向微服務(wù)轉(zhuǎn)變。內(nèi)部應(yīng)用程序架構(gòu)的變化和云的出現(xiàn)導(dǎo)致應(yīng)用程序與其基礎(chǔ)設(shè)施之間出現(xiàn)了分離的集成。
在談到計(jì)算優(yōu)先時,Ibryam 詳細(xì)討論了應(yīng)用程序的內(nèi)部架構(gòu)以及云提供的計(jì)算。它是應(yīng)用程序和計(jì)算機(jī)之間的一個協(xié)議(集成綁定),無論是容器、函數(shù)還是無服務(wù)器應(yīng)用程序。它發(fā)生在兩端的 API 之間(操作調(diào)用,如資源需求、部署、配置和指標(biāo))。通常由運(yùn)維團(tuán)隊(duì)負(fù)責(zé)。
接下來,Ibryam 討論了隨著云的出現(xiàn),應(yīng)用程序的外部架構(gòu)如何再次發(fā)生變化。再次討論了應(yīng)用程序綁定的概念;然而,現(xiàn)在是以云服務(wù)作為應(yīng)用程序的頂部,而不是作為基礎(chǔ)設(shè)施在其下,這是開發(fā)人員的責(zé)任。
向云服務(wù)的集成綁定可以移動到另一個層面,例如 分布式應(yīng)用運(yùn)行時(Dapr)[14]。為了在這方面與 Dapr 進(jìn)行比較,Ibryam 提到了 Google Cloud Event Arc[15]、AWS EventBridge[16] 和 Azure Event Grid[17] 作為云特定的服務(wù),以及 Camel[18] 作為語言無關(guān)的服務(wù)。而 Dapr 則是兩者兼?zhèn)涞摹?/p>
最后,Ibryam 談到了以應(yīng)用優(yōu)先的云,例如,網(wǎng)絡(luò)服務(wù)變得更加以應(yīng)用為中心,并且集成云的誕生:首先是為開發(fā)人員創(chuàng)建的一系列管理服務(wù)。
應(yīng)用程序優(yōu)先的生態(tài)系統(tǒng)將與事件處理服務(wù)(例如 Azure Eventgrid)、與服務(wù)(例如 AWS Step Functions[19])的狀態(tài)綁定、與服務(wù)(例如 Vercel Edge Middleware[20])的同步綁定以及與計(jì)算服務(wù)(例如 AWS ECS[21]、Azure Container Apps[22] 和 Google Cloud Run[23])的計(jì)算綁定具有異步綁定。通信將通過遵循 OpenAPI 規(guī)范[24] 的 API 進(jìn)行。最后,Ibryam 從他的講話中提出了以下主要觀點(diǎn):
- 專注于區(qū)分業(yè)務(wù)邏輯并重用未區(qū)分的商品化能力。
- 使用基于事實(shí)標(biāo)準(zhǔn)的開放計(jì)算和開放集成綁定,實(shí)現(xiàn)可移植性。
- 可移植性不是關(guān)于應(yīng)用程序,而是關(guān)于模式、實(shí)踐、工具和人員。
關(guān)于作者
Steef-Jan Wiggers 是 InfoQ 的高級云編輯之一,目前在荷蘭的 HSO 擔(dān)任技術(shù)集成架構(gòu)師。他目前的技術(shù)專長集中在集成平臺實(shí)施、Azure DevOps 和 Azure 平臺解決方案架構(gòu)上。Steef-Jan 是荷蘭 Azure 用戶組的董事會成員,經(jīng)常在會議和用戶組中發(fā)言,為 InfoQ 和 Serverless Notes 撰寫文章。此外,微軟已經(jīng)連續(xù) 11 年認(rèn)可他為 Microsoft Azure MVP。
參考資料
[1] The Commoditization of the Software Stack:How Application-first Cloud Services are Changing the Game: ??https://www.infoq.com/news/2023/03/application-first-cloud-services/??
[2] Diagrid: ??https://www.diagrid.io/??
[3] Bilgin Ibryam: ??https://qconlondon.com/speakers/bilginibryam??
[4] Dapr: ??https://dapr.io/??
[5] 單體應(yīng)用程序: ??https://en.wikipedia.org/wiki/Monolithic_application??
[6] 微服務(wù): ??https://en.wikipedia.org/wiki/Microservices??
[7] C4模型: ??https://en.wikipedia.org/wiki/C4_model??
[8] 4+1架構(gòu)模型視圖: ??https://en.wikipedia.org/wiki/4%2B1_architectural_view_model??
[9] 領(lǐng)域驅(qū)動設(shè)計(jì): ??https://en.wikipedia.org/wiki/Domain-driven_design??
[10] 洋蔥架構(gòu): ??https://www.codeguru.com/csharp/understanding-onion-architecture/??
[11] 清潔架構(gòu): ??https://betterprogramming.pub/the-clean-architecture-beginners-guide-e4b7058c1165??
[12] 12要素應(yīng)用程序: ??https://en.wikipedia.org/wiki/Twelve-Factor_App_methodologyhttps://en.wikipedia.org/wiki/Twelve-Factor_App_methodology??
[13] 微服務(wù): ??https://en.wikipedia.org/wiki/Microservices??
[14] 分布式應(yīng)用運(yùn)行時(Dapr): ??https://dapr.io/??
[15] Google Cloud Event Arc: ??https://cloud.google.com/eventarc/docs/??
[16] AWS EventBridge: ??https://docs.aws.amazon.com/eventbridge/index.html??
[17] Azure Event Grid: ??https://learn.microsoft.com/en-us/azure/event-grid/??
[18] Camel: ??https://camel.apache.org/manual/faq/what-is-camel.html??
[19] AWS Step Functions: ??https://aws.amazon.com/step-functions/??
[20] Vercel Edge Middleware: ??https://vercel.com/docs/concepts/functions/edge-middleware??
[21] AWS ECS: ??https://aws.amazon.com/ecs/??
[22] Azure Container Apps: ??https://learn.microsoft.com/en-us/azure/container-apps/overview??
[23] Google Cloud Run: ??https://cloud.google.com/run/??
[24] OpenAPI 規(guī)范: ??https://swagger.io/specification/??