導航:首頁 > 源碼編譯 > 分布式核心源碼教程

分布式核心源碼教程

發布時間:2022-12-14 20:11:58

㈠ 什麼是分布式

分布式也就是微服務中的一種體系結構,那麼提到分布式、就要先說說單機和集群
一、單機結構
單機就是所有業務全部寫在一個項目中,部署服務到一台伺服器上,所有請求業務都由這台伺服器處理,顯示,當業務增長到一定程度的時候,伺服器的硬體會無法滿足業務需求,自然而然的想到一個程序步行就部署多個。
二、集群
集群就是單機的多實例,在多個伺服器上部署多個服務,每個服務就是一個節點,部署N個節點,處理業務的能力就提升N倍,這些節點的結合就叫做集群。
負載均衡:協調群里的每個節點均衡地接收業務請求。通俗的講就是服務A和服務B相同時間段內處理的同類業務請求數量是相似的
集群的特點:
擴展性好:集群只是單機的多個復制,沒有改變單機的原有的代碼結構,每次部署新節點只需要復制部署即可。
單個節點業務耦合度高、資源浪費:節點是多個業務處理集合(耦合度高),每個具體業務的訪問量可能差異很大,比如JD上賬戶管理模塊的訪問量肯定低於訂單模塊。
然而賬戶管理模塊和訂單模塊的部署數量是一樣的(因為每個節點里獨有這兩個模塊),相對於訂單模塊來說,部署同樣多的賬戶管理模塊就是浪費。
那就把單機節點不同的業務處理模塊拆開,這就是分布式了。
三、分布式(微服務)
分布式結構就是一個完整的系統,按照業務功能,拆分成一個個獨立的子系統,在分布式結構中,每個子系統就被稱為「服務」。這些子系統能夠獨立運行在Web容器中,他們之間通過RPC方式通信。
舉個例子,假如需要開發一個在線商城。按照微服務的思想,我們需要按照功能模塊拆分成多個獨立的服務,如:用戶服務、產品服務、訂單服務、後台管理服務、數據分析服務等。
這一個個服務都是一個個獨立的項目,可以獨立運行。如果服務之間有依賴關系,那麼通過RPC方式調用。
分布式的優點:
系統之間的耦合度大大降低,可以獨立開發、獨立部署、獨立測試,系統與系統之間的邊界非常明確,排錯也變得相當於容易,開發效率大大提升。
系統之間的耦合性降低,從而系統更易於擴展,我們可以針對性地擴展某些服務,就是對子系統集群。例如:雙十一時,訂單子系統、支持子系統需要集群,賬號管理子系統不需要集群。
服務的復用性更高,比如:我們將用戶系統作為單獨的服務後,該公司所有的產品都可以使用該系統作為用戶系統,無需重復開發。
四、分布式與集群的區別
將一套系統拆分成不同子系統部署在不同伺服器上(這叫分布式)
署多個相同的子系統在不同的伺服器上(這叫集群)
部署在不同伺服器上的同一個子系統應做負載均衡。
分布式:一個業務拆分為多個子業務,部署在多個伺服器上 。
集群:同一個業務,部署在多個伺服器上 。

㈡ 分布式事務解決方案ServiceComb - Omega源碼閱讀與分享

ServiceComb已經是Apache的頂級項目,包含兩個組件,即 alpha 和 omega。

源碼地址:https://github.com/apache/servicecomb-pack

alpha 是事務協調中心,保存事務日誌,通過日誌協調各個分支

demo 裡面項目的各框架的例子:spring和bbo saga tcc

docs 設計文檔,最先應該熟悉的。

omega 負責與alpha通訊,子事務邏輯

pack-contracts gRPC通訊介面定義文件,通過中間文件生成客戶端與服務端面代碼,讓開發者不必關心通訊過程

web 用angular寫的web界面,可以查看事務的狀態。

我們主要關注的alpha和omega的代碼,gRPC知識是通訊基礎非常重要,最好先了解gRPC和probuf、Kyro序列化對閱讀源碼

還是很有幫助的。但通訊部分只是簡單帶過。

GlobalTxId全局事務ID標記子事務是否同屬性一個事務中

ParentTxId 父類的事務ID

localTxId子事務Id

Omega會面向切面編程的方式,向程序中注入相應的邏輯,初始化事務上下文OmegaContext,在事務處理的過程中向alpha報告事務狀態,

實現saga協調協議和TCC協調協議,下面就是omega客戶端要配置了三個信息

omega.enable=true或@EnableOmega的作用只標記開啟Omega,Omega在SpringBoot上初始化過程:

OmegaSpringAutoConfiguration 通過@Configuration,在Spring框架啟動時載入並配置

OmegaSpringConfig

作用:初始化各Bean,IdGenerator用來生成子事務Id Saga的事件Sender Tcc事件Sender回調CallbackContext

TransactionAspectConfig

對@SagaStart @Compensable註解AOP的切面編程對象初始

Omega內部機制:SagaStartAspect @SagaStart的AOP切面編程

TransactionAspect對@Compensable註解AOP切面編程

成功場景下,每個事務都會有開始和對應的結束事件。

TransactionAspect=>DefaultRecovery=>CompensableInterceptor

封裝了通訊組件:bbo fegin resttemplate servicecomb實現的通訊

這些組件各自通訊的基礎上,在服務之間相互調用時,把globalTxId和localTxId傳遞過去,並注入Context中

如:omega-transport->omega-transport-resttemplate

RestTemplateConfig 配置攔截器

:把當前的上下文的globalTxId和localTxId放到請求里

TransactionHandlerInterceptor 服務提供者,把resttemplate傳遞過來的globalTxId和localTxId放到當前上下文里,

pack-contracts->pack-contract-grpc

gRPC的介面服務定義文件:GrpcCommon.proto GrpcTccEvent.protogrpcTxEvent.proto:這些文件在protobuf命令直接編譯java代碼。

如何使用請看:proto文件gRpc基礎

謝謝能看到最後的人:我分享我是怎麼閱讀源碼的。源碼閱讀不能一上來就找到main入口一行一行的看。最先應該了解基本的組成架構、和用到了哪些技術棧,如果還用了你從來沒見的技術,建議先去學習這門新的技術,再回頭來看代碼,熟悉了各模塊相對應的功能後。我會找到一個切入口,猜一下它的實現方式,再根據猜測,帶著疑問,去找答案。如果對整個項目的模塊不是很清楚,最好先把源碼里的Demo正常的運行。通過這樣的簡單學習,一步步的深入。有的代碼的抽象是比較復雜的。可先跳過,當你對整個結構都非常了解了,這時再回頭去讀剩下的難點。最後有個總結有個對比就是最好結果。

閱讀全文

與分布式核心源碼教程相關的資料

熱點內容
溫州直播系統源碼 瀏覽:110
程序員在上海買房 瀏覽:382
生活解壓游戲機 瀏覽:907
季羨林pdf 瀏覽:716
php支付寶介面下載 瀏覽:814
ipad怎麼把app資源庫關了 瀏覽:301
量柱比前一天多源碼 瀏覽:416
電子書app怎麼上傳 瀏覽:66
國家反詐中心app注冊怎麼開啟 瀏覽:804
全波差分傅里葉演算法窗長 瀏覽:41
程序員如何講自己做過的項目 瀏覽:7
程序員要看的書頸椎 瀏覽:946
php文章cms 瀏覽:553
CSS權威指南第三版PDF 瀏覽:496
android怎麼搭建框架 瀏覽:184
正宗溯源碼大燕條一克一般多少錢 瀏覽:917
電腦感染exe文件夾 瀏覽:916
wpsppt怎麼轉pdf格式 瀏覽:88
騰訊文檔在線編輯怎麼添加密碼 瀏覽:880
本地不能訪問伺服器地址 瀏覽:865