概述git
這篇文檔,着重解決一個問題:Spring Cloud 融合於 Rainbond 原生 Service Mesh 的正確姿式是什麼樣子的。spring
Rainbond 原生支持 Service Mesh 微服務架構。也就是說,不管原來是什麼,只要部署在 Rainbond 上,那麼就自然的成爲了 Service Mesh 微服務。這也是 Service Mesh 微服務架構的一大特色:對原應用無侵入。bootstrap
Spring Cloud 部署在 Rainbond 上後,整套業務便是完整的 Spring Cloud 微服務,又是一套 Service Mesh 微服務。那麼如何使業務系統即保留了原有 Spring Cloud 微服務架構的特色,又能享受到 Service Mesh 帶來的種種好處呢?這就涉及到了Spring Cloud 微服務與 Service Mesh 的融合。緩存
融合的核心思想,就是 Spring Cloud 框架維護的功能,保持不變; Spring Cloud 框架沒法維護的功能,交給 Service Mesh 和 Rainbond。架構
Spring Cloud 不維護什麼框架
我不會去深刻討論 Spring Cloud 微服務框架都維護了什麼,這樣的帖子網上有不少。ide
在這裏,我想說明的是,當讀者選擇將本身原有的 Spring Cloud 微服務部署在 Rainbond 時,有哪些工做應該由 Rainbond 來完成。微服務
向 eureka 的註冊測試
eureka 註冊中心,是 Spring Cloud 微服務框架中,標準的註冊中心解決方案。微服務框架中的 Service provider(服務提供者) 將本身的服務地址註冊於 eureka 中,供 Service consumer(服務消費者) 遠程調用。這種服務註冊與發現的機制,是微服務架構中爲了將原來的一站式服務拆解爲若干個獨立的服務並相互解耦,卻又能相互交互所設計的。基於這種機制,全部的 Spring Cloud 微服務組件,能夠動態的獲悉本身須要的 Service Provider 的服務地址;也能夠搖身一變,將本身註冊爲 Service Provider 對其餘組件提供服務。url
然而,就是這麼一種靈活的服務註冊/發現機制,卻不會維護其它服務組件向 eureka 自身註冊這一動做。向 eureka 註冊的地址,每每是在配置文件裏配置的,例如碼雲6K+星Spring Cloud項目 PIG後臺管理框架 中,設定的 eureka 註冊方式以下:
https://gitee.com/log4j/pig/b...
# 註冊中心配置 eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://pig:pig@pig-eureka:8761/eureka/
{{% notice info %}}
Rainbond 中會將沒法解析的域名,如 pig-eureka 解析爲 127.0.0.1
{{% /notice %}}
在 Rainbond 中,能夠藉助於依賴關係,將微服務組件和 eureka 鏈接起來,幫助 Spring Cloud 完成註冊這一動做:
對接各種中間件
一套完整的 Spring Cloud 微服務體系中,必然會採用多種數據中間件。以 PIG 爲例,搭配使用 MySQL 做爲數據存儲、 REDIS 做爲緩存。而在 Spring Cloud 中,這類中間件的對接方式也是經過配置文件配置的。並不會在微服務框架中有其它的註冊機制。那麼同理能夠由 Rainbond 的依賴關係來將微服務與服務中間件鏈接起來。
服務組件啓動順序
Spring Cloud 微服務組件的啓動順序是比較重要的,一個組件在所依賴的服務沒有啓動前自行啓動,是可能引發錯誤的。Spring Cloud 微服務框架自己不會維護服務組件的啓動順序,這一問題能夠由 Rainbond 來解決。
在 Rainbond 5.1 版本後,咱們支持了基於依賴關係的啓動順序控制。啓動前後邏輯爲被依賴的服務先啓動,只有當前服務所依賴的服務所有正常啓動後,纔會開始啓動流程。
{{% notice warning %}}
必須指出的是,在這個啓動控制鏈條中,pig-gateway 指向 pig-auth 的依賴關係,其意義只做爲啓動順序控制策略,不做爲正常的依賴關係使用。
{{% /notice %}}
Spring Cloud 適配 Rainbond
爲了將 Spring Cloud 更好的融入到 Rainbond 的體系中來,建議使用下面的配置來進行適配:
註冊IP
在保留了 eureka 這種 Spring Cloud 原生的服務註冊發現機制的前提下,咱們須要全部的微服務組件組冊本身的真實IP做爲服務地址。微服務組件間的組網策略,Rainbond 會自行解決,關鍵配置類好比下:
https://gitee.com/log4j/pig/b...
# 註冊中心配置 eureka: instance: prefer-ip-address: true
心跳檢測與快速下線
Rainbond 支持每一個微服務組件的全生命週期管理。在咱們對某個組件進行配置並點擊更新後,咱們但願在 eureka 中,在新實例上線後,已經被關閉銷燬的舊實例能夠快速下線,確保註冊中心中的服務註冊地址沒有不可用項。關鍵配置以下:
# eureka server配置 eureka: server: enable-self-preservation: false #關閉自我保護 eviction-interval-timer-in-ms: 4000 #清理間隔(單位毫秒,默認是60*1000) # eureka client配置 eureka: instance: lease-expiration-duration-in-seconds: 30 #服務過時時間配置,超過這個時間沒有接收到心跳EurekaServer就會將這個實例剔除 lease-renewal-interval-in-seconds: 10 #服務刷新時間配置,每隔這個時間會主動心跳一次
{{% notice warning %}}上述配置適用於於測試場景以及調試場景。若是服務已經趨於穩定,並決定應用於生產環境,則建議自行設置合適的配置方案。{{% /notice %}}