甲骨文新微服務框架 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