現(xiàn)在用的是這兩個go-micro consul
有一個加減用戶積分的微服務(wù) <用戶微服務(wù)> 加減積分在服務(wù)中直接進(jìn)行
很多服務(wù)現(xiàn)在 依賴 用戶微服務(wù) ,現(xiàn)在怎么更新,重啟而不影響其他服務(wù)呢
如果啟動兩個用戶實例, 兩個實例之間的用戶積分怎么同步呢
請問,你們都是怎么處理的呢
分布式系統(tǒng)架構(gòu)中,分布式事務(wù)問題是一個繞不過去的挑戰(zhàn)。而微服務(wù)架構(gòu)的流行,讓分布式事問題日益突出!
下面我們以電商購物支付流程中,在各大參與者系統(tǒng)中可能會遇到分布式事務(wù)問題的場景進(jìn)行詳細(xì)的分析!
如上圖所示,假設(shè)三大參與平臺(電商平臺、支付平臺、銀行)的系統(tǒng)都做了分布式系統(tǒng)架構(gòu)拆分,按上數(shù)中的流程步驟進(jìn)行分析:
1、電商平臺中創(chuàng)建訂單:預(yù)留庫存、預(yù)扣減積分、鎖定優(yōu)惠券,此時電商平臺內(nèi)各服務(wù)間會有分布式事務(wù)問題,因為此時已經(jīng)要跨多個內(nèi)部服務(wù)修改數(shù)據(jù);
2、支付平臺中創(chuàng)建支付訂單(選銀行卡支付):查詢賬戶、查詢限制規(guī)則,符合條件的就創(chuàng)建支付訂單并跳轉(zhuǎn)銀行,此時不會有分布式事務(wù)問題,因為還不會跨服務(wù)改數(shù)據(jù);
3、銀行平臺中創(chuàng)建交易訂單:查找賬戶、創(chuàng)建交易記錄、判斷賬戶余額并扣款、增加積分、通知支付平臺,此時也會有分布式事務(wù)問題(如果是服務(wù)化架構(gòu)的話);
4、支付平臺收到銀行扣款結(jié)果:更改訂單狀態(tài)、給賬戶加款、給積分帳戶增加積分、生成會計分錄、通知電商平臺等,此時也會有分布式事務(wù)問題;
5、電商平臺收到支付平臺的支付結(jié)果:更改訂單狀態(tài)、扣減庫存、扣減積分、使用優(yōu)惠券、增加消費積分等,系統(tǒng)內(nèi)部各服務(wù)間調(diào)用也會遇到分布式事問題;
如上圖,支付平臺收到銀行扣款結(jié)果后的內(nèi)部處理流程:
1、支付平臺的支付網(wǎng)關(guān)對銀行通知結(jié)果進(jìn)行校驗,然后調(diào)用支付訂單服務(wù)執(zhí)行支付訂單處理;
2、支付訂單服務(wù)根據(jù)銀行扣款結(jié)果更改支付訂單狀態(tài);
3、調(diào)用資金賬戶服務(wù)給電商平臺的商戶賬戶加款(實際過程中可能還會有各種的成本計費;如果是余額支付,還可能是同時從用戶賬戶扣款,給商戶賬戶加款);
4、調(diào)用積分服務(wù)給用戶積分賬戶增加積分;
5、調(diào)用會計服務(wù)向會計(財務(wù))系統(tǒng)寫進(jìn)交易原始憑證生成會計分錄;
6、調(diào)用通知服務(wù)將支付處理結(jié)果通知電商平臺;
如上圖,把支付系統(tǒng)中的銀行扣款成功回調(diào)處理流程提取出來,對應(yīng)的分布式事務(wù)問題的代碼場景:
/ 支付訂單處理 /
@Transactional(rollbackFor = Exception.class)
public void completeOrder() {
orderDao.update(); // 訂單服務(wù)本地更新訂單狀態(tài)
accountService.update(); // 調(diào)用資金賬戶服務(wù)給資金帳戶加款
pointService.update(); // 調(diào)用積分服務(wù)給積分帳戶增加積分
accountingService.insert(); // 調(diào)用會計服務(wù)向會計系統(tǒng)寫入會計原始憑證
merchantNotifyService.notify(); // 調(diào)用商戶通知服務(wù)向商戶發(fā)送支付結(jié)果通知
}
本地事務(wù)控制還可行嗎?
以上分布式事務(wù)問題,需要多種分布式事務(wù)解決方案來進(jìn)行處理。
訂單處理:本地事務(wù)
資金賬戶加款、積分賬戶增加積分:TCC型事務(wù)(或兩階段提交型事務(wù)),實時性要求比較高,數(shù)據(jù)必須可靠。
會計記賬:異步確保型事務(wù)(基于可靠消息的最終一致性,可以異步,但數(shù)據(jù)絕對不能丟,而且一定要記賬成功)
商戶通知:最大努力通知型事務(wù)(按規(guī)律進(jìn)行通知,不保證數(shù)據(jù)一定能通知成功,但會提供可查詢操作接口進(jìn)行核對)
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。