最簡單的微服務部署測試實踐

天下技術發表於2020-10-01

微服務特別適合業務複雜,開發隊伍龐大的專案。微服務可以到達化整為零,簡化單個服務,降低溝通成本的效果。但微服務在效能上比單體服務低,也會有資料冗餘的問題,要結合自身情況,不要盲目崇拜。
本文介紹一種簡單的微服務技術架構。幫助大家對微服務如何部署,如何開發有個初步的認識。

一個簡單的微服務架構

部署圖如下

nginx:

對外統一入口,根據url將請求分發到不同微服務,用ip:port區分不同的微服務。也會直接處理一些靜態資源的訪問,本身就是web伺服器。

springboot+dubbo:

spring boot是目前最流行的開發web服務的框架(jsp,ejb,ssh這些框架過於老舊),它和微服務沒有必然聯絡,但它結合dubbo可以開發微服務,要求就是spring boot工程要import dubbo.jar或者使用maven引入dubbo。配置dubbo-application.xml,裡面寫好zookeeper服務地址埠以及提供者和消費者要註冊的介面方法。
一個微服務要呼叫另一個微服務的方法,只需要@Autowired註冊介面類的物件,用物件呼叫方法即可。麻煩點的是各個微服務對同一個介面方法要有一致的介面描述java檔案,使用maven管理描述介面的jar包可以有效解決介面一致的問題。
最後打jar包,java -jar ***.jar一個微服務就啟動了。

zookeeper:

springboot需要dubbo,而dubbo最推薦的服務註冊中心是zookeeper,相當於一個公告板,各個微服務都可以看到上面註冊的提供者和消費者的介面方法

DB:

MySQL Oracle等

redis:

快取session資料,和其它有必要快取的業務資料

tomcat+dubbo-admin:

dubbo管理系統,用於監控和排查故障,部署在tomcat下,可以在瀏覽器上檢視各個微服務的執行情況,檢視某個方法是否可以被正常呼叫。

積分查詢業務場景,幫助理解微服務。

B服務提供檢查登陸狀態功能。A服務提供查詢賬號積分功能。
當使用者在app點選查詢積分時,nginx看見url裡有查詢積分關鍵字,會根據nginx.conf的配置將請求傳送到A服務,app會有個sessionid傳送給A服務,A服務遠端呼叫B服務的檢查登陸狀態的介面,將sessionid傳給介面,B服務介面被呼叫,使用sessionid到redis查使用者資訊,如果查詢到redis有對應的使用者資訊,將使用者資訊返回,A服務接收到遠端呼叫介面返回的使用者資訊userid,接下來根據使用者資訊到資料庫DB查詢積分情況。
這就是兩個微服務配合實現一個業務的例子,用到了架構圖中的全部單元。查詢登陸狀態的要求在各個業務都存在,所以會有很多微服務需要遠端呼叫B服務的介面。同時每個微服務可以即是提供者,又是消費者。

在windows下配置一套完整的微服務開發環境。

nginx

D:\Program Files\nginx-1.8.1>start nginx.exe

成功後瀏覽器如下

MySQL

D:\Program Files\mysql-8.0.12-winx64\bin>mysqld --console

redis

D:\Program Files\Redis-x64-3.0.504>redis-server.exe redis.windows.conf
圖我忘截了

zookeeper

雙擊zkServer.cmd

tomcat和dubbo-admindubbo-admin

需要github上下載,然後單獨對dubbo-admin進行編譯打war包,war包放到tomcat的webapps目錄下,tomcat啟動時會自動解壓出資料夾,如下圖

tomcat/bin目錄執行startup.bat  成功後瀏覽器如下

開啟 http://127.0.0.1:8080/dubbo-admin-2.5.8/  (我最初開啟頁面卡死,後來刪除tomcat/log裡的全部日誌後正常了)
使用者名稱root 密碼root

沒有啟動任何微服務所以上圖各項都是空的。在Intellij IDEA執行兩個微服務(cmd裡java -jar 啟動微服務jar包也可以,但除錯修改程式碼不太方便)
可以看到dubbo管理系統可以看見兩個服務,一個是提供者,一個是消費者。裡面可以檢視名稱,狀態,日誌,對排錯挺有幫助的。


測試dubug

瀏覽器輸入登陸的url可以看到開啟登入頁面。

到此一個微服務系統的開發除錯環境就完成了。如果只測試後端服務不關心瀏覽器和app介面的功能,可以使用postman工具,直接傳送url給服務端,檢視返回的json資料等是否達到預期要求。

相關文章