唯品會微服務架構演進之路
唯品會是業界在服務化走得比較徹底的一家公司,主要體現有兩方面,一是在徹底落地,二是純自研。從2015年開始建設至今,微服務基礎中臺已經成為唯品會最為重要的技術基礎設施之一,在唯品會所有關鍵業務場景全面深入落地,并承載著幾乎全部用戶流量的請求處理和后端服務調用。在體系內注冊的獨立服務數超過3000,獨立方法數萬級別,高峰時每小時承載著千億次服務調用,服務化網關作為流量入口承載著百萬級別QPS。
單體架構
特點:
- 采用LAMP技術棧。
- 所有功能模塊都集成在一個應用程序中。
- 數據庫存在單點故障風險。
問題:
- 隨著業務增長,應用變得復雜,維護困難。
- 數據庫負載過高,擴展性差。
垂直應用架構
特點:
- 將單體應用拆分為多個獨立的垂直應用。
- 每個應用有獨立的數據庫。
圖片
垂直應用架構
特點:
- 將單體應用拆分為多個獨立的垂直應用。
- 每個應用有獨立的數據庫。
問題:
- 數據一致性難以保證。
- 應用之間的依賴關系復雜,導致維護成本高。
圖片
微服務架構
特點:
- 將垂直應用進一步拆分為更小的微服務。
- 每個微服務獨立部署,獨立數據庫。
- 通過API進行通信。
實踐:
- 訂單服務化:將訂單處理拆分為多個獨立的微服務,如查詢訂單、取消訂單、退款等。
- 服務能力開放:通過API網關開放服務能力,構建生態系統。
圖片
為什么要這么分呢?
1.分層清晰:
架構圖按照功能層次劃分,每一層都有明確的職責和邊界,確保了系統的模塊化 和可維護性。
2.服務獨立:
基礎服務、聚合服務和流程服務之間的依賴關系明確,每個服務都可以獨立開發、部署和擴展,提升了系統的靈活性和可靠性。
3.復用性高:
基礎服務提供了最基本的業務功能,聚合服務通過調用基礎服務實現更高層次的業務功能,提高了服務的復用性,減少了重復開發工作。
4.面向用戶的聚合API服務:
頂層的聚合API服務面向不同的業務線,提供統一的接口,方便前端應用調用。這種設計確保了用戶操作的統一性和一致性。
訂單服務化
圖片
服務模塊職責明確,售前、售后、履約、定時任務和公共服務等各自獨立,避免了職責混亂,提高了系統的可維護性和擴展性。各個服務模塊可以獨立開發、部署和擴展,方便根據需求進行調整和優化,提升系統的靈活性。定時任務和公共服務的獨立設計,使得系統在高并發和復雜場景下也能保持高可用性,減少了單點故障的風險,通過分層設計,將復雜的業務邏輯分解為多個小的模塊,減少了單個模塊的負載,提高了整體系統的性能。各個模塊獨立管理,方便運維和監控,可以快速定位和解決問題,提高系統的運維效率,通過將自營訂單服務和第三方訂單服務分開設計,支持多種業務模式,方便企業拓展不同的業務渠道。
訂單服務化和取消訂單相關服務交互
圖片
服務能力開放共建生態
圖片
微服務整體架構
圖片
微服務架構最佳實踐
圖片
1. 業務驅動原則
- 識別核心業務域,形成基礎業務能力:首先要識別和理解業務的核心部分,確保微服務的設計和實現是圍繞這些關鍵業務能力展開的。
- 根據業務定位、范圍、邊界進行服務的劃分:根據業務需求和功能進行合理的服務劃分,確保每個微服務有明確的邊界和職責。
- 首先關注服務的業務范圍,而不是服務的數量、粒度:重點在于服務的功能和作用,而不是追求將系統拆分為盡可能多的小服務。
2. 服務分層原則
- 劃分基礎、聚合、流程服務:將服務劃分為基礎服務(提供基本功能)、聚合服務(組合多個基礎服務)、流程服務(實現復雜業務流程)。
- 基礎服務貼近業務實體,提供業務的基礎能力:基礎服務直接支持業務實體,提供基本的業務操作和數據管理。
- 聚合服務聚合基本業務場景,滿足高一層業務場景并可復用:聚合服務通過組合基礎服務,實現更復雜的業務功能,支持更高層次的業務需求。
- 流程服務面向復雜業務流程實現,通過驅動多個聚合/基礎服務實現一個完整的業務流程:流程服務負責協調多個服務,完成復雜的業務流程。
3. 服務松耦合原則
- 服務職責單一,一個服務聚焦在特定業務的有限范圍內,有助于敏捷開發和獨立發布:每個服務應該有明確的職責范圍,避免職責過于寬泛,以便獨立開發和部署。
- 區分核心業務服務和非主核心業務服務:核心業務服務是系統的關鍵部分,非主核心業務服務則是輔助性的功能。
- 區分穩定服務和易變服務:將頻繁變化的服務和穩定的服務分開管理,減少變化對系統整體的影響。
- 每個服務只能訪問自己的數據:服務之間通過API進行通信,避免直接訪問其他服務的數據,增強系統的模塊化和獨立性。
4. 服務獨立部署原則
- 服務獨立部署,能夠獨立發布或取消發布:每個服務都可以獨立部署,不依賴于其他服務,發布和回滾都非常靈活。
- 服務可水平擴展,并支持單獨擴展:服務能夠根據需求進行水平擴展,支持彈性伸縮。
- 實現持續集成和自動發布:通過持續集成和自動化工具,實現服務的自動化構建、測試和部署。
- 實現服務的技術和業務監控:對服務的運行狀態進行實時監控,確保系統的穩定性和性能。
5. 兼容性原則
- 接口契約先行,提供最新在線服務文檔:服務之間的接口要有明確的契約,并提供最新的文檔,確保各服務之間的兼容性。
- 服務版本管理,保證向前兼容:通過版本管理,確保新版本的服務能夠兼容舊版本,平滑過渡。