實用架構技術,阿里P7架構師教你如何設計解決方案
鏈路追蹤概念
什么是鏈路追蹤,用來解決什么問題

- 用戶行為鏈路,如:瀏覽頁面,觀看視頻,購買商品,收藏,評論等等行為
- 服務流程鏈路,快速定位異常:用戶發(fā)起退貨,遲遲沒收到退回的商品,哪個鏈條出了問題?
- 大數(shù)據(jù)ai畫像,一個鏈條下非業(yè)務的動態(tài)行為數(shù)據(jù),才是最貼近用戶的素材
服務追蹤的基礎出發(fā)點—記錄足跡

- 入口處生成鏈路標識traceid
- 傳遞traceid參數(shù)給下層業(yè)務方法
- 各方法內(nèi)部記錄訪問信息
使用TreadLocal來傳參數(shù)
ThreadLocal,很多地方叫做線程本地變量,也有些地方叫做線程本地存儲,其實意思差不多。可能很多朋友都知道ThreadLocal為變量在每個線程中都創(chuàng)建了一個副本,那么每個線程可以訪問自己內(nèi)部的副本變量。

思考:使用TreadLocal來傳參數(shù)

如何讓traceid的傳遞不侵入業(yè)務?
- 盡量少侵入業(yè)務代碼
- 不需要開發(fā)人員來維護

MDC -----Mapped Diagnostic Context
- 與當前線程綁定 ---- Threadlocal
- 放數(shù)據(jù)--- MDC.put(traceid,aaa)
- 取數(shù)據(jù)--- MDC.get(traceid)
- 日志格式----%X{traceId}

分布式調(diào)用來了?

看看dubbo里的rpc調(diào)用

Dubbo使用filter

Dubbo高階---spi擴展機制

完美,優(yōu)雅地解決掉了rpc的透傳問題!

微服務
軟件架構是一個包含各種組織的系統(tǒng)組織,這些組件包括 Web服務器, 應用服務器, 數(shù)據(jù)庫,存儲, 通訊層), 它們彼此或和環(huán)境存在關系。系統(tǒng)架構的目標是解決利益相關者的關注點
微服務是指開發(fā)一個單個小型的但有業(yè)務功能的服務,每個服務都有自己的處理和輕量通訊機制,可以部署在單個或多個服務器上。微服務也指一種種松耦合的、有一定的有界上下文的面向服務架構。也就是說,如果每個服務都要同時修改,那么它們就不是微服務,因為它們緊耦合在一起;如果你需要掌握一個服務太多的上下文場景使用條件,那么它就是一個有上下文邊界的服務,這個定義來自DDD領域驅動設計

相對于單體架構和SOA,它的主要特點是組件化、松耦合、自治、去中心化,體現(xiàn)在以下幾個方面
- 一組小的服務
服務粒度要小,而每個服務是針對一個單一職責的業(yè)務能力的封裝,專注做好一件事情。
- 獨立部署運行和擴展
每個服務能夠獨立被部署并運行在一個進程內(nèi)。這種運行和部署方式能夠賦予系統(tǒng)靈活的代碼組織方式和發(fā)布節(jié)奏,使得快速交付和應對變化成為可能。
- 獨立開發(fā)和演化
技術選型靈活,不受遺留系統(tǒng)技術約束。合適的業(yè)務問題選擇合適的技術可以獨立演化。服務與服務之間采取與語言無關的API進行集成。相對單體架構,微服務架構是更面向業(yè)務創(chuàng)新的一種架構模式。
- 獨立團隊和自治
團隊對服務的整個生命周期負責,工作在獨立的上下文中,自己決策自己治理,而不需要統(tǒng)一的指揮中心。團隊和團隊之間通過松散的社區(qū)部落進行銜接。