编程知识 cdmana.com

Java“微服務”還能這麼玩!

  "微服務"加個引號是因為這不是傳統定義的微服務架構,頂多算是"小服務"架構,因為服務例項由叢集節點統一載入,非獨立部署。下面以圖說明一下服務呼叫流程。# 一、服務呼叫流程![](https://img2020.cnblogs.com/blog/4928/202012/4928-20201224195442955-1710120808.jpg)* **節點主程序**:類似於Istio的SideCar,負責對外網路及叢集內節點間的通訊,另外提供內建分散式的儲存引擎(目前元資料均儲存於此);* **節點子程序**:負責載入服務例項與服務呼叫,支援服務例項的熱更新。**1.2.** 客戶端呼叫服務請求經由負載均衡轉發至主程序的WebHost內;**3.4.** 主程序根據服務標識將請求通過共享記憶體佇列發給子程序;**5.6.** 子程序的服務管理器如果找不到服務例項,則向主程序請求載入已編譯的服務位元組碼;**7.8.** 主程序從內建儲存引擎讀取服務模型編譯的位元組碼返回,子程序通過ClassLoader載入並快取服務例項;**9.10.** 服務例項呼叫指定的服務方法返回給主程序的WebHost;**10.11.** WebHost返回服務呼叫結果給客戶端。> 以上步驟均為非同步,資料序列化均為類似於webpack的自定義格式。# 二、開發流程演示  為了小夥伴們有個直觀的認識,下面演示一個簡單的開發流程。## 1. 建立資料結構  通過IDE新建如下圖所示的資料結構,後臺自動生成相關的實體程式碼。![](https://img2020.cnblogs.com/blog/4928/202012/4928-20201224195454490-342828839.jpg)> 實體模型可對映至不同資料庫(Sql, NoSql或內建資料庫)## 2. 建立業務服務  通過IDE新建如下圖所示的查詢實體的服務,注意服務方法必須返回CompletableFuture,因為整個架構是全非同步的。![](https://img2020.cnblogs.com/blog/4928/202012/4928-20201224195502693-818625913.jpg)## 3. 建立使用者介面  通過IDE新建如下圖所示的檢視模型(基於TypeScript的Vue元件),呼叫後端服務的代理方法後臺自動生成,且同樣為非同步(返回Promise)。![](https://img2020.cnblogs.com/blog/4928/202012/4928-20201224195509480-1139377028.jpg)> 整個過程一個瀏覽器搞定,不需要寫一行配置程式碼。# 三、併發效能測試  跟同樣是非同步的Spring WebFlux簡單對比測試一下併發呑吐與響應,測試配置為Mac主機(壓測)->4核I7虛擬機器(服務)。* WebFlux:```shellwrk -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```* 本框架```shellwrk -c200 -t2 -d20s -s post_bin.lua http://10.211.55.8:8000/apiRunning 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 readRequests/sec: 80546.35Transfer/sec: 12.14MB```# 四、如何安裝嚐鮮  **目前僅在Ubuntu20.04上開發測試,暫不準備支援其他非Linux作業系統.**1. 從Git clone打包好的執行時(注意是java分支):```shellgit clone -b java https://github.com/enjoycode/appbox.deploy.git```2. 安裝第三方依賴包```shellcd 克隆目錄sudo ./install-dependencies.sh```3. 啟動執行* 首次初始化執行(替換以下節點地址為本機地址):```shell./appbox --init=10.10.10.10:9000 --peer=1.1.1```* 重啟```shell./appbox```4. 開啟瀏覽器訪問IDEhttp://地址:8000/dev/index.html, 使用者名稱: Admin 密碼:隨意(暫未實現驗證密碼)# 五、本篇小結  整個java實現從7月底開始歷時5個月,中間還繞了1個月的彎路,爭取1至2個月內達到基本可用的狀態,在此歡迎感興趣的小夥伴加入

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1608816363.html

Scroll to Top