1.1 什么是服務治理
服務治理,我也稱之為微服務治理,是指用來管理微服務的整個生命周期。包括應用的創建,服務名的規范,服務的上下線,服務的遷移,整個服務的生老病死等方方面面的治理。
1.2 Moss概述
Moss(莫斯
)是服務治理平臺的代號
,取名靈感來自電影《流浪地球》中的莫斯(Moss),Moss是電影《流浪地球》中領航員號空間站的人工智能機器人-負責管理空間站所有事務以及流浪地球的計劃,而Moss跟Boss一樣,是所有微服務的老板,所有微服務的生命周期將歸其統管。
為什么會出現Moss
?因為基于Spring Cloud的微服務體系,缺乏統一的可視化的納管治理平臺
。
Spring Cloud中國社區從2017年11月份,開始規劃Spring Cloud Admin的開發和設計,專注于研究這個領域。Moss將會選擇一個合適的時機開源,需要更多了解的可以加我微信Software_King。
1.2.1 競品分析
Moss的競品分析對比如下表所示:
對比選項 | Spring Boot Admin | Moss |
---|---|---|
服務畫像 | ? | ? |
服務實例畫像 | ?? | ? |
支持單Eureka集群 | ?? | ? |
支持單Consul集群 | ?? | ? |
支持單Nacos集群 | ?? | ? |
支持多Eureka集群,在線動態增加,刪除,切換 | ?? | ? |
前端技術 | Vue | Ant Design Pro |
支持Spring Boot 1.5.X和Spring Boot 2.0.X | ?? | ? |
服務調用拓撲 | ? | ? |
在線查看Jar依賴 | ? | ? |
服務歸屬(項目,Owner) | ? | ? |
服務和實例支持模糊查詢 | ? | ? |
服務閃爍告警 | ? | ? |
服務評分打星 | ? | ? |
服務列表畫像 | ? | ? |
服務實例列表畫像 | ? | ? |
服務實例內部組件列表,使用哪些Spring Cloud組件 | ? | ? |
其中????表示功能相對較弱???表示功能完整強大???表示功能缺失
1.2.1 Moss RoadMap
Roadmap 時間點:
??表示當前穩定可用版本
版本 | Milestone | 主要特性 |
---|---|---|
??1.0.0.RELEASE | 2019.4.21 | 穩定可用版本 |
1.2.2 Moss開發團隊
姓名 | 角色 | github地址 |
---|---|---|
SoftwareKing | Owner | https://github.com/SoftwareKing |
iShawnWang | 前端開發 | https://github.com/iShawnWang |
homeant | 前后臺開發 | https://github.com/homeant |
VancySavoki | 后端開發 | https://github.com/VancySavoki |
1.3 Moss的功能
- Moss的功能包括服務畫像,服務實例畫像,服務上下線事件記錄,服務上下線websocket消息通知,針對生產應用可配置多種服務上線通知工具,支持多種注冊中心,比如Eureka,Consul,Nacos.支持動態連接注冊中心進去切換進行服務治理操作。
1.3.1 服務畫像
-
服務畫像:
- 服務概要信息-
包括服務實例數,UP數,DOWN數,OffLine數,服務歸屬的項目,歸屬的Owner等
。 - 服務健康指標-展示服務的健康信息
- 服務請求映射-展示出服務對外提供的
所有REST接口
- 服務調用鏈-展示服務的依賴調用拓撲
- 服務API監控-通過http trace和全鏈路監控對API進行監控
- 服務內部組件狀態-內部組件的依賴,使用版本狀態
- 服務性能指標-
對服務進行QPS,性能指標收集打分
- 服務評級-自動根據評級規則對服務進行跑批評分打星。
- 服務概要信息-
PS: Spring Boot Admin服務墻,如上圖所示,看完之后誰能告訴我,它的服務畫像能畫出什么來。 Moss的服務畫像列表如下所示,對比顯而易見!
1.3.2 服務實例畫像
- 服務實例畫像
-
實例調用拓撲-對接Skywalking,PinPoint等獲取實例調用拓撲?
-
實例Build信息-實例構建信息?
-
實例Git提交信息-最后一次提交人的Git詳細信息?
-
Spring Cloud使用功能列表
-
實例的健康信息
-
實例的上下線Event信息?
-
服務日志級別-查看應用的日志級別,根據需要調整日志級別打印對應日志級別的信息?
-
環境配置-查看當前應用的環境配置信息
-
實例JMX信息-分類展示實例的JMX信息?
-
查看JVM-實時展示應用實例的內存使用情況,GC次數,以及CPU和內存使用率?
-
查看日志-增量實時獲取應用的info日志或Error日志?
-
查看線程-查看當前實例的線程情況?
?
-
查看實例內部依賴-查看實例的內部Jar依賴情況,統計分析展示依賴拓撲等?
-
HttpTrace-按時間展示http請求的軌跡信息,包括請求的路徑,Response的狀態,調用耗時等?
- 支持GC Log日志查看?
1.3.3 服務納管
項目對應多個應用,每個應用由多個實例組成提供具體的服務,服務的生命周期管理需要可控,可追溯,可監控,可規范。 由Spring Cloud體系構建的微服務體系,應用名即服務名。服務納管分為歷史應用納管和新應用納管。
- 新應用納管: 新應用使用Moss-Client,啟動時連接Moss對應用名進行統一攔截check,從而規范應用名。
- 舊應用納管: 舊應用引入對應的版本的Moss-Client,在Moss平臺對其手動接入管理,錄入應用名。
1.3.4 多注冊中心支持
Moss通過注冊中心接管Spring Cloud體系的微服務。支持動態連接注冊中心,填注冊中心的URL即可,快速接管服務。
轉存失敗重新上傳取消
1.3.5 服務報表數據
Moss通過注冊中心接管Spring Cloud體系的微服務。然后獲取每個服務使用Spring Boot的版本和Spring Cloud的版本,Moss的接入率以報表數據展示。
1.3.6 事件日志
1.3.7 元數據管理
1.3.9 Spring Cloud組件使用情況
2.Moss的架構設計
2.1 Moss的架構設計
Moss基于Spring Boot Admin 2.1.3版中的spring-boot-admin-server模塊二次開發,基于可擴展思想。前端采用Ant Design Pro,采用Spring Boot+shiro+JWT+LDAP實現整個權限認證管理。通過Moss-Cloud-Adapter模塊支持多注冊中心,應用啟動對應用名進行check是否規范。
實現細節后續補充
2.2 Moss的服務設計
Moss服務端主要自動探測EndPoint,代理EndPoint,對接各種注冊中心,提供可視化的管理。
2.3 Moss的客戶端設計
moss客戶端主要用于內置預設自研端點和管理配置信息,使接入方無感知接入。
實現細節后續補充
2.3.1 Moss-Client
Moss客戶端支持兩種Spring Boot版本,分別是Spring Boot 1.5.X和Spring Boot 2.X,使用只需引入 moss-client 即可。示例2.x的客戶端如下所示。
1.引入 moss-client
<dependency><groupId>org.xujin.moss</groupId><artifactId>moss-client-2.x</artifactId><version>1.0.0.RELEASE</version> </dependency>
2.在application.yml中增加配置如下
info.groupId: @project.groupId@ info.artifactId: @project.artifactId@ info.version: @project.version@
3.在pom中增加maven插件
<plugin><groupId>pl.project13.maven</groupId><artifactId>git-commit-id-plugin</artifactId><version>2.1.15</version><executions><execution><goals><goal>revision</goal></goals></execution></executions><configuration><dotGitDirectory>${project.basedir}/.git</dotGitDirectory></configuration> </plugin>
2.3.2 導入IDE運行
- 為方便快速演示,默認內置了 h2 數據庫。
- 導入 IDEA 運行主程序org.xujin.moss.MossApplication.java
- 啟動之后訪問?http://localhost:8086/
- 用戶名 - xujin
- 密碼 - 123456
- 如需修改后端數據庫,將 moss-web/src/main/resources/config/application.yml 中?
spring.profiles.active
?的 h2 改為 mysql,并修改 application-mysql 中的連接地址、username/password。
2.3.3 docker鏡像運行
1.根目錄安裝各個依賴?mvn install -Dmaven.test.skip=true
2.根目錄進入moss-web目錄 docker鏡像打包:?cd moss-web && mvn package && mvn docker:build
3.根目錄進入docker-compose啟動?cd docker-compose && docker-compose -f docker-compose.yml up
3.Moss的實現細節
關于Moss的實現細節,后續文章進行揭秘!敬請期待。
- Moss Client如何內置預設Spring Boot的Management信息
- Moss client如何兼容Spring Boot 1.5.X和Spring Boot 2.x的Metrics信息
- Moss client如何解決運維訪問管理端口Health端點不需要前綴,而Moss治理需要帶/actuator前綴
- Moss服務端的選型設計和擴展
- Moss的動態連接注冊中心,支持多種注冊中心的
- @RestControllerEndpoint與@Endpoint端點寫法引起的坑
- 注冊到Eureka上的應用名為大寫,而注冊到Nacos上的應用名為小寫,Moss需要忽略大小寫匹配
- 等等~~~~~~~~~~~~~
4 GC日志路徑設置參考
-Xloggc:${YOUR_WORK_DIR}/logs/${APP_NAME}/gc.log -verbose.gc -XX:+PrintGCDateStamps
logging:registry:files:- name: gclogpath: logs/${spring.application.name}/gc.log
4.1 切換支持注冊中心
默認的注冊注冊中心是 eureka,如果希望切換到其他注冊中心,如 ZooKeeper, 可以通過激活 profile 切換注冊中心。在以下 pom 中已預設兩種注冊中心,使用時自行切換即可。
- moss-web/pom.xml
- moss-service/pom.xml
- moss-client/moss-sample-2.1.x
- moss-client/moss-sample-1.5.x