什麼是 Java 的無伺服器化?
幾十年來,企業已經在各類平台上開發了關鍵業務應用程序,包括物理伺服器、虛擬機和雲環境。這些應用程序在各行各業都有一個共同點,那就是無論需求如何,它們都需要持續可用(24x7x365),保證穩定性、可靠性和性能。因此,即使實際資源利用率低於 50%,每個企業都必須付出高額成本維護基礎架構(如 CPU、內存、磁碟、網路等)。
無伺服器架構是為了幫助解決這些問題而產生的。無伺服器允許開發人員按需構建和運行應用程序,保證高可用性,不必在多雲和混合雲環境中管理伺服器。在幕後,無伺服器拓撲中仍有很多伺服器,但它們是從應用程序開發中抽象出來的。相反,雲提供商使用無伺服器進行資源管理,例如配置、維護、聯網和擴展伺服器實例。
由於其高效性,無伺服器開發模式現在是一些企業的需求,這些企業希望按需啟動服務,而不是一直運行服務。
許多新建的開源項目用來在 Kubernetes 集群上通過 Linux 容器包來管理無伺服器應用程序。CNCF 的《互動式無伺服器全景》 是一份關於開源項目、工具、框架和公共雲平台的指南,幫助 DevOps 團隊處理無伺服器應用程序。
![CNCF Serverless Landscape](/data/attachment/album/202105/27/085958pfv1lkffkafoffku.png "CNCF Serverless Landscape")
開發人員可以編寫代碼,然後將其快速部署到各種無伺服器環境中。然後,無伺服器應用程序響應需求,並根據需要自動伸縮擴展。
你可能想知道什麼編程語言和運行環境最適合無伺服器應用程序開發,以便與上圖中的技術集成。這個問題不只一個答案,但是讓我們退一步來討論在企業生產環境中開發業務應用程序最流行的應用程序運行環境:Java。
據 Developer Economics 稱,截至 2020 年第三季度,仍有 800 多萬家企業開發人員在使用 Java 來實現其業務需求。然而,根據 2020 年的一項調查,Java(佔比 6%)顯然不是有前瞻意識的開發人員的首選,他們使用當前雲服務做開發。
![NewRelic data on serverless runtimes and languages](/data/attachment/album/202105/27/085959fvvv6f0aiqvbix09.png "NewRelic data on serverless runtimes and languages")
來自 NewRelic 無伺服器基準報告的數據(Daniel Oh, CC BY-SA 4.0)
資源使用、響應時間和延遲在無伺服器開發中至關重要。公有雲提供商提供的無伺服器產品通常是按需計量的,只有在無伺服器應用程序啟動時,才會通過事件驅動的執行模式收費。因此,當無伺服器應用程序閑置或縮減為零時,企業無需支付任何費用。
帶有容器的 Java 狀態
在這種背景下,你可能會問:「既然現有業務應用程序很可能是在 Java 技術上開發的,那麼開發人員為什麼不嘗試使用 Java 棧進行無伺服器應用程序開發呢?」
隱藏的真相是:很難在新的不可變更的基礎設施(例如 Kubernetes 這樣的容器平台)中優化 Java 應用程序。
![Differences in memory resource usage](/data/attachment/album/202105/27/085959p5dm7tm36m6bddbo.png "Differences in memory resource usage")
該圖描述了 Java 進程與競爭的語言、框架(如 Node.js 和 Go)之間內存資源使用的差異。Java HotSpot 佔用資源最大,其中包括每個 Java 虛擬機 (JVM)實例分配的堆內存。中間顯示了 Node.js 每個進程要比 Java 小得多。最後,Go 是一種流行的雲服務編程語言,因為它的內存消耗最低。
如你所見,當你在這張圖從左到右走,你會看到更密的節點。這就是開發人員在雲、容器和 Kubernetes 上編寫無伺服器應用程序時迴避 Java(包括 Spring Boot,一種頑固的微服務 Java 框架)的原因。
下一步是什麼?
企業可以通過實現無伺服器應用程序獲得明顯的好處,但是資源密度問題導致他們避免使用 Java 堆棧在 Kubernetes 上開發無伺服器應用程序開發。但是選擇其他語言會給全球數百萬 Java 開發人員帶來學習負擔。因此,在本系列的下一篇文章中,我將指導你如何開始使用 Java 無伺服器函數,而不是使用其他語言。
via: https://opensource.com/article/21/5/what-serverless-java
作者:Daniel Oh 選題:lujun9972 譯者:DCOLIVERSUN 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive