"微服務"加個引號是由於這不是傳統定義的微服務架構,頂多算是"小服務"架構,由於服務實例由集羣節點統一加載,非獨立部署。下面以圖說明一下服務調用流程。html
1.2. 客戶端調用服務請求經由負載均衡轉發至主進程的WebHost內;java
3.4. 主進程根據服務標識將請求經過共享內存隊列發給子進程;webpack
5.6. 子進程的服務管理器若是找不到服務實例,則向主進程請求加載已編譯的服務字節碼;git
7.8. 主進程從內置存儲引擎讀取服務模型編譯的字節碼返回,子進程經過ClassLoader加載並緩存服務實例;es6
9.10. 服務實例調用指定的服務方法返回給主進程的WebHost;github
10.11. WebHost返回服務調用結果給客戶端。web
以上步驟均爲異步,數據序列化均爲相似於webpack的自定義格式。shell
爲了小夥伴們有個直觀的認識,下面演示一個簡單的開發流程。數據庫
經過IDE新建以下圖所示的數據結構,後臺自動生成相關的實體代碼。
後端
實體模型可映射至不一樣數據庫(Sql, NoSql或內置數據庫)
經過IDE新建以下圖所示的查詢實體的服務,注意服務方法必須返回CompletableFuture,由於整個架構是全異步的。
經過IDE新建以下圖所示的視圖模型(基於TypeScript的Vue組件),調用後端服務的代理方法後臺自動生成,且一樣爲異步(返回Promise)。
整個過程一個瀏覽器搞定,不須要寫一行配置代碼。
跟一樣是異步的Spring WebFlux簡單對比測試一下併發呑吐與響應,測試配置爲Mac主機(壓測)->4核I7虛擬機(服務)。
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操做系統.
git clone -b java https://github.com/enjoycode/appbox.deploy.git
cd 克隆目錄 sudo ./install-dependencies.sh
./appbox --init=10.10.10.10:9000 --peer=1.1.1
./appbox
整個java實現從7月底開始歷時5個月,中間還繞了1個月的彎路,爭取1至2個月內達到基本可用的狀態,在此歡迎感興趣的小夥伴加入咱們!