天天看點

Java“微服務”還能這麼玩!一、服務調用流程二、開發流程示範三、并發性能測試四、如何安裝嘗鮮五、本篇小結

  "微服務"加個引号是因為這不是傳統定義的微服務架構,頂多算是"小服務"架構,因為服務執行個體由叢集節點統一加載,非獨立部署。下面以圖說明一下服務調用流程。

一、服務調用流程

Java“微服務”還能這麼玩!一、服務調用流程二、開發流程示範三、并發性能測試四、如何安裝嘗鮮五、本篇小結
  • 節點主程序:類似于Istio的SideCar,負責對外網絡及叢集内節點間的通信,另外提供内置分布式的存儲引擎(目前中繼資料均存儲于此);
  • 節點子程序:負責加載服務執行個體與服務調用,支援服務執行個體的熱更新。

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

3.4. 主程序根據服務辨別将請求通過共享記憶體隊列發給子程序;

5.6. 子程序的服務管理器如果找不到服務執行個體,則向主程序請求加載已編譯的服務位元組碼;

7.8. 主程序從内置存儲引擎讀取服務模型編譯的位元組碼傳回,子程序通過ClassLoader加載并緩存服務執行個體;

9.10. 服務執行個體調用指定的服務方法傳回給主程序的WebHost;

11.12. WebHost傳回服務調用結果給用戶端。

以上步驟均為異步,資料序列化均為類似于webpack的自定義格式。

二、開發流程示範

  為了小夥伴們有個直覺的認識,下面示範一個簡單的開發流程。

1. 建立資料結構

  通過IDE建立如下圖所示的資料結構,背景自動生成相關的實體代碼。

Java“微服務”還能這麼玩!一、服務調用流程二、開發流程示範三、并發性能測試四、如何安裝嘗鮮五、本篇小結
實體模型可映射至不同資料庫(Sql, NoSql或内置資料庫)

2. 建立業務服務

  通過IDE建立如下圖所示的查詢實體的服務,注意服務方法必須傳回CompletableFuture,因為整個架構是全異步的。

Java“微服務”還能這麼玩!一、服務調用流程二、開發流程示範三、并發性能測試四、如何安裝嘗鮮五、本篇小結

3. 建立使用者界面

  通過IDE建立如下圖所示的視圖模型(基于TypeScript的Vue元件),調用後端服務的代理方法背景自動生成,且同樣為異步(傳回Promise)。

Java“微服務”還能這麼玩!一、服務調用流程二、開發流程示範三、并發性能測試四、如何安裝嘗鮮五、本篇小結
整個過程一個浏覽器搞定,不需要寫一行配置代碼。

三、并發性能測試

  跟同樣是異步的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
           

四、如何安裝嘗鮮

  目前僅在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 密碼:随意(暫未實作驗證密碼)

五、本篇小結

  整個java實作從7月底開始曆時5個月,中間還繞了1個月的彎路,争取1至2個月内達到基本可用的狀态,在此歡迎感興趣的小夥伴加入我們!