1. 程式人生 > >Spring Cloud 服務註冊發現-路由-負載均衡-全鏈路日誌跟蹤-監控

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

[
    {
        "userId": "jlong",
        "id": 2,
        "href": "http://some-other-hostjlong.com/",
        "description": "A description for jlong's link",
        "label": "jlong"
    }
]
[
    {
        "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 即可看如下顯示:
這裡寫圖片描述

檢視服務註冊情況:

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可以檢視詳細資訊。

呼叫鏈路跟蹤