Spring Cloud 服務註冊發現-路由-負載均衡-全鏈路日誌跟蹤-監控

Spring Cloud Netflix / Nodejs

嘗試使用Spring Cloud Netflix 加 Nodejs 技術棧混合搭建微服務。 (示例並無任何業務意義,只爲做演示)
代碼: https://github.com/choelea/spring-cloud-nodejs/
實現如下
1. 服務註冊發現
2. 服務間調用(feign)
3. 服務路由
4. 負載均衡 (eureka client 端)
5. 全鏈路跟蹤
6. 跨服務日誌跟蹤
7. 服務監控

相關版本依賴

Spring Boot: 1.5.9.RELEASE
Spring Cloud: Edgware.RELEASE
Nodejs: v8.9.1 (本機是v8.9.1的,沒有在其他版本上做測試)

架構圖 (Architecture for microservice)

此圖僅僅是服務註冊的,監控和全鏈路跟蹤未添加

架構圖

  • eureka-server: Spring Boot + Cloud 技術棧搭建eureka 服務。(服務註冊中心)
  • bookmark-service: Spring Boot 的微服務程序
  • nodejs-bookservice nodejs開發的微服務
  • composite-service 聚合服務
  • spring-boot-admin-server Spring Boot 監控
  • zipkin 分佈式鏈路追蹤服務
  • spring-apigateway Spring Boot + Cloud Netflix技術棧搭建的網關
  • nodejs-web nodejs開發的網關兼web應用

eureka-server-peer1 和 eureka-server-peer2 是用來驗證eureka 集羣的,可以選擇啓動這兩個服務,不啓動eureka-server服務。

程序運行

按照上面的順序依次運行。 Spring Boot的程序運行:mvn spring-boot:run ; nodejs 程序運行:npm start

spring-boot-admin-server 的控制檯會有異常拋出,是因爲nodejs的 bookservice程序無法接入spring boot admin的監控的。 —- 儘管restful的微服務號稱技術平臺無關,然而一旦選擇了某些技術棧,基本也就限制了使用某個語言和某個技術。

測試spring-apigateway

spring-apigateway 作爲eureka的客戶端結合zuul proxy的反向代理,爲多個微服務提供一個單一的訪問節點。
訪問http://localhost:8080/bookmarks/jlong/bookmarks (結果同http://localhost:9098/jlong/bookmarks 完全一致)

[
    {
        "userId": "jlong",
        "id": 2,
        "href": "http://some-other-hostjlong.com/",
        "description": "A description for jlong's link",
        "label": "jlong"
    }
]

訪問http://localhost:8080/books 反向代理至nodejs-bookservice的服務:http://localhost:3001/books

[
    {
        "bookname": "Nodejs Web Development",
        "author": "David Herron"
    },
    {
        "bookname": "Mastering Web Application Development with Express ",
        "author": "Alexandru Vlăduțu"
    }
]

測試nodejs

nodejs 採用eureka-js-client 組件獲取/註冊微服務。這裏nodejs-web只作爲服務的消費方,接入eureka server,消費上游的服務並展示給客戶端(瀏覽器)。
查看nodejs-web作爲eureka client 獲取到註冊的服務信息,通過向服務直接發起request來獲取數據並展示。訪問:http://localhost:3000 即可看如下顯示:
這裏寫圖片描述

查看服務註冊情況:

打開http://localhost:8761/
eureka 服務
instance信息的獲取主要通過下面的鏈接:
- http://localhost:8761/eureka/apps 獲取整個註冊進來的服務的信息
- http://localhost:8761/eureka/apps/{app} 獲取某個服務的所有的實例信息 例如:http://localhost:8761/eureka/apps/BOOK-SERVICE
- http://localhost:8761/eureka/apps/{app}/{instanceId} 獲取具體的instance的信息

nodejs 使用eureka-js-client 來配置服務的instance信息,需要配置的信息更多,也更直觀的反應了instance的信息;和通過連接(http://localhost:8761/eureka/apps)查到的基本一致。

nodejs的微服務app,在eureka的client的配置中最好保持app,vipAddress(secureVipAddress 一般不會用上)一致。

經測試發現,Spring Boot / Cloud Netflix 技術棧開發的apigateway,採用Zuul Reverse Proxy 反向代理的時候,必須app 和 vipAddress設置一致。 多個instance通過instanceId來區分。

監控Spring Boot服務

通過http://localhost:8088可以進入Spring Boot的服務列表;選中服務點擊Details可以查看詳細信息。

調用鏈路跟蹤

通過http://localhost:9411查詢服務間調用情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章