1 DIP核(he)心(xin)思想與三層(ceng)架(jia)構概(gai)述(shu) 依(yi)賴(lai)(lai)倒置原則(Dependency Inversion Principle,DIP)作為SOLID原則中的重要組成部(bu)分(fen),其核(he)心(xin)主張是高層(ceng)模(mo)塊不應(ying)依(yi)賴(lai)(lai)低層(ceng)模(mo)塊,兩(liang)者都應(ying)依(yi)賴(lai)(lai)于抽象;抽象不應(ying)依(yi)賴(lai)(lai)細節(jie),細節(jie)應(ying)該依(yi)賴(lai)(lai)抽象。 在(zai)經典三層(ceng)架(jia)構(表示層(ceng)-業(ye)務邏(luo)輯層(ceng)-數(shu)據(ju)訪問層(ceng))中 ...
vivo 瀏覽器為應對多場(chang)景金(jin)幣激(ji)勵需求及舊架構流(liu)量(liang)、IO等痛點,升級福利中心架構。服務(wu)層面拆(chai)分(fen)(fen)流(liu)量(liang)與(yu)業務(wu),打造金(jin)幣集(ji)散中心;數據(ju)層面分(fen)(fen)庫分(fen)(fen)表、拆(chai)解(jie)大表并優化流(liu)水設(she)計;通過仲裁系統(tong)和軟事務(wu)保(bao)障數據(ju)一致性(xing)。改造后,系統(tong)可支撐千萬級DAU,性(xing)能穩定提升,物理存(cun)儲(chu)成本降低,解(jie)決(jue)了流(liu)量(liang)與(yu)存(cun)儲(chu)壓力(li),成為高可用... ...
管程(cheng)(cheng)(Monitor)是(shi)一種(zhong)用于管理共享資(zi)源(yuan)訪(fang)問(wen)的程(cheng)(cheng)序結(jie)構,能(neng)確(que)(que)保(bao)同(tong)一時刻只有一個線(xian)程(cheng)(cheng)訪(fang)問(wen)共享資(zi)源(yuan),解決(jue)并發編程(cheng)(cheng)中的互斥(chi)和(he)同(tong)步問(wen)題。MESA模型是(shi)管程(cheng)(cheng)的經典實現,主(zhu)要由(you)入(ru)口等待隊列和(he)條件變量等待隊列構成(cheng)。 1)入(ru)口等待隊列?:確(que)(que)保(bao)線(xian)程(cheng)(cheng)互斥(chi),多個線(xian)程(cheng)(cheng)試圖(tu)進入(ru)管程(cheng)(cheng)時,僅一個線(xian)程(cheng)(cheng)能(neng)成(cheng)功,其余線(xian)程(cheng)(cheng)在入(ru)口等待 ...
在多(duo)線(xian)程環境中,?臨(lin)界區(qu)(Critical Section)是(shi)指(zhi)一次只能(neng)由一個線(xian)程執行(xing)的代(dai)碼段,這(zhe)些(xie)代(dai)碼通常涉及對共享資(zi)源(如變(bian)量、數據(ju)(ju)結構、文件或數據(ju)(ju)庫(ku)連(lian)接)的訪問(wen)或修改。臨(lin)界區(qu)的存在是(shi)為(wei)了解決(jue)并(bing)發控制(zhi)中的兩大核心問(wen)題。 ? 1)數據(ju)(ju)不一致性?:如果多(duo)個線(xian)程同時對共享資(zi)源進行(xing)寫(xie)操作(zuo),可能(neng)會破(po)壞數據(ju)(ju) ...
并(bing)(bing)發編程的(de)本質,是在(zai)看似混沌(dun)的(de)并(bing)(bing)行執行中建立(li)秩(zhi)序,確保程序的(de)確定性(xing)。為達此目(mu)的(de),并(bing)(bing)發原語應(ying)運而生,它們(men)是構筑(zhu)一切(qie)并(bing)(bing)發系統的(de)基石。其核(he)心使(shi)命在(zai)于(yu),通(tong)過(guo)定義一套(tao)明(ming)確的(de)交(jiao)互范式,消除因資源共享而引發的(de)競態條件(Race Condition),從而馴服并(bing)(bing)發世界(jie)的(de)不確定性(xing)。 從Java的(de)顯式鎖(suo)(synchro ...
默克(ke)爾樹(shu)(shu)(shu) 默克(ke)爾樹(shu)(shu)(shu)(Merkle Tree)是由(you)計算機科學家Ralph Merkle多年前提出,并以(yi)他(ta)本人(ren)的(de)(de)名字來命(ming)名,也(ye)叫哈希(xi)樹(shu)(shu)(shu)。默克(ke)爾樹(shu)(shu)(shu)是一種樹(shu)(shu)(shu)形數據(ju)結構,通常是二叉樹(shu)(shu)(shu),其中每個(ge)葉(xie)子(zi)節(jie)點是數據(ju)塊的(de)(de)哈希(xi)值,而每個(ge)非葉(xie)子(zi)節(jie)點是其所有子(zi)節(jie)點哈希(xi)值的(de)(de)哈希(xi)。樹(shu)(shu)(shu)根的(de)(de)哈希(xi)值(Merkle Root)代表了整個(ge) ...
Gossip協議,中(zhong)(zhong)文(wen)可譯為(wei)“流(liu)言蜚語(yu)”“閑話”或(huo)“八卦”,形象地(di)描述(shu)了該協議的(de)工作方式——類似(si)于人類社會中(zhong)(zhong)的(de)信息傳播(bo)模式。Gossip協議最(zui)早由Xerox公(gong)司的(de)Palo Alto研究(jiu)中(zhong)(zhong)心(PARC)在一(yi)篇論文(wen)中(zhong)(zhong)提出,論文(wen)中(zhong)(zhong)將其稱為(wei)八卦算法(fa)或(huo)病毒算法(fa)(Epidemic Algorithm),但最(zui)終“ ...
隨著AI編程工具的(de)崛(jue)起(qi),代碼(ma)(ma)生成效率極大提升,但(dan)AI與實際項目需求間(jian)的(de)“鴻溝”卻日益凸顯。本(ben)文(wen)探討了在(zai)AI驅(qu)動的(de)開發(fa)流程中,結構(gou)化、高(gao)質量的(de)開發(fa)文(wen)檔如何成為連接“模糊想(xiang)法”與“精準代碼(ma)(ma)”的(de)關(guan)鍵橋梁,有效打(da)通AI編程的(de)“最后一公里”。 ...
副(fu)本機(ji)制(Replication),是(shi)指分(fen)布(bu)式系(xi)統在多個(ge)節點(dian)間(jian)保存(cun)有相同數(shu)(shu)(shu)據(ju)(ju)(ju)的(de)冗余,即副(fu)本(Replica/copy)。當出(chu)現(xian)某(mou)一(yi)個(ge)節點(dian)的(de)數(shu)(shu)(shu)據(ju)(ju)(ju)丟失時,可以從副(fu)本上(shang)讀取到數(shu)(shu)(shu)據(ju)(ju)(ju)。數(shu)(shu)(shu)據(ju)(ju)(ju)副(fu)本是(shi)分(fen)布(bu)式系(xi)統中解決(jue)數(shu)(shu)(shu)據(ju)(ju)(ju)丟失問題的(de)唯一(yi)手段。 合適的(de)做法并非(fei)以機(ji)器作為(wei)副(fu)本單位(wei),而是(shi)將數(shu)(shu)(shu)據(ju)(ju)(ju)劃分(fen)為(wei)合理的(de)數(shu)(shu)(shu)據(ju)(ju)(ju)段,以數(shu)(shu)(shu)據(ju)(ju)(ju)段為(wei) ...
物理時(shi)(shi)鐘在分布(bu)式系統中難以完(wan)美(mei)同步,導致(zhi)無法僅憑物理時(shi)(shi)間戳(chuo)來精確(que)判斷事件的因果順(shun)序(xu)。邏(luo)輯(ji)時(shi)(shi)鐘為(wei)此而生。 蘭(lan)伯特邏(luo)輯(ji)時(shi)(shi)鐘 蘭(lan)伯特邏(luo)輯(ji)時(shi)(shi)鐘(Lamport Logical Clock)為(wei)系統中的每個(ge)事件分配一(yi)個(ge)單調遞增的數字(時(shi)(shi)間戳(chuo)),用于捕捉事件間的偏序(xu)關(guan)系(Happened-Before Relat ...
租約(Lease) 機(ji)制是(shi)分布式系統中一(yi)種至(zhi)關重要的協(xie)調工具(ju),廣泛應(ying)用于節點狀態判定(ding)、領導(dao)者選(xuan)舉(ju)、分布式鎖、資源管(guan)理等(deng)場景。其核心思想是(shi)通過一(yi)個(ge)帶(dai)有時間限(xian)制的授權(quan)(Time-bounded Promise) 來(lai)確(que)保在不確(que)定(ding)環境下(xia)的行(xing)為(wei)一(yi)致性(xing)(xing)和(he)系統可靠(kao)性(xing)(xing)。 Lease機(ji)制的運行(xing)邏輯主要包括(kuo)以下(xia)要點。 ...
還在(zai)用傳統的(de)builder模(mo)式(shi)來(lai)實例化構(gou)建對象嗎(ma)?來(lai),給(gei)你(ni)的(de)程(cheng)序注入點新鮮血液 業(ye)務(wu)(wu)(wu)導(dao)向(xiang)的(de)Builder模(mo)式(shi)在(zai)AuditSaveVO中的(de)卓越實踐 在(zai)復雜的(de)業(ye)務(wu)(wu)(wu)系統開發中,我(wo)們經(jing)常面臨如何優雅構(gou)建數(shu)據對象的(de)挑(tiao)戰。傳統的(de)構(gou)造(zao)器模(mo)式(shi)在(zai)業(ye)務(wu)(wu)(wu)語(yu)(yu)義表(biao)達(da)方面存在(zai)明顯不(bu)足。今(jin)天(tian)我(wo)們將深入分析一種基于業(ye)務(wu)(wu)(wu)語(yu)(yu)義導(dao)向(xiang) ...
一、核心思想:不同(tong)(tong)的(de)并發哲學 樂(le)觀(guan)(guan)鎖(suo)(suo)和悲觀(guan)(guan)鎖(suo)(suo)是處理數據競爭(多(duo)個(ge)線程(cheng)可(ke)(ke)能(neng)(neng)同(tong)(tong)時修改(gai)同(tong)(tong)一數據)的(de)兩種(zhong)不同(tong)(tong)策略。它們的(de)區別源于對“沖突發生(sheng)概率(lv)”的(de)不同(tong)(tong)假(jia)設(she)。 二、對比總(zong)結先行 特性 悲觀(guan)(guan)鎖(suo)(suo) 樂(le)觀(guan)(guan)鎖(suo)(suo) 哲學 假(jia)設(she)沖突很(hen)可(ke)(ke)能(neng)(neng)發生(sheng) 假(jia)設(she)沖突不太可(ke)(ke)能(neng)(neng)發生(sheng) 機(ji)制 先取鎖(suo)(suo),再操作(zuo)(zuo) 先操作(zuo)(zuo),更新(xin)前(qian)再檢(jian)查沖突 實(shi)現 syn ...
將(jiang)單機問(wen)題(ti)轉化為分布式(shi)解決方(fang)案時,首(shou)要任(ren)(ren)務(wu)是對問(wen)題(ti)進行分解,使得集群中的(de)每臺(tai)機器(qi)負責(ze)處(chu)理原問(wen)題(ti)的(de)一個子集。無論是計(ji)算任(ren)(ren)務(wu)還是存儲任(ren)(ren)務(wu),其操(cao)作對象都(dou)是數(shu)(shu)據。因此,如何將(jiang)海(hai)量數(shu)(shu)據有效(xiao)地分解并分配(pei)到集群的(de)不同節點(dian)上,即(ji)數(shu)(shu)據分布(也常稱為數(shu)(shu)據分片(pian),Data Partitioning/Sharding),是構 ...
在分(fen)布式(shi)系統(tong)中,有效應對節點故障、網絡(luo)分(fen)區延遲和數(shu)據一(yi)致性等(deng)挑(tiao)戰至關重要(yao)。本文將剖析保(bao)障分(fen)布式(shi)系統(tong)可靠(kao)性的核心機制:數(shu)據分(fen)片實現(xian)水平擴(kuo)展,冗余副本保(bao)障數(shu)據高可用(yong),租約(yue)(Lease)機制優化節點狀態(tai)共識與資源管理,多數(shu)派(Quorum)原則確保(bao)操作(zuo)的一(yi)致性,Gossip等(deng)去中心化協(xie)議高效同步集群狀態(tai)。 ...
序列(lie)(lie)(lie)化:數(shu)據(ju)跨(kua)越(yue)邊界(jie)的翻譯官 序列(lie)(lie)(lie)化(Serialization)用于描述RPC服務接口和(he)數(shu)據(ju)結構(gou)。在RPC通(tong)信中,客戶端和(he)服務器之(zhi)間(jian)傳輸的數(shu)據(ju)通(tong)常是結構(gou)化的,如調用方法、請(qing)求參數(shu)、返(fan)回(hui)值等。這些結構(gou)化數(shu)據(ju)需要通(tong)過(guo)序列(lie)(lie)(lie)化過(guo)程轉換(huan)為(wei)二進制(zhi)流,以便在網絡中進行(xing)傳輸。 目前,常見的跨(kua)語言(yan)序列(lie)(lie)(lie)化編碼(ma)方式(shi)包(bao)括 ...
自研RPC協(xie)議:為(wei)性(xing)能(neng)(neng)而生(sheng)(sheng)的(de)(de)賽道利器 盡管gRPC憑借其標準化、跨語言和基于(yu)HTTP/2的(de)(de)強(qiang)大特(te)(te)性(xing),在(zai)公網和云原生(sheng)(sheng)環境(jing)中大放異彩,但在(zai)某些特(te)(te)定的(de)(de)內網環境(jing)中,對性(xing)能(neng)(neng)、延遲(chi)和資源占(zhan)用(yong)的(de)(de)要(yao)求可能(neng)(neng)更為(wei)苛(ke)刻(ke)。HTTP/2雖然高效,但其幀(zhen)結構(gou)和頭部處理機制相(xiang)較于(yu)專為(wei)內網設計的(de)(de)極(ji)簡協(xie)議,仍可能(neng)(neng)引入(ru)不(bu)必要(yao)的(de)(de)開銷(xiao)。 ...
gRPC:云原(yuan)生時代的通(tong)信標準 gRPC將HTTP/2作為其傳輸層,并在此基(ji)礎上(shang)定義了自身的通(tong)信語義。gRPC支持四種服(fu)務方法類型,它們都映射到HTTP/2的流模型上(shang)。 1)Unary RPC: 客戶(hu)端發送單個(ge)請(qing)求,服(fu)務器(qi)返回(hui)單個(ge)響應(ying)(類似傳統請(qing)求-響應(ying))。 2)Server Streaming R ...
頭(tou)部(bu)壓縮(suo) (HPACK) 在(zai)HTTP/1中,每(mei)個(ge)(ge)(ge)請求和響應都會發送大(da)量(liang)重(zhong)復(fu)的(de)頭(tou)部(bu)信息,比(bi)如 Cookie、User Agent、Accept 等,會使得大(da)量(liang)帶寬被這(zhe)些冗余的(de)數據(ju)占用(yong)。為了解決這(zhe)個(ge)(ge)(ge)問(wen)題(ti),HTTP/2引入了HPACK算(suan)法(fa)來壓縮(suo)頭(tou)部(bu)信息。HPACK算(suan)法(fa)有(you)兩個(ge)(ge)(ge)主要(yao)的(de)特性。 1)靜(jing)態表(Sta ...
云(yun)原生計算基金(jin)會(Cloud Native Computing Foundation,CNCF)是一(yi)個非盈(ying)利的(de)(de)開(kai)源(yuan)組織,專注于推動云(yun)原生計算的(de)(de)發(fa)展和標準化。而gRPC(Google Remote Procedure Call)是由(you)Google發(fa)起并開(kai)源(yuan)的(de)(de)高性能、跨語言RPC框架。2017年,Goog ...