1. 程式人生 > >最簡單的微服務部署測試實踐

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

微服務特別適合業務複雜,開發隊伍龐大的專案。微服務可以到達化整為零,簡化單個服務,降低溝通成本的效果。但微服務在效能上比單體服務低,也會有資料冗餘的問題,要結合自身情況,不要盲目崇拜。 本文介紹一種簡單的微服務技術架構。幫助大家對微服務如何部署,如何開發有個初步的認識。 ## 一個簡單的微服務架構 部署圖如下 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532381755-0.png) ### 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服務的介面。同時每個微服務可以即是提供者,又是消費者。 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601545765944-%E5%BE%AE%E6%9C%8D%E5%8A%A1AB%E6%97%B6%E5%BA%8F%E5%9B%BE.png) ## 在windows下配置一套完整的微服務開發環境。 ### nginx D:\\Program Files\\nginx-1.8.1>start nginx.exe ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532457339-1.png) 成功後瀏覽器如下 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532499272-1.1.png) ### MySQL D:\\Program Files\\mysql-8.0.12-winx64\\bin>mysqld --console ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532543058-2.png) ### redis D:\\Program Files\\Redis-x64-3.0.504>redis-server.exe redis.windows.conf 圖我忘截了 ### zookeeper 雙擊zkServer.cmd ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532613158-3.png) ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532674474-4.png) ### tomcat和dubbo-admindubbo-admin 需要github上下載,然後單獨對dubbo-admin進行編譯打war包,war包放到tomcat的webapps目錄下,tomcat啟動時會自動解壓出資料夾,如下圖 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532714139-4.9.png) tomcat/bin目錄執行startup.bat  成功後瀏覽器如下 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532764990-5.png) 開啟 http://127.0.0.1:8080/dubbo-admin-2.5.8/  (我最初開啟頁面卡死,後來刪除tomcat/log裡的全部日誌後正常了) 使用者名稱root 密碼root ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532920692-6.png) ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601532948776-6.5.png) 沒有啟動任何微服務所以上圖各項都是空的。在Intellij IDEA執行兩個微服務(cmd裡java -jar 啟動微服務jar包也可以,但除錯修改程式碼不太方便) 可以看到dubbo管理系統可以看見兩個服務,一個是提供者,一個是消費者。裡面可以檢視名稱,狀態,日誌,對排錯挺有幫助的。 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601533068099-10.png) ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601533098205-11.png) ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601533117494-12.png) ### 測試dubug 瀏覽器輸入登陸的url可以看到開啟登入頁面。 ![](https://cdn.jsdelivr.net/gh/xllntl/picture/2020-10-1/1601533143824-14.png) 到此一個微服務系統的開發除錯環境就完成了。如果只測試後端服務不關心瀏覽器和app介面的功能,可以使用postman工具,直接傳送url給服務端,檢視返回的json資料等是否達到預期