Java「微服務」還能這麼玩!

  "微服務"加個引號是由於這不是傳統定義的微服務架構,頂多算是"小服務"架構,由於服務實例由集羣節點統一加載,非獨立部署。下面以圖說明一下服務調用流程。html

1、服務調用流程

  • 節點主進程:相似於Istio的SideCar,負責對外網絡及集羣內節點間的通訊,另外提供內置分佈式的存儲引擎(目前元數據均存儲於此);
  • 節點子進程:負責加載服務實例與服務調用,支持服務實例的熱更新。

1.2. 客戶端調用服務請求經由負載均衡轉發至主進程的WebHost內;java

3.4. 主進程根據服務標識將請求經過共享內存隊列發給子進程;webpack

5.6. 子進程的服務管理器若是找不到服務實例,則向主進程請求加載已編譯的服務字節碼;git

7.8. 主進程從內置存儲引擎讀取服務模型編譯的字節碼返回,子進程經過ClassLoader加載並緩存服務實例;es6

9.10. 服務實例調用指定的服務方法返回給主進程的WebHost;github

10.11. WebHost返回服務調用結果給客戶端。web

以上步驟均爲異步,數據序列化均爲相似於webpack的自定義格式。shell

2、開發流程演示

  爲了小夥伴們有個直觀的認識,下面演示一個簡單的開發流程。數據庫

1. 建立數據結構

  經過IDE新建以下圖所示的數據結構,後臺自動生成相關的實體代碼。
後端

實體模型可映射至不一樣數據庫(Sql, NoSql或內置數據庫)

2. 建立業務服務

  經過IDE新建以下圖所示的查詢實體的服務,注意服務方法必須返回CompletableFuture,由於整個架構是全異步的。

3. 建立用戶界面

  經過IDE新建以下圖所示的視圖模型(基於TypeScript的Vue組件),調用後端服務的代理方法後臺自動生成,且一樣爲異步(返回Promise)。

整個過程一個瀏覽器搞定,不須要寫一行配置代碼。

3、併發性能測試

  跟一樣是異步的Spring WebFlux簡單對比測試一下併發呑吐與響應,測試配置爲Mac主機(壓測)->4核I7虛擬機(服務)。

  • WebFlux:
wrk -t2 -c200 -d20s http://10.211.55.8:8080/hello
  Running 20s test @ http://10.211.55.8:8080/hello
  2 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
  Latency    12.46ms    1.51ms  47.08ms   75.10%
  Req/Sec     8.06k   293.27     8.52k    81.00%
  320913 requests in 20.01s, 28.16MB read
  Requests/sec:  16039.85
  Transfer/sec:      1.41MB
  • 本框架
wrk -c200 -t2 -d20s -s post_bin.lua http://10.211.55.8:8000/api
Running 20s test @ http://10.211.55.8:8000/api
  2 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.86ms    5.19ms 121.99ms   98.55%
    Req/Sec    40.50k     2.11k   46.14k    69.00%
  1611550 requests in 20.01s, 242.83MB read
Requests/sec:  80546.35
Transfer/sec:     12.14MB

4、如何安裝嚐鮮

  目前僅在Ubuntu20.04上開發測試,暫不許備支持其餘非Linux操做系統.

  1. 從Git clone打包好的運行時(注意是java分支):
git clone -b java https://github.com/enjoycode/appbox.deploy.git
  1. 安裝第三方依賴包
cd 克隆目錄
sudo ./install-dependencies.sh
  1. 啓動運行
  • 首次初始化運行(替換如下節點地址爲本機地址):
./appbox --init=10.10.10.10:9000 --peer=1.1.1
  • 重啓
./appbox
  1. 打開瀏覽器訪問IDE
    http://地址:8000/dev/index.html, 用戶名: Admin 密碼:隨意(暫未實現驗證密碼)

5、本篇小結

  整個java實現從7月底開始歷時5個月,中間還繞了1個月的彎路,爭取1至2個月內達到基本可用的狀態,在此歡迎感興趣的小夥伴加入咱們!

相關文章
相關標籤/搜索