微服務架構選Java仍是選Go - 多用戶負載測試

Ivan Nikitsenkajava

微服務架構容許咱們再建立新應用時自由選擇不一樣的技術和編程語言。不過究竟哪一種語言更適合咱們當下的硬件?回答這個問題,須要搞明白Java和Go編寫的相同應用程序之間的性能差別。git

先決條件

No additional performance enhancements should be applied. Use minimum configurations with default frameworks and libraries settings. github

No ORM frameworks. Use pure DB drivers and the same SQL queries. Postgres JDBC 4.2 driver for Java and github.com/lib/pq for Go.web

  • 不採用其餘性能加強功能
  • 使用默認框架和庫設置的最小配置
  • 沒有ORM框架
  • 使用純DB驅動程序和相同的SQL查詢
  • 用於Java的Postgres JDBC 4.2驅動程序和用於Go的github.com/lib/pq

怎麼作

  1. 使用DB(Postgres)數據存儲建立簡單的Java/Go REST API應用程序
  2. 使用JMeter或相似工具建立負載測試
  3. 在單獨的AWS實例上運行應用程序,加載測試和數據庫
  4. 收集負載測試結果

被測系統

做爲被測系統,這裏準備了兩個銀行應用:bank-java和bank-go。spring

APIs:數據庫

POST / client / new / {balance} - 建立具備初始餘額的新客戶編程

POST /交易 - 將資金從一個帳戶轉移到另外一個帳戶微信

GET / client / {id} / balance - 返回客戶端的當前餘額架構

框架和依賴關係

在選擇框架和庫時,這裏使用了最新、最流行和最簡單的框架和庫來儘快準備好應用程序。併發

Bank-java:Java 十、Spring Boot 2.0.四、spring-web 5.0.八、PostgreSQL JDBC 4.2.4

Bank-go:Go 1.8,gorilla / mux,github.com / lib / pq。

銀行應用源碼

Bank-java: https://github.com/nikitsenka...

Bank-go: https://github.com/nikitsenka...

測試項目

測試項目Bank-test使用動態變化的用戶數(從1,000到10,000)執行對銀行API的調用,驗證響應並收集統計信息。

測試環境

這裏用AWS並建立了兩個AWS EC2實例:

  1. Bank-go t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only)
  2. Bank-java t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only)
  3. Postgres d2.xlarge (14 ECUs, 4 vCPUs, 2.4 GHz, Intel Xeon E52676v3, 30.5 GiB memory, 3 x 2048 GiB Storage Capacity)
  4. Bank-test t2.2xlarge (Variable ECUs, 8 vCPUs, 2.3 GHz, Intel Broadwell E5-2686v4, 32 GiB memory, EBS only)

結果

完整結果請查看 here

結果小結

兩個應用與1,000個併發用戶完美配合。2,000個用戶時,Go性能顯着下降,而Java仍然是完美的。從3,000個用戶及以上用戶開始,兩個應用都顯示出不可接受的響應時間,而且錯誤響應的數量顯着增長。

總結

使用相同的硬件,Java REST API應用程序能夠提供兩倍於具備PostgreSQL數據庫的Go應用的併發用戶數。

關於Rainbond

Rainbond(雲幫)是"以應用爲中心」的開源PaaS, 深度整合基於Kubernetes的容器管理、ServiceMesh微服務架構最佳實踐、多類型CI/CD應用構建與交付、多數據中心資源管理等技術, 爲用戶提供雲原生應用全生命週期解決方案,構建應用與基礎設施、應用與應用、基礎設施與基礎設施之間互聯互通的生態體系, 知足支撐業務高速發展所需的敏捷開發、高效運維和精益管理需求。
相關文章
相關標籤/搜索