后現(xiàn)代主義的編程時(shí)代(二)

部分概念性的文字來(lái)自于《1.pptx》,由原人民銀行科技司李副司長(zhǎng)在今年7月《金融電子化雜志》培訓(xùn)所授內(nèi)容。如覺(jué)侵權(quán),請(qǐng)聯(lián)系作者刪除。

人們普遍認(rèn)為一個(gè)分布式系統(tǒng),必須遵循的是CAP原則,即是“數(shù)據(jù)一致性”、“可用性”、“分區(qū)容錯(cuò)性”。無(wú)論你設(shè)計(jì)的分布式系統(tǒng),從系統(tǒng)上分拆也好,從子系統(tǒng)分拆也好,計(jì)算分拆也好,存儲(chǔ)分拆也好,都逃不出這個(gè)概念。

數(shù)據(jù)一致性很容易理解,就是沒(méi)有臟數(shù)據(jù)。你的數(shù)據(jù)分別存放于系統(tǒng)的各個(gè)地方,主-從機(jī)制確保數(shù)據(jù)不容易丟失。但是也要有一個(gè)機(jī)制能保證應(yīng)用讀取到的數(shù)據(jù)和存放的數(shù)據(jù)不能有不一致的情況。比如某鵝廠改造的開(kāi)源MySQL,數(shù)據(jù)庫(kù)主節(jié)點(diǎn)向從節(jié)點(diǎn)分發(fā)數(shù)據(jù)并等待從節(jié)點(diǎn)寫入成功的回執(zhí)。為了性能,他們的做法是寫LOG日志成功即可返回。

可用性包括兩個(gè)概念:一是穩(wěn)定性,服務(wù)不會(huì)掛;二是性能,如果服務(wù)延遲長(zhǎng),超時(shí)多,那和掛咸魚有什么區(qū)別。大多數(shù)分布式集群對(duì)于可用性采取的策略都差不多,就是以大量相對(duì)便宜的PC服務(wù)器來(lái)取代國(guó)際商用的大小型機(jī)。

分區(qū)容錯(cuò)性指的是網(wǎng)絡(luò)分區(qū)。當(dāng)數(shù)據(jù)從一個(gè)物理節(jié)點(diǎn)傳輸?shù)蕉鄠€(gè)物理節(jié)點(diǎn)后,設(shè)備之間的網(wǎng)絡(luò)延時(shí)就會(huì)引起問(wèn)題。因?yàn)橛捎谌蒎e(cuò)容災(zāi)的需要,物理節(jié)點(diǎn)和節(jié)點(diǎn)的通訊有可能處于同一個(gè)交換機(jī)上,有可能處于不同城市之間,還有可能處于不同的大洲上。所以,使用同步通訊交換數(shù)據(jù)是不被推薦的,節(jié)點(diǎn)服務(wù)間的通訊大多數(shù)采取異步通訊的方式。

分布式架構(gòu)的核心理念是“并行拆分和橫向擴(kuò)展”,系統(tǒng)的各個(gè)功能部分采用松耦合的方式并行運(yùn)行,并支持橫向擴(kuò)展和容錯(cuò)恢復(fù)的機(jī)制。所以基于這個(gè)理念,分布式架構(gòu)相對(duì)于集中式架構(gòu)具備不少優(yōu)點(diǎn)。

系統(tǒng)擴(kuò)展能力較強(qiáng),采用通用硬件擴(kuò)展計(jì)算和存儲(chǔ)能力可以提升系統(tǒng)處理能力,滿足業(yè)務(wù)不斷增長(zhǎng)的需求;系統(tǒng)運(yùn)行效率較高,在對(duì)系統(tǒng)各個(gè)環(huán)節(jié)合理拆分的基礎(chǔ)上,透過(guò)并行處理進(jìn)一步突破傳統(tǒng)串行處理存在的效率瓶頸;系統(tǒng)運(yùn)行可靠性較好,將系統(tǒng)拆分后并行運(yùn)行在多臺(tái)相同的設(shè)備上,即使存在單點(diǎn)故障,整個(gè)系統(tǒng)認(rèn)可正常運(yùn)轉(zhuǎn)或者可控恢復(fù);系統(tǒng)成本優(yōu)勢(shì)明顯,分布式系統(tǒng)基于相對(duì)廉價(jià)的通用計(jì)算和存儲(chǔ)設(shè)備構(gòu)建,獲取相同處理能力的成本低于傳統(tǒng)架構(gòu)。

然而需要注意的是,分布式系統(tǒng)不是銀彈。分布式系統(tǒng)不是救世主,并不是所有的應(yīng)用場(chǎng)景存在瓶頸都能使用這個(gè)技術(shù)解決。不同的業(yè)務(wù)形態(tài)所面臨的挑戰(zhàn)不同,使用的架構(gòu)設(shè)計(jì)也會(huì)有差異,通常都需要對(duì)具體問(wèn)題具體分析,沒(méi)有誰(shuí)是最好架構(gòu)的說(shuō)法。不管哪種業(yè)務(wù),不管何種分布式系統(tǒng),其基本思想是想通的、一致的。


要做好一個(gè)好的商用場(chǎng)景分布式架構(gòu)設(shè)計(jì),有兩點(diǎn)是必要優(yōu)先考慮的:一致性事務(wù)和微服務(wù)粒度。

事務(wù)一致性考慮還能細(xì)分為,強(qiáng)事務(wù)一致性還是弱事務(wù)一致性。前面的名詞好理解,弱事務(wù)一致性其實(shí)就是“最終事務(wù)一致性”。什么意思呢,給大家舉個(gè)例子。你用銀行卡去買水果,水果店看你用卡買就很不高興。刷卡后,這筆交易正常情況下只會(huì)有兩個(gè)狀態(tài):成功、失敗。失敗的原因很多種,你密碼輸出啦,賬戶上沒(méi)錢啦,發(fā)卡行受理失敗啦,以及其他。如果這筆交易通訊失敗了,發(fā)卡行無(wú)論如何都會(huì)嘗試沖正,要把你可能在途的錢追回來(lái)。這個(gè)動(dòng)作就是所謂強(qiáng)事務(wù)一致性保證。

然后第二天你沒(méi)帶銀行卡去買鉆戒,珠寶店老板看你用微信買就很不高興。你驗(yàn)證支付指紋以后,你微信上的錢包余額少了兩塊錢,交易也顯示成功了。“且慢!”老板一臉橫肉的攔住你,“我微信錢包沒(méi)有增加錢。你要么給錢,不然就給人頭。”你百口莫辯,小心翼翼的說(shuō),“要不您刷新一下看看?”老板將信將疑的刷了四百二十九次,高高興興的說(shuō),“到帳了到帳了,你可以走了?!边@就是弱事務(wù)一致性,在給定的一段時(shí)間內(nèi)事務(wù)可以達(dá)到最終一致性。你長(zhǎng)吁了一口氣,今天總算是見(jiàn)識(shí)到弱事務(wù)一致性的厲害了。坐上地鐵,你發(fā)現(xiàn)沒(méi)拿鉆戒。

服務(wù)粒度問(wèn)題其實(shí)是一個(gè)非常敏感的話題。做過(guò)ESB服務(wù)治理的你會(huì)在深夜里大喊著醒來(lái),是因?yàn)榘凑辗?wù)治理的要求將一個(gè)接口拆散成兩個(gè)服務(wù),下游系統(tǒng)化為厲鬼要求你給他們做服務(wù)組合。如果粒度小,那么重用性就好,但是如果場(chǎng)景里查詢次數(shù)多了,數(shù)據(jù)配裝的次數(shù)也會(huì)增加;如果粒度大了,會(huì)造成場(chǎng)景中的冗余服務(wù)增多,管理和解析都會(huì)帶來(lái)成本的提升。

這次我們的互(mì)金(mì)項(xiàng)目,有系統(tǒng)的微服務(wù)粒度做的太細(xì)了,于是在測(cè)試中通過(guò)××平臺(tái)查看調(diào)用鏈路的時(shí)候,發(fā)現(xiàn)觸發(fā)到好多次跨域調(diào)用。打開(kāi)代碼一看,原來(lái)是要去獲取參數(shù)的地方,都走到公共層觸發(fā)獲取另一個(gè)服務(wù)了。解決問(wèn)題很多,無(wú)非是用緩存或者單例,具體情況具體分析。


本文說(shuō)教的地方過(guò)多,然而是肉最多的地方。其他兩篇承上啟下的摘錄于下:
后現(xiàn)代主義的編程時(shí)代(一)|?后現(xiàn)代主義的編程時(shí)代(三)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容