精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品国产乱码久久| 中文在线一区二区| 国外色69视频在线观看| 一级全黄裸体片| 美女网站视频在线| 久久综合九色综合97婷婷| 国产精品91在线| 日韩av手机在线免费观看| 成人福利一区二区| 亚洲一区二区欧美激情| 国内精品视频在线播放| www.日韩一区| 欧美日韩天堂| 亚洲男人天堂久| 国产乱码一区二区三区四区| 久久av色综合| 久久久久免费观看| 成人欧美在线观看| 欧美激情黑白配| 久久国产综合| 日韩精品高清在线| 国产a级片免费观看| av网站免费在线观看| 91亚洲精品久久久蜜桃网站| 国产精品∨欧美精品v日韩精品| 成人免费视频国产免费观看| 精品久久对白| 欧美日韩国产美女| 真实国产乱子伦对白视频| 青青久草在线| 国产尤物一区二区在线| 奇门遁甲1982国语版免费观看高清 | 97人人模人人爽人人澡| 精品极品在线| 亚洲女人****多毛耸耸8| 免费亚洲一区二区| 亚洲精品福利网站| 久久av资源站| 日本精品免费一区二区三区| 激情五月婷婷在线| 成人黄色小视频| 亚洲激情视频网| 91精产国品一二三产区别沈先生| 男人皇宫亚洲男人2020| 亚洲一区二区三区视频在线播放| 亚洲美女网站18| 久久精品蜜桃| av在线播放不卡| 97se视频在线观看| 国产又粗又猛又黄又爽无遮挡| 日韩视频一区二区三区在线播放免费观看 | 国产精品水嫩水嫩| 精品毛片久久久久久| 国产黄色美女视频| 视频一区视频二区中文| 午夜精品在线观看| 国产真实乱人偷精品视频| 在线成人激情| 日韩中文理论片| 成年人网站免费看| 免费日韩一区二区三区| 欧美一级免费大片| 国产色视频在线播放| 小草在线视频免费播放| 午夜精品福利一区二区三区av| 无码毛片aaa在线| caopo在线| 亚洲乱码国产乱码精品精98午夜 | 国产福利一区视频| 成人性生交大片免费观看网站| 亚洲图片自拍偷拍| 免费特级黄色片| 啊啊啊久久久| 婷婷一区二区三区| 男女激情无遮挡| 菠萝蜜视频在线观看www入口| 一区二区三区精品视频在线| 国产成人一区二区三区别| 青青草原av在线| 亚洲成a人片在线观看中文| 国产a级片网站| av小说在线播放| 欧美性色xo影院| 手机看片福利日韩| 日韩免费电影| 色偷偷成人一区二区三区91| 看欧美ab黄色大片视频免费 | www.黄色网| 亚洲超碰在线观看| 精品国产露脸精彩对白| 91丝袜在线观看| 久操成人av| 中日韩美女免费视频网站在线观看| 国产精品成人在线视频| 性xxxx欧美老肥妇牲乱| 欧美精品激情在线| 精人妻无码一区二区三区| 免费视频最近日韩| 国产女人18毛片水18精品| 国产不卡精品视频| 99亚偷拍自图区亚洲| 国产乱码精品一区二区三区日韩精品| 天堂中文字幕在线| 亚洲欧美综合另类在线卡通| 国产精品专区在线| 国产成人精品123区免费视频| 欧美日韩国产免费一区二区| 久久久高清视频| 国产亚洲欧美日韩在线观看一区二区 | 91欧美精品成人综合在线观看| 姝姝窝人体www聚色窝| 国产精品久久久久9999吃药| a级黄色一级片| 精品一区视频| yellow中文字幕久久| 免费的毛片视频| 福利一区福利二区| 在线看无码的免费网站| 精品网站在线| 亚洲精品国产品国语在线| 黄色一级片中国| 蜜桃精品在线观看| 日韩久久久久久久| 麻豆免费在线| 精品少妇一区二区三区免费观看| 貂蝉被到爽流白浆在线观看 | 国产成人精品国内自产拍免费看 | 9999精品| 丝袜一区二区三区| 波多野结衣影片| 久久综合丝袜日本网| 日韩国产一级片| 136导航精品福利| 欧美日本在线视频中文字字幕| 在线观看av大片| 亚洲国产精品激情在线观看| 国产精品无码专区av在线播放| 全球av集中精品导航福利| 久久久久久久国产精品视频| www.国产黄色| 一区二区在线观看视频| aaaaaaaa毛片| 一区二区三区午夜探花| 91精品久久久久久蜜桃| www.久久ai| 日韩欧美一区二区在线视频| 青娱乐国产精品| 国产成人免费网站| 日韩视频在线视频| 狼人精品一区二区三区在线 | 最新日韩中文字幕| 亚洲天堂中文字幕在线| 国产精品国产三级国产a| 亚洲欧美视频二区| 中文一区一区三区免费在线观看| 91在线精品播放| 国产在线xxx| 亚洲激情自拍图| 六月丁香激情综合| 国产婷婷色一区二区三区 | 天堂网免费视频| 国产喷白浆一区二区三区| 日本xxxxxxx免费视频| 欧美日韩中文一区二区| 国产日韩在线视频| 污污网站在线看| 亚洲电影第1页| 国产精品免费精品一区| 国产无一区二区| 亚洲在线观看网站| 99在线观看免费视频精品观看| 欧美日韩精品中文字幕一区二区| 成人av集中营| 欧美黑人国产人伦爽爽爽| 亚洲av成人精品毛片| 欧美视频一二三区| 欧美日韩三级在线观看| 99精品欧美一区二区三区小说| 韩国日本美国免费毛片| 欧美黄色大片网站| 免费国产在线精品一区二区三区| 国产精品第一| 国模极品一区二区三区| 国产中文字幕在线看| 91精品国产色综合久久ai换脸| 日韩欧美a级片| 国产精品国产三级国产有无不卡 | 国产三级视频在线看| 在线播放中文字幕一区| 日韩精品视频播放| 1000精品久久久久久久久| 人妻体内射精一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 一本大道东京热无码aⅴ| 亚洲最好看的视频| 91在线观看免费观看 | 亚洲av综合一区二区| 久久成人免费日本黄色| 日本www在线视频| 欧美电影免费播放| 欧美大香线蕉线伊人久久国产精品| 精品176极品一区| 性日韩欧美在线视频| 免费日本一区二区三区视频| 亚洲乱码一区av黑人高潮| 国产www视频| 欧美日韩国产综合草草| 五月婷婷激情网| 1024成人网| 国产视频不卡在线| 久久综合网色—综合色88| 国产精品欧美性爱| 激情国产一区二区 | 国产精品夜夜嗨| wwwwxxxx日韩| 久久久久国产精品一区三寸| 青青在线免费观看| 亚洲成av人电影| 欧美日韩精品免费在线观看视频| 国产伦乱精品| 亚洲xxx自由成熟| 免费成人高清在线视频| 国产成人精品视| 日本蜜桃在线观看视频| 欧美黄色成人网| 国内精品不卡| 中文字幕在线看视频国产欧美| 日韩一卡二卡在线| 欧美白人最猛性xxxxx69交| 国产又粗又猛又黄又爽| 欧美日韩在线播| www.com亚洲| 色婷婷久久久久swag精品| 久久草视频在线| 亚洲成人资源网| 国产精品99精品无码视| 亚洲综合激情网| 国产在线视频二区| 亚洲线精品一区二区三区| 久久久久成人精品无码| 一级日本不卡的影视| 久久久久久久中文字幕| 一区二区三区在线免费观看| 欧洲猛交xxxx乱大交3| 亚洲伦在线观看| 麻豆一区产品精品蜜桃的特点| 亚洲欧美日韩国产一区二区三区| 艳妇荡乳欲伦69影片| 亚洲欧洲成人自拍| 欧美成人一区二区三区高清| 一区二区三区中文在线| 麻豆国产尤物av尤物在线观看| 一区二区三区资源| 免费中文字幕视频| 五月婷婷综合在线| 亚洲第一精品在线观看| 欧美日韩中文在线| 欧美男人天堂网| 欧美精品九九99久久| 精品国产av一区二区三区| 日韩一区二区三区av| 狠狠人妻久久久久久综合麻豆| 亚洲成色777777在线观看影院| 无码国产精品96久久久久| 亚洲欧美日韩国产成人| 在线日本中文字幕| 欧美福利视频在线观看| 色资源二区在线视频| 国产精品视频白浆免费视频| 996久久国产精品线观看| 国产精品一区二区a| 国产中文精品久高清在线不| 在线观看福利一区| 影音先锋久久| 天天操天天摸天天爽| 国产激情一区二区三区| 欧美熟妇精品黑人巨大一二三区| 国产女主播在线一区二区| 久久精品一区二区三区四区五区 | 欧美少妇性生活视频| 久久国产生活片100| 亚洲精品第二页| 日本一区二区视频在线观看| 成年人二级毛片| 岛国av在线不卡| 91成年人视频| 亚洲第一av在线| 永久免费av在线| 久久久伊人日本| 日韩美女在线| 久久99精品久久久久久水蜜桃| 久久看人人摘| 久草热视频在线观看| 美国一区二区三区在线播放| 91精品又粗又猛又爽| 国产精品色哟哟网站| 国产91av视频| 91精品福利在线一区二区三区| 日韩美女一级视频| 欧美人与性动交a欧美精品| 粉嫩一区二区三区| 超碰国产精品久久国产精品99| 成人综合久久| 草草久久久无码国产专区| 国产在线播放一区二区三区| 一区二区三区伦理片| 亚洲国产精品人人做人人爽| 国产一区二区三区中文字幕| 亚洲精品综合久久中文字幕| 色婷婷av在线| 国产日韩欧美日韩大片| 小说区图片区色综合区| wwwwww欧美| 狠狠色2019综合网| 欧美自拍偷拍网| 欧美日韩激情视频8区| 精品国产伦一区二区三区| 中文字幕欧美日韩在线| 裤袜国产欧美精品一区| 国产一区二区三区四区五区加勒比| 午夜影院欧美| 亚洲欧美久久久久| 欧美激情综合网| 中文字幕亚洲乱码熟女1区2区| 欧美不卡123| 欧美人与性动交α欧美精品济南到 | 国产一区二区久久精品| 无码小电影在线观看网站免费| 国产精品久久久久免费| 欧美不卡一区| 亚洲国产日韩在线一区| 成人免费一区二区三区在线观看| 懂色av蜜臀av粉嫩av喷吹| 亚洲免费小视频| 在线观看网站免费入口在线观看国内| 国产精品久久久久免费| 亚洲国产精品一区制服丝袜| 免费看三级黄色片| 一区二区三区精品视频| 亚洲第一第二区| 欧美另类精品xxxx孕妇| 亚洲精品一区国产| 成年人视频大全| 国产精品一区二区黑丝| 黄色一级视频在线观看| 精品国产亚洲一区二区三区在线观看| 欧美黑人猛交| 久久福利电影| 久久国产一二区| 国产亚洲精品精品精品| 欧美日韩一级黄| 黄页视频在线播放| 91丝袜脚交足在线播放| 亚洲午夜91| 亚洲av成人片色在线观看高潮| 精品久久久久久久久久ntr影视| 婷婷综合激情网| 国产成人精品免费久久久久| 精品免费一区二区| 天美一区二区三区| 亚洲一本大道在线| 色资源在线观看| 国产精品久久av| 欧美/亚洲一区| 你懂的在线观看网站| 一本一本大道香蕉久在线精品 | 亚洲精品免费电影| 肥臀熟女一区二区三区| 欧美在线性爱视频 | 亚洲影院一区二区三区| 久久精品国产精品亚洲| 亚洲专区**| 国产精品无码一本二本三本色| 中文字幕在线免费不卡| 亚洲福利在线观看视频| 秋霞av国产精品一区| 久久国产中文字幕| 美女扒开腿免费视频| 色欧美片视频在线观看在线视频| 麻豆网站在线看| 国内视频一区二区| 秋霞av亚洲一区二区三| 欧美成人三级在线观看| 国产亚洲欧洲在线| 久久视频社区| 成人免费观看毛片| 亚洲精品国产一区二区三区四区在线 | 国产成人精品av久久| 在线观看91久久久久久| 白白在线精品| 精品亚洲一区二区三区四区| 亚洲在线中文字幕| 1区2区3区在线观看| 国产欧美一区二区三区不卡高清| 青青草成人在线观看| 黄色片视频网站| 欧美成人亚洲成人| 日韩成人影院| 一级性生活大片| 日韩欧美久久一区|