幾十年來,企業(yè)已經(jīng)在各種平臺(tái)上開發(fā)了業(yè)務(wù)關(guān)鍵型應(yīng)用程序,包括物理服務(wù)器、虛擬機(jī)和云環(huán)境。各個(gè)行業(yè)中的這些應(yīng)用程序有一個(gè)共同點(diǎn),那就是它們需要連續(xù)可用(24x7x365),以保證穩(wěn)定性、可靠性和性能,而不管需求如何。因此,即使實(shí)際資源利用率低于50%,每個(gè)企業(yè)都必須承擔(dān)維護(hù)基礎(chǔ)設(shè)施(如CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)的高成本。
無服務(wù)器架構(gòu)就是為了幫助解決這些問題。無服務(wù)器允許開發(fā)人員按需構(gòu)建和運(yùn)行應(yīng)用程序,保證了高可用性,而無需在多云和混合云環(huán)境中管理服務(wù)器。在幕后,仍有許多服務(wù)器處于無服務(wù)器拓?fù)渲校鼈兪菑膽?yīng)用程序開發(fā)中抽象出來的。相反,云提供商使用無服務(wù)器服務(wù)進(jìn)行資源管理,如資源調(diào)配、維護(hù)、聯(lián)網(wǎng)和擴(kuò)展服務(wù)器實(shí)例。
由于其有效性,無服務(wù)器開發(fā)模式現(xiàn)在成為希望按需啟動(dòng)業(yè)務(wù)應(yīng)用程序而不是一直運(yùn)行它們的企業(yè)的必需。
已經(jīng)有許多開源項(xiàng)目來管理Kubernetes集群上的無服務(wù)器應(yīng)用程序,這些應(yīng)用程序通過虛擬機(jī)上的Linux容器包進(jìn)行管理。CNCF的Interactive Serverless Landscape是一個(gè)開源項(xiàng)目、工具、框架和公共云平臺(tái)的指南,使DevOps團(tuán)隊(duì)能夠處理無服務(wù)器應(yīng)用程序。
開發(fā)人員可以編寫代碼,并將其快速部署到各種無服務(wù)器環(huán)境中。然后,無服務(wù)器應(yīng)用程序響應(yīng)需求并根據(jù)需要自動(dòng)上下擴(kuò)展。
你可能想知道,什么編程語言和運(yùn)行時(shí)最適合無服務(wù)器應(yīng)用程序開發(fā),以便與上圖中的技術(shù)集成?這個(gè)問題的答案不止一個(gè),讓我們來討論在企業(yè)生產(chǎn)環(huán)境中開發(fā)業(yè)務(wù)應(yīng)用程序最流行的應(yīng)用程序運(yùn)行時(shí):Java。
根據(jù)Developer Economics的數(shù)據(jù),截至2020年第3季度,仍有800多萬企業(yè)級(jí)開發(fā)人員使用Java來實(shí)現(xiàn)其業(yè)務(wù)需求。然而,根據(jù)NewRelic在2020年的一項(xiàng)調(diào)查,Java(6%)顯然不是使用流行云服務(wù)的有遠(yuǎn)見的開發(fā)人員的首選。
關(guān)于無服務(wù)器運(yùn)行時(shí)和語言的NewRelic數(shù)據(jù)
在無服務(wù)器開發(fā)中,資源使用、響應(yīng)時(shí)間和延遲是至關(guān)重要的。公共云提供商提供的無服務(wù)器服務(wù)通常是按需計(jì)費(fèi)的,只有在無服務(wù)器應(yīng)用程序啟動(dòng)時(shí),才會(huì)通過事件驅(qū)動(dòng)的執(zhí)行模型收費(fèi)。因此,當(dāng)無服務(wù)器應(yīng)用程序處于空閑狀態(tài)或縮減為零時(shí),企業(yè)不需要支付任何費(fèi)用。
Java在容器領(lǐng)域的狀態(tài)
在這種背景下,你可能會(huì)問:“既然現(xiàn)有的業(yè)務(wù)應(yīng)用程序很可能是基于Java技術(shù)開發(fā)的,那么開發(fā)人員為什么不嘗試使用Java堆棧進(jìn)行無服務(wù)器應(yīng)用程序的開發(fā)呢?”
這里有一個(gè)隱藏的事實(shí):在新的不變基礎(chǔ)設(shè)施(也稱為容器平臺(tái),如Kubernetes)中很難優(yōu)化Java應(yīng)用程序。
內(nèi)存資源使用的差異
此圖描述了Java進(jìn)程與其他語言和框架(如Node.js和Go)之間在內(nèi)存資源使用方面的差異。JavaHotSpot的占用空間最大,它包括為每個(gè)Java虛擬機(jī)(JVM)實(shí)例分配的堆內(nèi)存。中間部分顯示了Node.js上的每個(gè)進(jìn)程與Java相比要小得多。最后,Go是云上流行的一種編譯語言,因?yàn)樗膬?nèi)存消耗很低。
如你所見,在這張圖上,從左到右,密度增加。這就是開發(fā)人員在云端、容器和Kubernetes上編寫無服務(wù)器應(yīng)用程序時(shí)回避Java(包括Spring Boot,一個(gè)微服務(wù)框架)的原因。
下一步是什么?
企業(yè)可以通過實(shí)現(xiàn)無服務(wù)器應(yīng)用程序獲得顯著的好處,但是資源密度問題導(dǎo)致它們避免使用Java堆棧在Kubernetes上開發(fā)無服務(wù)器應(yīng)用程序。但是選擇一種不同的語言會(huì)給全球數(shù)以百萬計(jì)的Java開發(fā)人員帶來負(fù)擔(dān)。因此,使用Java無服務(wù)器功能(而不是選擇不同的語言)是一個(gè)折中。
原文鏈接:
https://opensource.com/article/21/5/what-serverless-java