貨拉拉應用多分組架構設計方案分享
一、背景
貨拉拉為微服務架構提供了多種服務發現和服務路由的能力,截止目前(2023年初),服務發現提供了透過 Consul 和域名降級兩種發現方式,服務路由已提供了灰度路由、多泳道路由等多種路由能力。
然而隨著業務發展和基礎設施建設,對服務發現與路由能力有了更靈活的需求,目前已經陸續收集到如下訴求:
• 服務分多個分組釋出
○ 不同分組執行不同版本的業務程式碼,從而實現業務灰度或業務 AB 版本
○ 不同分組有著不同的穩定性要求,例如部署著不同的例項數等
• 服務呼叫方可以根據不同的場景需要,選擇呼叫不同的服務端分組
• 不同的業務場景可以透過閘道器和 SOA 路由配置或自定義靈活的路由策略
• 等等
經過對貨拉拉現狀以及上述需求的詳細瞭解,並結合業界對微服務路由的優秀實踐,我們決定引入“應用多分組架構”來滿足業務的需求
二、基本原理
2.1
架構基本原理
應用多分組架構的基本原理是如何解決下面三個問題
服務如何多分組部署?
怎麼進行多分組的服務發現與路由?
路由策略如何滿足不同的業務場景?
2.1.1 應用多分組部署
應用多分組架構基礎是需要支援同一 appid 的分分組部署,並且不同分組可以配置不同的釋出配置,同時執行在不同分組的程式也可以感知到自己所屬的分組
2.1.2多分組服務發現與路由
SOA SDK 透過感知服務所屬分組配置進行 Consul 打標,從而提供統一的應用多分組發現和路由機制
2.1.3 路由策略
多分組架構將透過兩種方式提供靈活的路由策略,滿足不同業務場景:
1. 多分組架構內建路由策略:將提供靜態路由、協議頭路由、開關、黑白名單、降級等路由策略,滿足大部分情況下的多分組訴求
2. 提供路由策略擴充套件機制,滿足業務自定義策略,例如
a. SOA 的 SPI 擴充套件機制
b. LAPIGateway 的外掛機制
2.1.4 其他問題
除了上述三個基本問題,多分組架構還應該考慮如下問題:
• 多分組架構涉及的環境和後設資料統一規範
• 多分組架構的可觀測性設計
• 配置中心支援不同分組差異化配置
• 開放相關能力給業務方組合自定義場景問題等等
2.2
可以解決的問題
應用多分組架構可以解決的問題如下:
• 同一個 appid 不拆分的情況下,在不同分組執行不同版本的業務程式碼
• 相同版本的程式碼在不同分組部署擁有不同的配置,例如:配置中心、例項數量、 HPA 規則等等
• 服務呼叫方可以根據不同的場景需要,選擇呼叫不同的服務端分組,也可以透過閘道器 + SOA 路由配置靈活的多分組路由策略
三、架構設計
應用多分組架構涉及的範圍集中在微服務相關元件,不涉及流量接入層和資料層
• ① 鏈路透過閘道器路由策略控制分組匹配
• ② 鏈路透過 SDK 路由策略控制分組匹配
分組是應用下一級的概念,分組屬於應用,下圖虛線圈定部分僅為應用下同名的邏輯概念
3.2
多分組路由
只有滿足了多分組路由規則的請求才會路由到對應的分組服務,多分組路由核心約定包括如下兩個要素
1. 透過上述服務序號產生器制已經為服務例項進行打標 Consul tag(hll.group),用於服務發現
2. 分組路由只提供一級路由(A -> B),不涉及協議頭和鏈路透傳能力,同時分組路由提供靜態路由和擴充套件點
a. SDK 提供靜態服務引用引數 group(非必填)
b. 多分組路由
3.1
多分組服務註冊
SOA 服務在註冊時會額外寫入了服務例項的分組標識,將透過新增 Consul tag(hll.group) 承載,空值不寫入 tag,consul tag 現狀如下圖所
SOA 獲取分組後設資料依賴於對服務例項分組的感知能力,例如:透過環境變數
hll_group
分組路由流程圖如下圖
下圖邏輯均在 SOA 客戶端執行
同時為了方便了解多分組路由與其他路由關係以及後續的擴充套件機制,可以瞭解多分組路由在 SOA SDK 內部位置
3.3
分組路由擴充套件機制
如上多分組架構整體方案所述,SOA 框架需要提供路由策略擴充套件機制,滿足業務自定義策略
• 分組路由擴充套件獲取的分組優先順序高於內建機制
• 分組路由擴充套件機制設計原則
○ 【輸出】對預設路由策略干預儘可能收斂
▪ 只能改變本次請求的分組標識選擇
▪ 存在多個 SPI 時,高優先順序 SPI 決策成功阻塞後續 SPI 執行
○ 【輸入】儘可能多的提供路由決策所需要的資料,比如:當前服務資訊、協議頭、註冊資訊等等
▪ List<Invoker<T>> invokers: 下游節點資訊
▪ Invocation invocation: 呼叫上下文資訊
▪ MetaContextUtil、RpcContext 等工具類
• 擴充套件方式按 SOA 慣例,使用 SPI 機制
Java// SPI 虛擬碼@SPI(internal = false)public interface GroupRouterExt { Optional<PinnedGroup> getGroup(List<Invoker<T>> invokers, Invocation i);}// 內部類public class PinnedGroup { // 分組標識 private String group; // 無匹配分組時是否允許跨分組呼叫,預設 false private boolean cross;}
四、應用場景
SOA服務多分組在開發中有許多應用場景,以下是一些常見的應用場景:
4.1
功能模組劃分
將服務例項按照不同的功能模組進行劃分,每個功能模組對應一個服務分組。這樣可以將不同的功能模組進行解耦,提高系統的可維護性和可測試性。舉例:XXX 服務提供 A、B兩個功能介面,針對不同的上游提供不同的分組
4.2
業務領域劃分
根據業務的不同領域將相關的服務例項劃分到不同的服務分組中。這樣可以使得每個服務分組的資源更有效利用,提高系統的吞吐量。舉例:假如user 和 driver 的token provider服務的程式碼是同一套並且只申請一個 appid,那麼我們可以針對上游的使用者和司機的token consumer服務提供兩個分組服務
4.3
服務SLA
將相同服務 SLA 的服務例項劃分到同一個服務分組中,方便進行隔離和最佳化。舉例:XXX 服務給 QPS 較高和 RT 較小的 APP 端介面服務、QPS 較小和 RT較高的運營端介面服務提供不同的分組
4.4
技術棧劃分
根據不同的技術棧將相關的服務例項劃分到不同的服務分組中。例如,將給前端呼叫的服務服務例項、給後端內部呼叫服務例項和給資料服務呼叫的服務例項分別劃分到不同的服務分組中,每個分組使用不同的例項數量,提高資源的利用率
4.5
安全和許可權管理
將具有相似安全需求或許可權管理需求的服務例項劃分到同一個服務分組中,方便進行統一的安全策略和許可權控制
ps:程式碼相似度較高或者程式碼放在同一個APPID 中更好維護,那麼我們可以在不拆分服務(APPID)的情況下,可以使用 SOA多分組方式給不同的上游提供服務
來自 “ 貨拉拉技術 ”, 原文作者:謝剛;原文連結:https://server.it168.com/a2023/1121/6830/000006830482.shtml,如有侵權,請聯絡管理員刪除。
相關文章
- iOS應用架構談(3):網路層設計方案iOS應用架構
- 應用架構圖的設計應用架構
- React應用架構設計指南React應用架構
- SaaS架構:應用服務、應用結構設計架構
- 揭秘貨拉拉大模型應用平臺的應用部署大模型
- iOS應用架構談:架構設計的方法論iOS應用架構
- 分享一組場景應用設計參考
- 貨拉拉貨運iOS使用者端架構最佳化實踐iOS架構
- iOS應用架構談(一):架構設計的方法論iOS應用架構
- .NET應用架構設計—重新認識分層架構(現代企業級應用分層架構核心設計要素)應用架構
- iOS應用架構談(2):View層的組織和呼叫方案iOS應用架構View
- React Native App應用架構設計React NativeAPP應用架構
- 論軟體架構設計及應用架構
- 百萬年薪架構師之路:談應用系統架構設計架構
- 總結 - 設計模式,企業應用架構模式,架構模式設計模式應用架構
- Angular應用架構設計-2:Data Service模式Angular應用架構模式
- 一文搞懂SaaS應用架構:應用服務、應用結構、應用互動設計應用架構
- iOS 網路層架構設計分享iOS架構
- Angular應用架構設計-5:設計原則與總結Angular應用架構
- srm供應商管理系統架構設計解決方案架構
- FMEA在架構設計中的應用分析架構
- Unity應用架構設計oC工廠理念先行Unity應用架構
- MicrosoftNet企業級應用架構設計(中)ROS應用架構
- 分庫分表架構方案設計架構
- 淺析雲原生應用安全組織架構架構
- Unity應用架構設計(6)——設計動態資料集合ObservableListUnity應用架構
- 區塊鏈應用開發方案|數字貨幣交易所繫統開發(架構設計與原始碼演示)區塊鏈架構原始碼
- 分享兩個架構設計方面的好文!架構
- Unity應用架構設計(9)——構建統一的 RepositoryUnity應用架構
- 前端插拔式 SPA 應用架構實現方案前端應用架構
- Unity應用架構設計(12)——AOP思想的實踐Unity應用架構
- 【架構設計】你的應用該如何分層呢?架構
- 架構師必備:HBase行鍵設計與應用架構
- 系統設計概念:生產 Web 應用的架構Web架構
- Unity應用架構設計(7)——IoC工廠理念先行Unity應用架構
- Django ElasticSearch Ionic 打造 GIS 移動應用 —— 架構設計DjangoElasticsearch架構
- IPSec應用方案設計
- 新零售SaaS架構:客戶管理系統的應用架構設計應用架構