精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

云原生時代,Java還是Go?

開發 后端 云原生
Java曾經著名的座右銘:"一次編寫,到處運行",已經很過時了,因為現在我們只想在容器里運行代碼。在容器里,一個 "Just in time "的編譯器意義不大。

Java曾經著名的座右銘:"一次編寫,到處運行",已經很過時了,因為現在我們只想在容器里運行代碼。在容器里,一個 "Just in time "的編譯器意義不大。

出于這個原因,可能為了更好地適應云計算,Java生態系統正處于轉型之中。Oracle 的GraalVm允許將字節碼編譯成Linux可執行文件(ELF),而Rad Heat的Quarkus以及其他框架,則立志讓響應式服務這件事變得更簡單。Quarkus以Netty和Vertx.x為核心,可以用來構建非常高效的響應式Web服務。

 

Java編譯成可執行二進制文件,以毫秒級的速度啟動,內存占用很小。這樣就可以利用Java生態系統,甚至可以用其他JVM語言(如Scala和Kotlin)編寫。你可以用online項目生成器玩玩Quarkus,或者用maven插件在本地生成一個項目。

而Golang則是為云而生的,在容器中運行時,沒有遺留負擔。它被認為是云端的編程語言。生成的二進制可執行文件很小,快速啟動,內存占用也很小,而且這是從Go誕生之初就具備的特性。Golang的流行對 Java 世界形成了嚴峻的挑戰。

Java有機會嗎,也許只有時間才會告訴我們最終答案。然而,出于好奇,我想從性能和開發體驗方面比較一下 Java 和 Golang 的云原生服務。

在這篇文章中,我將使用兩種語言來寫同樣的服務。比較它們的CPU使用率、RAM、延遲和運行速度。這些服務將在容器中啟動,資源分配相同,使用ab來測試。

對于我的案例來說,這是一個 "足夠好 "的基準,因為我不假設找到最好/最差的基準結果,而是在同一環境下執行運行兩個基準測試進行比較。

場景

這兩個服務將連接到在另一個容器中運行的MySQL數據庫,有一個表和三行數據。

 

每一個服務都會獲取所有記錄,將它們轉化為對象,然后輸出JSON數組。

ab將發出10K請求,并發級別為100,quarkus JVM版本運行兩次(用于測試 "冷"/"暖 "JVM)。

 

Go語言版本

Go語言版本使用gin框架。

  1. # the service 
  2. package main 
  3.  
  4. import ( 
  5.     "database/sql" 
  6.     "fmt" 
  7.     "github.com/gin-gonic/gin" 
  8.     _ "github.com/go-sql-driver/mysql" 
  9.     "net/http" 
  10.  
  11. type Fruit struct { 
  12.     Id  int `json:"id"
  13.     Name string `json:"name"
  14.  
  15. var con *sql.DB 
  16.  
  17. func init(){ 
  18.   //opening a mysql connection pool with another container 
  19.    db, err := sql.Open("mysql""root:password@tcp(host.docker.internal:3306)/payments"
  20.    if err != nil { 
  21.        panic("failed to open a mysql connection"
  22.    } 
  23.    con = db 
  24.  
  25. func main() { 
  26.     r := gin.Default() 
  27.     r.GET("/fruits", fruits) 
  28.     r.Run() //server up on 8080 
  29.  
  30. // THE REQUEST HANDLER 
  31. func fruits(c *gin.Context) { 
  32.     fruits := getFruits() 
  33.     c.JSON(http.StatusOK, fruits) 
  34.  
  35. func getFruits() []Fruit { 
  36.     rows, _ := con.Query("SELECT * FROM fruits"
  37.     fruits := []Fruit{} 
  38.     for rows.Next() { 
  39.         var r Fruit 
  40.         rows.Scan(&r.Id, &r.Name
  41.         fruits = append(fruits, r) 
  42.     } 
  43.     return fruits 

Golang的MySQL驅動的使用go-sql-driver。golang的代碼風格是非常明確的。一種一切都在眼前態度。主函數啟動服務器,配置請求處理程序,打開DB連接。

編譯本地可執行文件

 

Kotlin版本

  1. package org.acme 
  2. import io.vertx.core.json.JsonArray 
  3. import io.vertx.core.json.JsonObject 
  4. import io.vertx.mutiny.mysqlclient.MySQLPool 
  5. import io.vertx.mutiny.sqlclient.Row 
  6. import io.vertx.mutiny.sqlclient.RowSet 
  7. import java.util.concurrent.CompletionStage 
  8. import javax.inject.Inject 
  9. import javax.ws.rs.GET 
  10. import javax.ws.rs.Path 
  11. import javax.ws.rs.Produces 
  12. import javax.ws.rs.core.MediaType 
  13.  
  14. @Path("/fruits"
  15. class FruitResource { 
  16.     @field:Inject 
  17.     lateinit var client: MySQLPool 
  18.  
  19.  
  20.     @GET 
  21.     @Produces(MediaType.APPLICATION_JSON) 
  22.     fun listFruits(): CompletionStage<JsonArray> { 
  23.         return client.query("SELECT * FROM fruits").execute() 
  24.                 .map { rows: RowSet<Row> -> 
  25.                     rows.fold(JsonArray()) { array, row -> 
  26.                         array.add(JsonObject() 
  27.                                 .put("id", row.getLong("id")) 
  28.                                 .put("name", row.getString("name"))) 
  29.                     } 
  30.                 }.subscribeAsCompletionStage() 
  31.     } 

數據庫連接使用Quarkus React Mysql 擴展。

 

與Go版本相比,代碼有很大不同,比如CDI依賴注入,使用javax注釋的聲明式路由,自動配置解析,以及數據源/連接創建/服務器引導。這是使用框架的代價,它為你完成了繁重的工作,并決定了做事方式。不過,它比go版本代碼要簡短很多。

這里使用Netty響應式web服務器,由Vert.x多事件循環包裝,還有一個Vert.x響應式MySQL驅動,這樣可以用一個線程處理多個DB連接。

另外,我可以使用Kotlin的集合庫的fold函數,這種函數還沒有通用的Go版本。

編譯Java版本的可執行文件

 

我已經弄清楚構建過程中發生了什么,其核心是SubstrateVM。它被設計在AOT過程中的可嵌入虛擬機,它會鏈接到我們的代碼,并作為一個單元進行編譯。然而根據Oracle的說法,SubstrateVM的優化比HotSpot Vm少,垃圾收集器也比較簡單。

該AOT編譯器被稱為 "Graal",它是語言不相關的。java字節碼需要被翻譯成一種中間表示法(Truffle語言)。這在這篇文章【1】中可以找到關于Graal和Truffle的相關論述。

構建一個 Java 本地可執行文件看起來更復雜,編譯得更慢,它產生的二進制文件幾乎是Go版本兩倍大小。然而一個35M的可執行二進制文件和Java FatJar相比,還是小D多了。35MB甚至可以讓你使用aws lambda運行。

壓力測試

我在本機運行所有測試,設置如下。

  • MacBook Pro(15英寸,2017年
  • 2.9 GHz英特爾酷睿i7(8個核心)。
  • 16 GB 2133 MHz LPDDR3

使用cAdvisor的工具來監控容器的統計數據。

場景

  • Quarkus JVM hotspot
  • Quarkus Java native
  • Golang

上述的每種情況都在以下三種配置上測試

  • 100MB / 0.5 CPU | 200MB / 1 CPU | 300MB / 2 CPU

我主要關注:

  • cpu/ram利用率(多核的利用率)
  • cpu/ram峰值
  • cpu/ram空余
  • 啟動時間
  • 響應延遲avg/max
  • 吞吐量(每秒請求數)

測試結果

 

看起來Quarkus已經為生產環境做好準備了,它允許簡單的JVM/原生發布/開發 模式,并允許在本地運行原生測試。只要你不使用反射或JNI,根據GraalVM的配置就是可行的。否則,你將不得不自己配置graal編譯器,然而現在也有解決方案。

延遲和吞吐量

Golang 和原生 Java 的測試結果比較接近,雖然平均來說 Golang 版本的測試結果略好一些。不過,Java Native版本的測試結果更穩定。Golang服務有時在1.25μs內完成響應,也有一部分需要7s才能完成。

"預熱 "后的JVM版本結果也不差,但比Native或Go版本稍遜一籌。

CPU利用率

使用0.5核的時候,Go和native-java在負載下似乎都表現不佳,而用2核啟動時,也沒有明顯改善。這可能是因為工作負載的瓶頸是IO。或者是因為gin/Netty的默認配置沒有考慮到多核的問題。

而JVM版本則利用了所有給定的核心,并在各個維度上提升了性能。

內存使用率

在壓力下,Java native 使用40MB,Golang 使用24MB。兩種情況下都還不錯,雖然Golang版本使用的內存幾乎少了一倍。

JVM使用了140MB。和Quarkus官方的統計完全一樣。對于JVM來說還不錯,但比Golang版本多了近6倍。

啟動時間

Golang和cloud-native java都能立即啟動,然而JVM版本需要幾秒鐘(取決于分配的CPU),并且在啟動時產生CPU峰值。如果配置不當,會導致k8s HPA發飆,并增加pods。

開發體驗

這與其說是一個實際問題,不如說是一個宗教問題。Quarkus 使用了在 Java 世界中很常見的抽象(比如基于注解的DI)。它為你啟動服務并創建連接池。它可以使用豐富的集合標準庫和generics。然而,這可能感覺有點像黑魔法,一旦有些組件不工作,你會感覺很無助。此外,將 Java 代碼編譯成原生二進制并不是那么簡單,有一些限制和注意事項是你必須知道的,并非每個Java庫都能兼容原生編譯。一旦使用一個不兼容的庫(比如Guice),你就需要自己配置Graal VM。

Quarkus 和 Graal VM "相對 "較新。所以可能會有一些問題。但由于雙模式(JVM或原生)。在原生版本的某些組件停止工作的情況下,總是有一個后備方案,這對任何新問題來說都是很好的變通方法。

另一方面,Golang 在成立10年后才承認它需要generics。而且它肯定不喜歡框架使用很多魔法操作。這在很多方面既是好事也是壞事。此外,盡管 Go 社區做的非常好,然而可用的工具和庫還是相對較少。然而它的編譯和構建過程更快/更簡單。而且兼容每個Golang的包,沒有java-native平臺帶來的限制。

結論

Java已經為云原生做好了準備,Golang并沒有大幅度領先。相信未來Cloud Native Java會被大規模使用。

 

原文地址:https://medium.com/swlh/cloud-native-java-vs-golang-2a72c0531b05

本文轉載自微信公眾號「高可用架構」,可以通過以下二維碼關注。轉載本文請聯系Igor Domrev 公眾號。 

 

責任編輯:武曉燕 來源: 高可用架構
相關推薦

2019-09-20 13:37:50

Java云原生Docker

2025-06-04 10:08:00

Go開發云原生

2020-08-28 08:29:40

云原生微服務編程

2023-08-28 16:08:12

2021-08-09 11:43:02

容器云原生安全

2022-06-22 09:24:30

云原生Go 語言

2019-07-04 17:28:04

騰訊云云原生開源

2020-10-21 10:04:56

云原生應用架構

2021-08-23 13:50:46

云原生PaaS

2022-05-26 11:50:15

云原生云安全

2022-01-14 07:17:39

阿里云云原生經濟

2020-12-01 17:44:15

華為云Go語言云原生

2012-09-26 10:59:52

大數據云計算云服務

2021-03-23 11:09:36

云計算

2022-10-27 18:03:04

GogRPC云原生

2022-11-30 18:38:50

2023-11-30 16:42:21

2021-12-08 12:03:09

金融科技云原生

2018-11-19 15:14:36

華為云
點贊
收藏

51CTO技術棧公眾號

欧美成欧美va| 91视频免费版污| 少妇精品高潮欲妇又嫩中文字幕| 夜夜嗨网站十八久久| 亚洲精品中文字幕av| 欧美 日韩 国产 激情| 黄色片网站在线观看| av在线不卡观看免费观看| 国产91露脸中文字幕在线| 国产精品国产三级国产传播| 美女视频亚洲色图| 欧美日韩精品一区二区三区四区| 国产a级黄色大片| 撸视在线观看免费视频| 国产精品资源网站| 国产suv精品一区二区| 无码人妻精品一区二区三区夜夜嗨 | 大美女一区二区三区| 国产成人啪精品视频免费网| 农村妇女精品一区二区| 国产精品一区二区99| 日韩视频一区二区三区在线播放| aⅴ在线免费观看| 天天色天天射天天综合网| 久久精品视频网| av在线不卡观看| 在线观看日韩一区二区| 一本色道久久综合亚洲精品不卡| 日韩日本欧美亚洲| 中国毛片在线观看| 国产主播性色av福利精品一区| 91成人看片片| 18禁免费观看网站| 影音先锋在线播放| 国产精品久久久久久久裸模| 久久久综合香蕉尹人综合网| 国产美女永久免费| 免费在线一区观看| 欧美中文在线视频| 久久久无码精品亚洲国产| 久久人人99| 在线精品91av| 免费网站在线高清观看| 奇米777国产一区国产二区| 日韩午夜三级在线| 91亚洲一区二区| 亚洲精品aa| 欧美日韩精品欧美日韩精品一综合| av7777777| av在线私库| 亚洲成a人在线观看| 国产高清不卡无码视频| 操你啦在线视频| 最新国产の精品合集bt伙计| 亚洲国内在线| 欧美日韩xx| 国产精品国产自产拍高清av| 亚洲图片欧洲图片日韩av| 国产免费视频在线| 久久精品一区二区三区四区| 欧美日韩喷水| 国产小视频在线观看| 国产日韩精品一区二区浪潮av| 久久久婷婷一区二区三区不卡| 午夜小视频在线播放| www.欧美.com| 美日韩免费视频| 男生女生差差差的视频在线观看| 久久久久久免费| 日韩精彩视频| 九色porny在线| 夜夜嗨av一区二区三区四季av | 国产精品爽爽爽| japanese国产在线观看| 免费成人在线视频观看| 国产三级精品网站| 亚洲国产福利视频| 91女人视频在线观看| 欧洲精品国产| 欧美成人三区| 亚洲国产精品尤物yw在线观看| 老太脱裤让老头玩ⅹxxxx| 国产精品伦理| 欧美男男青年gay1069videost| 亚洲自拍第三页| eeuss国产一区二区三区四区| 亚洲国产欧美在线成人app| 精品人妻少妇嫩草av无码| 成人影院天天5g天天爽无毒影院| xxx成人少妇69| 日韩 国产 在线| 日韩精品成人一区二区三区| 91精品国产综合久久香蕉最新版 | 欧美第一黄网| 午夜激情在线观看| 亚洲一区二区三区国产| 日韩有码免费视频| 91视频亚洲| 亚洲精品mp4| 国产在视频线精品视频| 黄色综合网站| 国产精品久久久久久中文字| av高清一区二区| www激情久久| 欧美少妇一区二区三区| 天天免费亚洲黑人免费| 日韩欧美一区二区免费| 右手影院亚洲欧美| 欧美激情第10页| 国产精品爱久久久久久久| www男人的天堂| 国产日韩欧美精品一区| 成人免费在线网| jizz欧美| 亚洲精品国产精品国自产观看浪潮 | 秋霞影院一区| 亚洲一区二区久久久| 久久精品国产亚洲AV无码麻豆 | 免费观看成年人视频| 国产精品沙发午睡系列990531| 91免费黄视频| 精品国产一区二区三区性色av| 亚洲欧洲免费视频| 国产香蕉在线视频| 国产制服丝袜一区| 先锋影音欧美| av综合电影网站| 日韩一级免费观看| 日韩精品一区二区三区在线视频| 久久综合九色综合欧美狠狠| 国产精品久久久一区二区三区| 美女免费久久| 欧洲视频一区二区| 伊人网伊人影院| 99精品免费网| 国产精品日本一区二区| av色综合久久天堂av色综合在| 欧美午夜精品一区二区三区| 一本加勒比北条麻妃| 亚洲日本国产| 国产精品视频入口| 菠萝蜜视频国产在线播放| 欧美日韩卡一卡二| 三年中国中文观看免费播放| 六月丁香综合| 欧美精品二区三区四区免费看视频| 免费电影视频在线看 | 四虎精品在永久在线观看| 亚洲男同性恋视频| www.51色.com| 一区二区蜜桃| 91精品在线国产| 麻豆网在线观看| 欧美精品电影在线播放| 久久99久久99精品免费看小说| 美女性感视频久久| 一区二区在线中文字幕电影视频| 国产福利亚洲| 精品国产一区二区三区久久| 一级aaaa毛片| 亚洲欧美一区二区三区孕妇| 欧美色图校园春色| 黑丝一区二区| 久久av一区二区三区亚洲| 在线视频cao| 在线观看欧美视频| av免费在线不卡| 一区二区三区四区不卡视频| 高清中文字幕mv的电影| 日韩午夜在线| 日本欧美色综合网站免费| 最新日韩一区| 欧美大奶子在线| 二区三区在线视频| 色综合久久久久网| 美女福利视频网| 国产高清不卡二三区| xxxx18hd亚洲hd捆绑| 图片婷婷一区| 国产精品中文字幕久久久| www在线视频| 亚洲国产精品国自产拍av秋霞| 亚洲高清毛片一区二区| 欧美韩国日本综合| 亚洲精品在线网址| 亚洲麻豆一区| 亚洲精品国产一区| 91大神精品| 欧美做爰性生交视频| 日本在线免费网| 337p日本欧洲亚洲大胆精品| 国产免费一区二区三区四区五区| 中文字幕日韩一区| free性中国hd国语露脸| 麻豆专区一区二区三区四区五区| 国产片侵犯亲女视频播放| 国产欧美日韩免费观看 | 97久久综合区小说区图片区| 奇米四色中文综合久久| 激情在线小视频| 日韩精品亚洲精品| 99久久精品国产一区色| 一本大道久久精品懂色aⅴ | 欧美gay男男猛男无套| www.久久久| 精品国产欧美日韩一区二区三区| 欧美大片免费观看在线观看网站推荐| 青青国产在线| 日韩欧美在线影院| 中文字幕一区二区人妻痴汉电车| 一区二区三区加勒比av| 国产精品久久久视频| av不卡在线播放| 久久久久xxxx| 爽爽淫人综合网网站| 国产美女在线一区| 亚洲精品国产首次亮相| 日韩欧美亚洲v片| 欧美日韩破处| 99中文视频在线| 日韩午夜视频在线| 国产成人一区二区三区| 91福利区在线观看| 欧美精品生活片| 五月婷婷在线观看| 亚洲欧美日韩精品久久奇米色影视 | 久久香蕉精品| 蜜臀av无码一区二区三区| 99精品全国免费观看视频软件| 欧美二区在线| 欧美顶级毛片在线播放| 懂色一区二区三区av片| 国产电影一区| 成人a视频在线观看| 99re久久| 国产精品久久久久久久久久久不卡| 日本不卡免费高清视频在线| 高清一区二区三区日本久| 伊人电影在线观看| 久久精品人人爽| 午夜在线播放| 中国china体内裑精亚洲片| 久久电影中文字幕| 亚洲欧美色婷婷| 四虎在线免费观看| 亚洲欧美国产一本综合首页| 五月天激情婷婷| 亚洲精品久久久久久下一站| 少妇精品视频一区二区| 亚洲成av人片在线观看香蕉| 成人精品在线播放| 精品国产免费人成电影在线观看四季| 国产欧美综合视频| 日韩午夜在线观看| 后入内射欧美99二区视频| 欧美精品一区男女天堂| 国模无码一区二区三区| 精品国产免费久久 | 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 日韩高清av| 日本一区二区免费高清| 一区二区精品在线观看| 国产精品久久久久9999赢消| 久久av喷吹av高潮av| 欧美久久一级| 国产免费观看高清视频| 美女网站久久| 尤物国产在线观看| 国产麻豆精品一区二区| 日韩成人av影院| 97国产精品videossex| 在线不卡av电影| 中文字幕在线观看一区二区| 一级黄色录像视频| 亚欧色一区w666天堂| 秋霞av一区二区三区| 欧美区一区二区三区| 国产成人精品一区二三区四区五区| 精品国产电影一区二区| 你懂的在线播放| 久久久999精品视频| 极品视频在线| 国产精品毛片a∨一区二区三区|国| 欧美风情在线视频| av成人午夜| 国产伦精品一区二区三区视频 | 免费a级在线播放| 久久久久久午夜| 成人亚洲欧美| 亚洲xxxxx| 日韩理论电影中文字幕| 亚洲一区二区三区午夜| 欧美视频亚洲视频| 亚洲视频在线观看一区二区三区| 国产一区免费电影| 少妇精品一区二区三区| 亚洲三级小视频| 国产区一区二区三| 91精品国产91热久久久做人人| 天天操天天干天天干| 久久激情五月丁香伊人| 中国字幕a在线看韩国电影| 91美女高潮出水| 亚洲免费专区| 欧美 日韩 国产精品| 日韩国产在线观看| 成人做爰www看视频软件| 欧美经典一区二区三区| 国产无码精品久久久| 欧美猛男gaygay网站| 青青草视频在线免费观看| 久久成人av网站| av亚洲一区二区三区| 国产精品永久入口久久久| 全球成人免费直播| 成人免费观看视频在线观看| 国产精品538一区二区在线| 蜜桃av乱码一区二区三区| 亚洲成av人片在www色猫咪| 国产精品伊人久久| 中文字幕免费精品一区高清| 成人ssswww在线播放| 国产日韩欧美中文在线播放| 精品中文一区| 日本一区午夜艳熟免费| 乱一区二区av| 精品一区二区三区蜜桃在线| 欧美日韩精品在线播放| 成 人片 黄 色 大 片| www.亚洲人.com| 成人精品国产亚洲| 日韩国产在线一区| 免费视频一区| 亚洲制服丝袜在线播放| 亚洲一区二区三区四区在线| 97人妻精品一区二区三区动漫| 亚洲色图色老头| 筱崎爱全乳无删减在线观看| 国产免费一区二区三区| 欧美freesex交免费视频| 高潮一区二区三区| 国产精品乱人伦| 国产日韩久久久| 一区二区三区国产在线观看| 芒果视频成人app| 久久久久久久久久久久久久久久av| 亚洲精品影院在线观看| 69xxx免费视频| 亚洲国产精品久久一线不卡| 亚洲欧美另类综合| 国内偷自视频区视频综合| 精品av导航| 成人av一级片| 91色婷婷久久久久合中文| 国产三级av片| 亚洲香蕉伊综合在人在线视看| 亚洲精品一区| 日韩免费av电影| 麻豆一区二区在线| 色偷偷男人天堂| 欧美电影一区二区| 免费在线中文字幕| 久久久久久国产精品免费免费| 亚洲欧美成人综合| 一级黄色片网址| 在线播放/欧美激情| av片在线观看永久免费| 高清国语自产拍免费一区二区三区| 国产精品v日韩精品v欧美精品网站 | 亚洲成人精品久久| 中文不卡1区2区3区| 日韩电影免费观看在| 黑人精品欧美一区二区蜜桃| 青娱乐国产在线| 亚洲国产精品悠悠久久琪琪| 欧美男男tv网站在线播放| 欧美一区二区综合| 麻豆视频观看网址久久| 欧美三级在线免费观看| 亚洲精品在线观| 日韩电影免费观| 国产a级片免费看| 成人精品小蝌蚪| 欧美三级网站在线观看| 久久伊人精品一区二区三区| 国产suv精品一区| 欧美性猛交久久久乱大交小说| 国产精品国产精品国产专区不蜜| 午夜精品久久久久久久96蜜桃| 91av在线看| 久久精品av| 亚洲av成人精品一区二区三区| 色婷婷国产精品综合在线观看| 欧美成人高清在线| 久久久精彩视频| 激情久久五月天| 久久黄色精品视频| 久久久久www| 国产不卡一二三区| 最新版天堂资源在线|