甲骨文新微服務框架 Helidon Níma:使用虛擬執行緒實現高效能

語言: CN / TW / HK

Helidon傘專案下 ,甲骨文 推出 了基於虛擬執行緒( JEP 425 )的新微服務框架 Helidon Níma。它是完全從頭構建的,以實現易於使用的程式設計模型,並具有出色的效能。該技術的預覽版已經伴隨 Helidon 4.0.0-ALPHA1 版本釋出,對最新 Java 技術感興趣人可以對此進行評估。但是,它尚未達到生產環境就緒狀態。

開發人員可以通過 Helidon MPHelidon SE 使用常規的 Helidon 框架達到一定的吞吐量,但是如果應用需要更高的效能,他們唯一能做的就是採用基於反應式的服務。但值得一提的是,編寫、維護和除錯基於反應式的服務更具挑戰性。

Helidon Níma 使用虛擬執行緒來解決這個問題,因為基於虛擬執行緒,阻塞的成本是很低的,所以我們可以建立數以百萬計的虛擬執行緒。因此,這提供了一個恆定的、低開銷的、高併發的伺服器,同時能夠保持阻塞式的執行緒模型。開發人員通過最小的支撐功能就可以編寫簡單、可除錯和易維護的程式碼。請考慮如下的樣例:

阻塞式程式碼 反應式程式碼
private void one(ServerRequest req, ServerResponse res) {
    String response = callRemote(client());

    res.send(response);
}
private void one(ServerRequest req, ServerResponse res) {
    Single<String> response = client.get()
            .request(String.class);

    response.forSingle(res::send)
            .exceptionally(res::send);
}

阻塞式程式碼和反應式程式碼都能完成相同的目標,但是,反應式程式碼對認知的要求更高,學習曲線更陡峭,並且難以維護。正如甲骨文的架構師 Tomas Langer 在最初的 部落格文章 中所說的那樣,在較為複雜的用例中,這一點會更明顯。

按照 Langer 的說法,Heldion Níma 主要的關注點是效能,它也的確產生了一定的效果,如下圖所示。

這個 Alpha 版本支援如下的協議:

  • 支援 pipelining 的 HTTP/1.1 :客戶端和伺服器端。

  • HTTP/2 伺服器端(原型狀態,包含已知的問題)

  • gRPC 伺服器端(原型狀態,包含已知的問題)

  • WebSocket 伺服器端(原型狀態)

除此之外,它還支援如下的特性:

  • 跟蹤:使用現有的 Helidon 跟蹤實現,比如 JaegerZipkin

  • 靜態內容:來自類路徑或檔案系統

  • 跨域資源共享(CORS)

  • 訪問日誌

  • 可觀測性端點(健康狀態、應用資訊、配置)

  • 容錯(艙壁、斷路器、重試和超時特性)

  • HTTP/1.1 客戶端

  • 測試

在這些特性之上,它還使用了新的 Java 語言特性,如 密封類(sealed classes) 和增強的 switch表示式

Helidon Níma 是一個完全開源的框架,是 Helidon 程式碼庫的一部分。儘管 Helidon 專案是基於 Netty 的,但是甲骨文公司的軟體開發人員 Dmitry Aleksandrov 在他的 部落格文章 中提到:

Helidon Níma 網路伺服器計劃在 Helidon 生態系統中取代 Netty。它也可以被其他框架以嵌入式 Web 伺服器元件的形式使用。

希望評估 Helidion Níma 的開發人員可以參閱 Tomas Langer 的初始 部落格文章 和託管在 GitHub 倉庫的原始碼。

原文連結:

Introducing Helidon Níma Using Virtual Threads to Achieve Simplicity and High Performance