- 微服務從小白到專家:Spring Cloud和Kubernetes實戰
- 姚秋辰 張昕 卿睿
- 1267字
- 2021-10-29 12:24:34
4.2 微服務的拆分規范
4.2.1 領域模型
領域模型是領域驅動設計(Domain-Driven Design,DDD)中的概念,它是對具有清晰邊界的領域對象的一種抽象表示(這種抽象是從業務結合技術的視角出發),領域模型強調的是“邊界劃分”,它通常只關注業務復雜度,從業務視角將應用劃分為一個個獨立的業務子域,比如訂單域、商品域、導購域等;再根據不同的需求場景及團隊對領域知識的不斷積累和認知,對領域內的業務做進一步劃分。
4.2.2 計算密集型業務和I/O密集型業務
計算密集型業務通常分為CPU密集型和GPU密集型兩種,它們的特點都是需要大量的計算資源來完成自身業務,對網絡帶寬的占用不多。比較典型的業務是淘系業務的營銷優惠計算引擎和用戶畫像系統,以及各大互聯網公司中的機器學習系統。將核心主鏈路的計算密集型業務拆分成獨立的微服務,可以有針對性地調配高算力類型的硬件資源進行擴縮容。
I/O密集型業務的特點是需要占用大量網絡帶寬、存儲介質和內存空間以完成自身業務,但只需少量的計算資源。這類業務的典型代表是文件的上傳下載功能,比如淘系商品的圖片空間和視頻空間服務,抖音的小視頻上傳等。將這類業務拆分為獨立服務,可以有針對性地調配存儲資源。在網絡搭建上,我們推薦使用專線服務該類業務,以避免發生網絡阻塞從而影響主鏈路系統。
4.2.3 區分高頻、低頻業務場景和突發流量
分析業務的使用頻率是服務拆分的一個重點。以電商場景為例,主鏈路業務中典型的高頻場景是商品主搜、商品詳情頁等導流端場景,而后臺商品發布服務則是低頻場景。區分高頻、低頻場景,不僅可以對集群資源進行更加精準的調配,在大促等峰值流量沖擊階段,也可以做到細粒度流量整形和服務降級(犧牲非主鏈路上的低頻場景能力,將服務器資源調配給主鏈路上的高頻場景)。
針對雙11爆款商品、微博熱搜等典型的突發流量場景,我們也有特殊的服務拆分手段。在某個資源成為突發熱點的前后,其業務屬性并沒有發生本質的變化,為了防止熱點資源影響整個業務,在服務拆分手段上我們傾向于使用“熱點隔離”的方案。對于秒殺活動等可以預知的突發熱點,我們可以預先將底層數據、緩存從主庫遷移到獨立的“熱點庫”,甚至可以將服務請求路由到專門搭建的熱點集群。而對熱搜等無法提前預知的熱點來說,則可以通過流技術(比如,使用Stream分析RPC接口日志的方式來統計訪問量)分析統計實時業務數據,在某個資源接近熱點閾值的時候,將其動態遷移到熱點庫,這也是目前一線大廠對熱點數據的主要拆分手段。
4.2.4 規劃業務主鏈路
主鏈路規劃是大型應用微服務治理中必不可少的一個環節,其目的是識別出最低限度地完成業務所必須調用的服務鏈路。以電商場景為例,商品搜索、詳情頁、添加購物車和訂單結算是完成下單必不可少的主鏈路服務,而商品用戶評論、導購推薦欄等功能并不包含在主鏈路內,在大促等大流量場景下可以通過彈性縮容和降級的方式,把邊緣業務的系統資源讓給主鏈路上的關鍵服務。
主鏈路服務的故障將對業務產生重大的影響,通過對主鏈路服務進行細粒度的服務拆分,就可以根據具體的業務場景,更加細粒度地運用限流策略、彈性計算和降級策略等流控和容災技術,在峰值場景下保障主鏈路服務的可用性。
- The Complete Rust Programming Reference Guide
- SPSS數據挖掘與案例分析應用實踐
- Interactive Data Visualization with Python
- R語言游戲數據分析與挖掘
- 深入淺出DPDK
- Java性能權威指南(第2版)
- Mastering macOS Programming
- HTML5+CSS3+JavaScript Web開發案例教程(在線實訓版)
- CodeIgniter Web Application Blueprints
- TypeScript圖形渲染實戰:2D架構設計與實現
- R的極客理想:量化投資篇
- 編程風格:程序設計與系統構建的藝術(原書第2版)
- Python程序設計案例教程
- Programming MapReduce with Scalding
- 3ds Max瘋狂設計學院