SPRING和JAVA如何塑造內部開發者平台

 岱军 云云众生s

Java 和 Spring 為開發過程帶來的靈活性,影響了目前 IDP 實作標準化和效率的方式。

譯自How Spring and Java Shaped Internal Developer Platforms,作者 Charles Humble。

我早就注意到Java促進了編寫程式碼的異常一致的方法。 該語言的表面積相對較小,幾乎沒有粗糙的邊緣,這使得開發人員從一個 Java 專案遷移到另一個專案非常簡單。 對於建構或維護內部開發者平台(IDP) 的任何人來說,教訓是促進一致性真的很重要。

雖然這始終適用於 Java SE,但並不總是適用於其擴充功能。 如今,企業 Java 開發人員有許多優秀的框架可供選擇,但有一定年齡的人可能還記得在 2000 年代初使用 J2EE 進行程式設計的情況。 J2EE 標準於 1999 年底推出,它使用 Web 和分散式企業應用程式規格擴展了 Java SE,這些應用程式可以部署在諸如 BEA WebLogic 或IBMWebSphere 等應用程式伺服器上。

J2EE 標準被廣泛採用,但因難以使用而聲名狼藉。 該規範的某些部分,尤其是 IBM 開發的原始企業 JavaBean (EJB) 規範,確實很複雜,並且帶來了相當大的效能損失。 例如,EJB 僅允許透過諸如公共物件請求代理體系結構 (CORBA) 等協定進行遠端方法調用,這與大多數其他業務應用程式形成對比。

此外,當時設計的應用程式伺服器可以啟動一次並在沒有中斷的情況下運行數月甚至數年。 正如 Java 冠軍Holly Cummins 所解釋的那樣,BEA、IBM 和其他支援完整 J2EE 規格的供應商做了一些非凡的工程工作來實現這一目標。 缺點是啟動它們(就像在開發程式碼時經常做的那樣)需要幾分鐘。 這使得開發人員難以保持流程;作為一名英國人,我過去每次必須重新啟動開發伺服器時都會泡一杯茶(並且經常喝掉),這似乎更多的提升了Twinings 的銷售,而不是我的 編碼效率。

笨重、緩慢且昂貴
此外,打包和部署用於生產的 J2EE 應用程式很麻煩。 「我參與其中,」DaShaun Carter解釋道,他是 VMware Tanzu(Broadcom 的一個部門)的研究開發軟體工程師和 Spring 開發人員倡導者。 當 Carter 在一家能源公司擔任 J2EE 開發人員時,他的職責是進行建造。 「當我開始時,構建需要一周時間,並且該規範有 12 個人將 J2EE 應用程式投入生產,」他說。 Carter 能夠使用 Apache Ant 和各種自訂外掛程式來縮小流程。 “我們處於每週構建和測試的周期中,但生成所有 WSDL [Web 服務描述語言文檔] 和構建應用程序仍然需要四個小時。”

開發工具也很昂貴。 Carter 說,他們的一個工具,統一建模語言工具 Rational,每個席位需要 20,000 美元才能擁有每個開發人員所需的一切。 「這太荒謬了,」他說。

Spring 的興起改變了範例
2004 年推出的 Spring 框架做了一些重要的事情。 首先也是最重要的,它推廣了依賴注入的概念,其核心是控制反轉 (IoC) 容器。 它還表明,可以在諸如 Apache Tomcat 等更輕量級的 servlet 容器之上建立更簡單的 Web 和分散式應用程式。 這些應用程式啟動得更快,使開發人員能夠快速成功地開始工作,而且它們仍然是開源且免費的。 大約在同一時間,諸如 Eclipse 和 NetBeans 等開源整合開發環境 (IDE) 開始取代專有 IDE 產品,進一步降低了成本。

Spring 還提供了一種使用 Java SE 提供的相同編碼一致性來建立企業應用程式的方法。

不過它並不完美。 Spring 不幸的是在 XML 流行的高峰期開發的,它對 XML 的依賴造成了配置方面的問題。 隨著框架中添加了更多功能,Spring 也被認為過於複雜。

2006 年在 Java SE 6 中採用註解作為 XML 的替代方案,在一定程度上幫助 Spring 團隊減輕了配置複雜性。 然而,最終最大程度地減少配置問題的,是受 Ruby on Rails 啟發的 Spring Boot,它提供了關於如何建立 Spring 應用程式的高度主觀視圖。

IDP 如何減少摩擦
Spring Boot 也透過 Initializr 和start.spring.io推動了模板化的想法。 「這是我了解 IDP 概念的開端,」Carter 說。 “我可以獲取我需要的東西,例如 Spring Data 和 Spring Web,並按需組合在一起。使用 IDP 方法,模式及其原因定義明確,因此它創造了良好的開發者體驗。”

Initializr 提供了護欄,並允許開發者快速啟動並運行。 「我可以立即開始並期待快速交付,因為 IDP 提供了大量資訊和範例,例如我們如何處理日誌和指標等,」Carter 解釋說。

在此背景下,IDP 充當傳播者,在公司內部傳播模式,打破孤島並減少摩擦。 正如VMware Tanzu 在Broadcom 的研究和開發高級總監James Watters所說,「它減少了安全性、架構和開發團隊之間的界限。」最終,目標是讓IDP 充當快速反饋、可組合性和模式擴散的真正 切入點,尤其是在大型組織中。

以 Spring 為藍本的 IDP 降低了開發者的靈活性,但 Watters 借用雲端運算進行了類比,解釋了為什麼這可能是一件好事:

「雲端運算在很大程度上減少了對第2 層網路的依賴。你無法自訂第2 層網絡,就像你可能在資料中心中所做的那樣。但你可以獲得一個可彈性使用的可 擴展模型。我認為帕累托效率適用於網絡,一直到應用程式模式,而這是IDP 擅長的領域。Cloud Foundry是模式力量的早期指標之一,我認為我們已經看到了許多其他模式的出現, 包括應用程式模板化、預設安全性和建立服務模板化。如果你考慮Google Cloud Run或Azure Container Apps,整個行業都開始表示模式是實現效率和預設安全性的非常好的方法。”

此外,由於 Initializr 是開源的,並且在其下方有完整的 Spring 框架,因此組織可以根據其需求和文化進行調整。

Garmin 如何使用模式和自動化
消費性電子公司 Garmin 的私有雲平台架構師Jonathan Regehr表示,這是他們採取的方法。 作為黑客馬拉鬆的一部分,Garmin 建立了一個工具,最好將其描述為早期後台類型的門戶。 它會產生一個骨架程式碼庫並將其載入到 Git 儲存庫中。 它還會建立 Jenkins 作業,首次運行它並將應用程式骨架一直推送到生產環境,因此開發者只需編寫程式碼即可。 「這個笑話是,你填寫一份表格,小睡一會兒,醒來後就可以開始編碼了,」Regehr 說。

他承認,該工具現在已經相當老了,他的團隊正在尋找替代品。 即便如此,這也展示了使用模板和自動化來入門的力量。 「如果你仔細考慮監聽器之類的內容,它就是一個模式。我不應該關心如何獲取事件或處理一致性;讓模式處理這些問題,我只需要監督業務價值部分,」Regehr 說。

當工程師在團隊之間移動時,這種傳播模式的方法具有進一步的優勢,因為它提高了一致性。 正如Monzo Bank 的高級員工工程師Suhail Patel在2022 年解釋的那樣,「[在Monzo] 當你開始處理微服務時,有一條明確的鋪就道路,因此它們看起來都非常統一。你可以為其他團隊 的服務做出貢獻,因為該結構對你來說完全熟悉。”

Regehr 也同意這個想法。 「我認為你不能指望把某人放到一個專案中,然後讓他們立即發揮作用。人們在加入團隊後會有一個學習曲線。但如果部署相同,程式碼庫看起來相同,並且所有內容的佈局相同 ,他們會說,’好的,我需要了解你的業務邏輯,但其他部分都很容易。’”

可擴展性取決於決策
Monzo 和 Garmin 也說明了在平台內做出選擇的重要性。 「建構平台團隊的大規模參與者往往有兩種到四種關鍵模式,」James Watters 說。 “他們概述瞭如何擴展 Java 服務或 Go 服務,而不是嘗試為開發人員可能擁有的每個打開的標籤頁構建一個門戶。這兩種方法非常不同。”

Garmin 對叢集配置採取了類似的方法。 從語言和運行時角度來看,該環境是混合的。 Garmin 約 70% 的程式碼(Web 應用程式和偵聽器的混合)是用 Java 編寫的。 該公司也運行大量Node.js和 .NET,一些Python和少量 PHP。

Garmin 運行兩個平台:Red HatOpenShift 用於 Kubernetes 工作負載,而 VMware Tanzu Application Service(部分客戶仍將其稱為Pivotal Cloud Foundry(PCF))用於其餘部分。 隨著數百名開發人員使用VMware Tanzu 平台,Garmin 在一個非生產環境和四個生產基礎上運行超過 9,000 個應用程式實例。 它使用多雲基礎設施,部分原因是收購,也運行一個大型私有雲。

Regehr 的團隊完全在內部工作,他們遵循「自動化一切」的範例。 例如,為了管理他們的Kubernetes集群,他們編寫了 140,000 行自動化程式碼。 開發人員貢獻少量配置程式碼,並由此和他們的自動化產生所有必需的叢集配置,並將它們放入儲存庫中。

「我們正在自動生成 110 萬行集群配置,Argo CD正在噴射和建立集群,」Regehr 說。 “我們使用生成存儲庫來執行此操作,這意味著如果我犯了一個錯誤,我可以查看錯誤並修復它,而不是集群因我而消失。”

短暫基礎建設的優勢
這種級別的自動化允許基礎設施團隊將所有內容視為短暫的。 「一個例子是Concourse,」Regehr 解釋說。 「我們有一個與每個Tanzu 平台部署配對的Concourse 實例,該實例處理特定於該基礎的自動化。如果Concourse 的磁碟空間用完或其資料庫損壞,解決方案始終相同——燒毀Concourse,運行自動化腳本重新 部署Concourse,然後運行我們的“UpdatePipeline”管道。這個Concourse 看起來與10 分鐘前完全一樣,除了減少了一些作業運行歷史記錄。”

Regehr 說,採取這種方法也有助於 Garmin 提高安全性。 「如果你想讓駭客一無所獲,其中一種方法就是如此快速地重建你的基礎設施,即使他進入伺服器並構建了他的『邪惡框架』,它也會消失得如此之快,以至於他無法在 它再次消失之前重建它。”

這可能對基礎設施有效,但程式碼本身呢? James Watters 說,“在我進行的對話中引起共鳴的頭號話題是:我們如何在規模化組織中默認變得更加安全?”

James Watters 認為,開發者平台充當起點,提供標準化的應用程式模式和整合程式庫,讓你對應用程式進行身份驗證。 「我們還擁有一個預設安全的建置系統,該系統已重新註入 IDP,並且我們可以在創建應用程式的確切時刻提供快速的安全記分卡,」他說。 IDP 還可以向開發人員發出警報,例如,“你知道這個應用程式中存在漏洞並且有可用的修復程式嗎?你想應用它嗎?”

VMware Tanzu 團隊正在探索人工智慧對產業的影響,其中一些工作已經透過Spring.ai可見。 James Watters 說他對人工智慧的重要性感到“震驚”,但他也看到了安全方面還有很多未完成的工作。 「做更多的事情來自動化安全任務並建立更多模式化和安全的系統,這是我們的客戶希望看到的,」他說。

 

This entry was posted in News.

发表评论

邮箱地址不会被公开。 必填项已用*标注


*

在线客服系统