為什麼JVM平臺對於無伺服器FaaS來說是個壞主意? - frankel
JVM平臺是一個很好的技術產品。特別是,抽象層允許 JVM 將位元組碼編譯為適合工作負載的本機程式碼。這就是為什麼即使 C/C++ 編譯的應用程式更接近裸機,JVM 也能夠在效能方面與它們競爭 - 甚至獲勝的原因。
然而,這種優化是有代價的:JVM 需要時間來預熱,例如,將類載入到記憶體中。這就是為什麼在 JVM 上的效能測試需要幾輪熱身。出於這個原因,JVM 非常適合長時間執行的程式,與整個生命週期程式相比,啟動時間可以忽略不計。應用伺服器是此類用例的典型代表:一旦啟動,就應該執行很長時間,比如幾天,這是非常保守的。在這方面,一分鐘的啟動時間毫無意義。
現在FaaS來了 。
在做任何事情之前,我們應該首先解決 FaaS 和 Serverless 的定義。
檢視維基百科上的人都同意的內容:
無伺服器計算是一種雲端計算執行模型,其中雲提供商執行伺服器,並動態管理機器資源的分配。定價基於應用程式消耗的實際資源量,而不是預先購買的容量單位。
函式即服務 (FaaS) 是一種雲端計算服務,它提供了一個平臺,允許客戶開發、執行和管理應用程式函式,而無需構建和維護通常與開發和啟動應用程式相關的基礎設施的複雜性。
從上面的定義來看:
無伺服器是關於資源的管理
您需要動態處理它,屬性是彈性
FaaS 是關於程式碼的大小
規模的演變從成熟的應用程式到微服務再到函式。
因此,FaaS 意味著無伺服器。
在 JVM 上下文中,FaaS 意味著 JVM 啟動、函式執行、然後一切都被丟棄。在這種情況下,啟動時間對整體執行時間有重大影響。此外,JVM 沒有時間將位元組碼編譯為本機程式碼:它還處於“冷態”。
一些人建議在 JVM 執行之後一直保持它,這樣避免支付啟動時間的成本。實現這一點非常簡單:只需比 FaaS底層銷燬JVM速度更快地速度向函式傳送請求(一直保持請求活躍,類似快取擊中率)。然而,它違背了無伺服器的目的,因為彈性屬性現在已經消失了。
這一分析適用於 Kotlin、Java、Scala、Groovy、Clojure 以及在 JVM 之上執行的所有其他語言。即使我喜歡 Kotlin,這也是行不通的:除非沒有人需要 FaaS 方法提供的彈性。
兩全其美的方法有嗎?
然而,並沒有失去所有希望。有很多方法可以使用 Kotlin 並且仍然能夠從 FaaS 中受益。既然FaaS的問題是JVM,那為什麼不去掉呢?有兩種簡單的方法可以實現:
- 使用 Graal 的原生映象
GraalVM 是一組不同的技術。其中包括SubstrateVM:它允許將 JAR(或類)轉換為本地可執行檔案。然後,您可以將生成的應用程式包裝到 Docker 容器中,該容器必須與您選擇的 FaaS 框架相容。這是這種方法的一個示例。
- 轉換為 JavaScript
另一種選擇是將 Kotlin 轉換為 JavaScript。JavaScript 不需要執行 JVM 平臺。然後,可以將程式碼包裝到上述容器中或直接打包到 ZIP 存檔中。後一個選項可以在專有基礎設施上執行,例如 AWS Functions。
這兩種方法都需要一個可靠的構建管道,以從 Kotlin 開始並以 Docker 容器(或 ZIP)結束。與原始設計一樣,他們既需要單元測試來測試程式碼是否正確,也需要整合測試來測試最終工件是否按預期工作。
結論
人們需要了解大多數技術的背景上下文,您(可能)不需要微服務、FaaS 或任何目前流行的炒作技術。但是,通過了解它們的利弊,您將能夠在適當的時候利用它們。
就目前而言,將 JVM 與 FaaS 結合使用是不明智的。這並不意味著您根本不能使用 Kotlin。
相關文章
- 為什麼說集中管理資料是個壞主意?
- 【轉載】微服務是個壞主意嗎?微服務
- 接入直播美顏SDK對於平臺來說有什麼意義?
- 為什麼說 2021 年 4 月 2 日對遊戲圈來說是一個無聲的拐點?遊戲
- 為什麼說HRMS對於零售業來說非常重要?
- 美顏SDK對於如今的直播平臺來說是剛需嗎?
- 什麼資料對於雲伺服器來說風險很大伺服器
- 為何說「換電」不是個好主意?
- API優先(API-first)是一個壞主意! - stilkovAPI
- 對於初學者來說,最好的程式語言是什麼?
- 為什麼說 Serverless 是雲的未來?Server
- 什麼是功能即服務(FaaS)?
- (分享)為什麼說React是UI的未來ReactUI
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 什麼是平臺工程?
- 對於開發者來說,有哪些非常優秀的平臺?
- 為什麼說DeFi是真正新的借貸P2P平臺? -daniel
- 為什麼它有典型FaaS能力,卻是非典型FaaS架構?架構
- 為什麼OilStates案對於開源界是個好訊息
- Torrent 提速為什麼總是無濟於事
- 【譯】為什麼 React16 對開發人員來說是一種福音React
- 為什麼專案管理平臺越來越普及?專案管理
- 什麼是雲管理平臺?星外和ZKEYS哪個平臺好用?
- 為什麼說雲遊戲是未來戰略要塞?遊戲
- 對於 basis 管理員來說,ABAP Platform 意味著什麼Platform
- 什麼是YottaChain儲存,為什麼說是未來資料儲存的趨勢?AI
- 什麼是平臺化?平臺化是如何發展的?
- epic是什麼平臺 epic和steam哪個好
- 為什麼有人說無程式碼和低程式碼軟體行業破壞者?行業
- 低程式碼平臺能為企業帶來什麼?
- TSBS 是什麼?為什麼時序資料庫 TDengine 會選擇它作為效能對比測試平臺?資料庫
- 雲平臺是什麼?知名雲平臺有哪些?
- 為什麼說 HTTPS 是安全的?HTTP
- 為什麼說 TCP 是安全的TCP
- 為什麼說一個好的Java程式設計師,是無碼勝有碼?Java程式設計師
- 為什麼說軟體服務的未來必然是WebAssembly?Web
- 為什麼說敏捷開發是應用程式的未來?敏捷
- 為什麼企業要求學歷?對於程式設計師來說學歷重要嗎?程式設計師