今年春季 - 2023

工程 | Josh Long | 2023 年 12 月 26 日 | ...

歡迎來到最新一期的 This Week in Spring! 現在是 2023 年 12 月 26 日,我們正展望新的一年! 您知道這意味著什麼,對吧? 是時候進行我們的年度回顧,看看 Spring 世界中所有最新和最棒的事物。 這是 This Year in Spring。 因此,以下是 2023 年的一些最大主題,然後我們將進入我們定期安排的回顧。

人工智慧 (AI)

毫無疑問,您已經聽說了人工智慧領域取得的令人難以置信的飛躍式進步! 它無所不在! 甚至在 ChatGPT 出現之前,我們就已經擁有 GitHub 的 Copilot 和 Codota,向各地的開發人員展示了 AI 對他們的程式碼可以產生多大的加速作用。 現在,世界其他地方也看到了這種潛力。 人工智慧太棒了! 雖然其中大部分是以底層程式碼和 Python 實現的,但我們大多數人不需要關心。 這就像我們不關心大多數資料庫是用什麼語言實現的一樣。 我們大多數人不會編寫自己的 SQL 資料庫。 因此,真正重要的是編寫整合人工智慧的應用程式的人體工學。 在這方面,我認為 Spring AI 特別引人注目。 所有 LLM 都提供 API,通常基於 HTTP。 所以這很容易。 還有什麼呢? 嗯,人工智慧產品以tokens 為單位進行交易 - 本質上是衡量 LLM 的給定請求可能涉及多少資料(包括請求和回應)。 tokens 的數量越小,您可以傳送給 LLM 以告知其回應的資料就越少。 想像一下,您正在嘗試建立一個可以回答有關圖書館書籍或可以回答有關您的銀行帳戶的問題的機器人。 您需要讓它能夠存取該資料,並且需要找到一種方法將該資料放入給定 LLM 的上下文視窗中。 這個完整的管道 - 從攝取到摘要到透過向量儲存進行檢索 - 需要 Java 和 Spring 擅長的優雅性和人體工學。 我研究了整個端到端管道(有時稱為 R.A.G. 或檢索增強生成),在 我最近與 Intel 的 Arun Gupta 合作製作的影片

GraalVM

我們在去年 11 月的 Spring Boot 3.0 中推出了 GraalVM 原生映像檔支援,作為 GA 生產就緒功能。 GraalVM 背後的核心思想是它是一種預先編譯器,主動獲取程式碼並允許您將其轉換為特定於作業系統和架構的原生程式碼。 結果令人驚豔! 明顯更快的啟動時間明顯更小的 RAM 佔用空間。 但有一些成本,一些讓步。 您需要提供編譯器可以用來了解您何時何地可能進行動態操作(例如反射、序列化、JDK 代理等)的組態檔。 Spring Boot 3.0 及更高版本附帶 AOT 引擎,該引擎在編譯時分析您的 Spring Boot 應用程式,並為您發出相關組態。 結果? 在大多數情況下,對於常見情況,您的應用程式可以轉換為 GraalVM 原生映像檔,並享受這些驚人的好處。 立即試用:start.spring.io 並新增 GraalVM native image 支援。 我寫了一本電子書,您可能會喜歡,內容全部關於 Spring 的 AOT 引擎中的驚人機會。 它是免費的。 如果您更喜歡觀看影片,您可以 在此處查看我關於該技術的深入教程

虛擬執行緒 (Project Loom)

在我看來,Java 21 是自 Java 1.0 以來任何 Java 版本中最重要的版本。 它充滿了功能 - 例如 records、模式匹配、智慧型 switch 表達式、自動推斷、多行字串以及其他一百萬個功能 - 使其成為 Java 8 使用者必備的升級。 它也使 Java 成為最具生產力、效能最高且節能的平台之一。

我最喜歡的功能是 Project Loom 或虛擬執行緒。 虛擬執行緒提供了一個輕量級執行緒執行時間,可以偵測封鎖動作 - Thread.sleepInputStream#read 等,並將它們從執行它們的執行緒中移開,有效地釋放該執行緒以處理系統中的其他事情。 您的系統是否因 IO 而陷入困境,並且不斷透過線路向其他網路服務發出請求? 那麼您可能比其他任何事情花費更多時間等待資料。 這意味著,如果您有很多傳入請求,那麼當其他執行緒只是閒置等待資料到達時,它們很可能必須等待才能被服務,而無法前進。 Project Loom 修正了這個問題,確保您永遠不會在閒置時壟斷執行緒。 最棒的是,無論您在哪裡使用執行緒,使用它實際上都是一個單行程式碼,或者如果您使用的是 Spring Boot 3.2,則只需在一個地方為整個應用程式設定一個屬性即可。 簡單! 我在 這個介紹 Spring Boot 3.2 的影片中 研究了虛擬執行緒

檢查點協調還原 (Project CRaC)

請注意,在談論 GraalVM 原生映像檔時,我說的是「大多數時候」? 這是因為它並不總是有效。 它通常都有效,但它所做的事情與 JRE 所做的事情不同,因此有時會違反 JRE 的承諾。 例如,Java 代理程式無法在 GraalVM 原生映像檔中使用。 如果您只是想要更快的啟動時間,例如在無伺服器環境中怎麼辦?

程式(在像 Linux 這樣的作業系統上執行)通常會啟動、初始化資料結構、將它們載入到 RAM 中,然後開始執行。 這種初始化可能很慢 - 就像在 JRE 上執行的大多數程式一樣。 CRIU 是 Linux 中的一種機制,可讓您拍攝應用程式執行狀態的快照,然後將該快照寫入磁碟。 然後,您可以將該快照載入到另一個正在執行的程式中,並跳過初始化。 結果? 立即快速啟動時間。 其中涉及一些生命週期。 您的程式需要知道它何時將要被拍攝快照。 否則,它將沒有機會清除任何敏感密碼並關閉您不希望在快照中捕獲並寫入磁碟的任何臨時 sockets。 對於 Java 程式,Project CRaC(檢查點協調還原)提供了一種參與此生命週期的簡單方法。 現在 Spring Boot 3.2 也支援 CRaC。 我在 這個介紹 Spring Boot 3.2 的影片中 研究了 Project CRaC

Docker 驅動開發

五月份,我們發布了 Spring Boot 3.1,其中引入了對 Docker 驅動開發的全新支援。現在,Spring Boot 可以從本機 Docker Compose 描述檔或 Testcontainers 取得連線資訊,讓您不必再提供資料庫的連線詳細資訊,並提供一個更好的方式,讓 Spring 協助您管理開發環境中基礎設施服務的生命週期。我在這段影片中探討了這些令人興奮的全新可能性

Spring Modulith

Spring Boot 是一個與 Spring 團隊進行結對程式設計的機會。它是一種對於如何整合和利用 Java 和基於 Spring 的應用程式中的技術的明確方法。它支援多種不同的架構。並非所有架構都是相同的。如果您想建立一個分散式系統,可以使用 Spring Cloud。但如果您想建立一個程式碼庫,並以一種旨在促進模組化、團隊可擴展性以及乾淨、無糾結的架構的方式進行,該怎麼辦?這就是 Spring Modulith 發揮作用的地方。Spring Modulith 負責人 Oliver Drotbohm 在 SpringOne 的演講中介紹了 Spring Modulith

現在是您定期安排的節目時間...

這是您一直在等待的每週總結。

這是 2023 年的最後一次總結。我希望今年過得愉快,明年會更好。我期待在 2024 年年初,也就是Spring 本週要聞的 13 週年紀念日與您相見。哇,光是寫出來就讓我感到不可思議。

祝大家新年快樂!

取得 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進度。

瞭解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔。

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部