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