www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]提到路由,不免會(huì)想到網(wǎng)絡(luò)通信過程中起到數(shù)據(jù)包轉(zhuǎn)發(fā)的路由器。而我們今天講到支付路由系統(tǒng),也是起到類似的作用。

支付路由系統(tǒng)

提到路由,不免會(huì)想到網(wǎng)絡(luò)通信過程中起到數(shù)據(jù)包轉(zhuǎn)發(fā)的路由器。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))
圖片來自網(wǎng)絡(luò)

而我們今天講到支付路由系統(tǒng),也是起到類似的作用。路由系統(tǒng)本身并不處理具體業(yè)務(wù),它的作用就是將支付請(qǐng)求轉(zhuǎn)發(fā)底層支付通道。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))
支付路由系統(tǒng)

如上圖所示,支付系統(tǒng)接入層,接收到支付請(qǐng)求之后,經(jīng)過內(nèi)部運(yùn)算,最后將會(huì)通過路由系統(tǒng)轉(zhuǎn)發(fā)給具體底層的支付通道。

另外,除了路由轉(zhuǎn)發(fā)功能以外,路由器一般還會(huì)有一些額外的功能,比如防火墻等。

那我們其實(shí)也可以在支付路由系統(tǒng)加入額外功能,比如實(shí)時(shí)計(jì)算底層支付渠道的成功率,若低于一定的閾值,進(jìn)行報(bào)警并且將該渠道下線。

這里需要說明一點(diǎn),這里的路由系統(tǒng)可以是一個(gè)應(yīng)用中子模塊,也可以是一個(gè)單獨(dú)子系統(tǒng)。

為什么需要路由系統(tǒng)

看到這里,可能會(huì)有一些小伙伴會(huì)思考,一定需要這個(gè)路由系統(tǒng)嗎?直接將請(qǐng)求發(fā)給支付通道不好嗎?

答案當(dāng)然是可以的,如果當(dāng)前只對(duì)接「一兩個(gè)支付渠道」,這么做沒問題,并且也推薦這么做。

這個(gè)階段由于業(yè)務(wù)量不大,支付系統(tǒng)可能只是一個(gè)單體應(yīng)用,或者也可能是其他應(yīng)用內(nèi)一個(gè)子模塊而已。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

那這個(gè)時(shí)候,業(yè)務(wù)很簡(jiǎn)單,系統(tǒng)也很簡(jiǎn)單,那我們不需要額外的路由系統(tǒng),增加系統(tǒng)復(fù)雜度。

不過這樣的系統(tǒng)弊端也很明顯,如果后期再新增一個(gè)支付通道,我們需要再開發(fā)對(duì)接。

另外由于所有實(shí)現(xiàn)都在一個(gè)系統(tǒng),假設(shè)系統(tǒng)應(yīng)用發(fā)生問題,那么就是大家一起「死」,這其實(shí)也是單體系統(tǒng)最大弊端。

所以如果底層對(duì)接支付通道很多,像一般第三支付公司的支付系統(tǒng),同一家銀行的可能會(huì)對(duì)接很多支付通道,比對(duì)銀聯(lián)無跳轉(zhuǎn)支付,網(wǎng)聯(lián)支付,也有可能是 XX 行自己提供的接口。

那么這種情況就非常需要單獨(dú)維護(hù)一個(gè)路由系統(tǒng)。

PS:630 政策之前,支付公司對(duì)接支付通道那真是一個(gè)多,同一家銀行,可能會(huì)對(duì)接四五個(gè)通道。

但是 630政策之后, 不允許支付機(jī)構(gòu)直接對(duì)接銀行。

所以現(xiàn)在支付機(jī)構(gòu)對(duì)接通道可能會(huì)比之前少很多。

實(shí)現(xiàn)方式

路由系統(tǒng)實(shí)現(xiàn)方式有很多,下面主要分享一下我所經(jīng)歷過實(shí)現(xiàn)方案。

我們的路由系統(tǒng)經(jīng)歷過三個(gè)階段的迭代,才有了現(xiàn)在的實(shí)現(xiàn)方案。

第一個(gè)階段-混沌初開

這個(gè)階段就跟上面講的場(chǎng)景一樣,業(yè)務(wù)需求較簡(jiǎn)單,僅僅只需要對(duì)接一兩個(gè)支付通道。

為了快速上線,設(shè)計(jì)方案就簡(jiǎn)單粗暴,所有業(yè)務(wù)都處于一個(gè)應(yīng)用。

支付子模塊對(duì)內(nèi)暴露暴露支付服務(wù)接口,由業(yè)務(wù)系統(tǒng)發(fā)起直接調(diào)用。

系統(tǒng)設(shè)計(jì)圖如下:

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

這個(gè)階段由于只有一個(gè)支付渠道,所以也不需要有路由系統(tǒng),直接由業(yè)務(wù)系統(tǒng)調(diào)用支付服務(wù)接口發(fā)起支付。

不過隨著業(yè)務(wù)量增大之后,這個(gè)設(shè)計(jì)方案就暴露很多問題:

  1. 業(yè)務(wù)系統(tǒng)與支付系統(tǒng)位于同一個(gè)系統(tǒng),系統(tǒng)任何一次變更都會(huì)影響整個(gè)系統(tǒng)。
  2. 擴(kuò)展性問題。每接入一個(gè)新的支付通道如微信,就需要增加一個(gè)新的實(shí)現(xiàn)類。另外,業(yè)務(wù)系統(tǒng)的代碼同時(shí)也需要改動(dòng),需要調(diào)用新的實(shí)現(xiàn)類。

針對(duì)以上問題,我們進(jìn)行第一版的改造。

首先我們將整個(gè)支付模塊從原來應(yīng)用中拆分出來,成為一個(gè)獨(dú)立的子系統(tǒng),專門運(yùn)行支付業(yè)務(wù)。

這個(gè)系統(tǒng)對(duì)外提供一組支付接口,業(yè)務(wù)系統(tǒng)只需要調(diào)用這個(gè)接口,傳入必要的參數(shù),無需關(guān)心支付系統(tǒng)到底是如何實(shí)現(xiàn)的。

如果業(yè)務(wù)系統(tǒng)想指定某個(gè)支付通道,比如支付寶,那么可以在接口傳入這個(gè)渠道標(biāo)識(shí),支付系統(tǒng)將會(huì)根據(jù)這個(gè)渠道標(biāo)識(shí)調(diào)用相應(yīng)的支付通道。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

其次梳理渠道接口文檔,抽象出共性接口,每個(gè)支付通道實(shí)現(xiàn)都需要繼承這個(gè)接口。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

這組通用渠道接口,其中 「channelName」 方法,代表這個(gè)實(shí)現(xiàn)類具體代表哪個(gè)通道。比如說這個(gè)方法返回 「aliPay」,那么就代表這個(gè)實(shí)現(xiàn)類將會(huì)調(diào)用支付寶通道。

支付系統(tǒng)子應(yīng)用中將會(huì)維護(hù)一個(gè)類似路由表,這里簡(jiǎn)單使用 Map 存儲(chǔ)映射關(guān)系,「key」 為上文提到的渠道唯一應(yīng)用標(biāo)識(shí),而 「value」 為具體的實(shí)現(xiàn)類。

應(yīng)用初始化之后,將會(huì)調(diào)用 「Spring ApplicationContext getBeansOfType」 方法,獲取同一個(gè)接口的所有實(shí)現(xiàn)類 ,最后將其放入 Map 緩存中。

每次支付調(diào)用都會(huì)根據(jù)渠道唯一標(biāo)識(shí)從路由表獲取具體實(shí)現(xiàn)類,然后由具體的子類實(shí)現(xiàn)支付邏輯。

學(xué)過設(shè)計(jì)模式的同學(xué),這里應(yīng)該不會(huì)陌生,這其實(shí)是使用設(shè)計(jì)模式中的策略模式。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

這個(gè)階段,由于業(yè)務(wù)還不是很復(fù)雜,系統(tǒng)還是挺簡(jiǎn)單,路由系統(tǒng)還只是系統(tǒng)中的一個(gè)子模塊。

第二個(gè)階段-神功初成

經(jīng)歷過一段時(shí)間,公司的業(yè)務(wù)量變的越來越大,這個(gè)階段我們開始追求系統(tǒng)的穩(wěn)定性。

但是在第一階段設(shè)計(jì)方案中,支付系統(tǒng)所有模塊位于同一工程。有些模塊可能需要頻繁發(fā)布,這樣一旦發(fā)布就會(huì)影響所有系統(tǒng)功能。

第二點(diǎn),系統(tǒng)功能全都耦合在一起,團(tuán)隊(duì)開發(fā)也變的困難,分支沖突,代碼丟失也是經(jīng)常的事。

第三點(diǎn),一旦某些改動(dòng)發(fā)布發(fā)生問題,整個(gè)系統(tǒng)都受到影響,真的是「要死一起死」。

所以這個(gè)階段針對(duì)以上的問題,我們進(jìn)行了相應(yīng)改造,開始將支付系統(tǒng)進(jìn)行拆分。

首先按照功能,將支付系統(tǒng)拆分幾個(gè)獨(dú)立的子系統(tǒng),路由系統(tǒng),渠道系統(tǒng),成為獨(dú)立系統(tǒng),獨(dú)立部署維護(hù)。

每個(gè)支付通道單獨(dú)維護(hù)部署,成為一個(gè)單獨(dú)的子應(yīng)用。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

系統(tǒng)之間的調(diào)用關(guān)系,就從同一進(jìn)程內(nèi)調(diào)用,變成使用 「RPC」 進(jìn)行跨進(jìn)程調(diào)用。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

這個(gè)時(shí)候就會(huì)有個(gè)問題,渠道系統(tǒng)可能會(huì)因?yàn)榘l(fā)布而下線/上線,這時(shí)路由系統(tǒng)必須動(dòng)態(tài)維護(hù)這種關(guān)系,在渠道系統(tǒng)某一節(jié)點(diǎn)下線時(shí),自動(dòng)刪除調(diào)用關(guān)系,而當(dāng)應(yīng)用上線時(shí),新增調(diào)用關(guān)系。

「說白了,路由系統(tǒng)需要實(shí)現(xiàn)渠道服務(wù)動(dòng)態(tài)發(fā)現(xiàn)?!?/strong>

看到這里不要怕,其實(shí) Dubbo 框架已經(jīng)自帶這個(gè)功能,我們沒必要自己再去實(shí)現(xiàn)了。

Dubbo 配置中有一個(gè)屬性-「group」,這個(gè)屬性可以用于服務(wù)分組。

當(dāng)同一個(gè)接口有多個(gè)實(shí)現(xiàn),我們就可以根據(jù)這個(gè)來區(qū)分不同渠道系統(tǒng)的實(shí)現(xiàn)。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

因?yàn)榍老到y(tǒng)實(shí)現(xiàn)同一組接口之后,提供出 Dubbo 服務(wù)需要加上相應(yīng)的 group 屬性,值為相應(yīng)的渠道唯一標(biāo)識(shí)。

如下所示:

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

路由系統(tǒng)只要引入這個(gè) Dubbo 服務(wù),設(shè)置相應(yīng)的 「group」 屬性 ,路由系統(tǒng)引用渠道系統(tǒng)的服務(wù):

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

此時(shí)路由系統(tǒng)就跟第一階段一樣,內(nèi)部維護(hù)一個(gè)路由表就好了。

這里采用了 XML 配置存儲(chǔ)渠道標(biāo)識(shí)與 Dubbo 引用服務(wù)的映射關(guān)系,如下所示:

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

服務(wù)啟動(dòng)之后解析這個(gè) XML 文件,然后將其維護(hù)在 Map 中。每次支付調(diào)用都會(huì)根據(jù)渠道唯一標(biāo)識(shí)從路由表獲取服務(wù)名,然后借助 「Spring ApplicationContext#getBean」 獲取具體的 Dubbo 引用服務(wù)。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

后續(xù)如果再新增渠道系統(tǒng),路由系統(tǒng)不需要再修改任何代碼,只要在配置文件中新增 Dubbo 服務(wù)引用以及增加路由表引用關(guān)系即可。

第三階段-登峰造極

第二個(gè)階段路由系統(tǒng)基本上已經(jīng)滿足現(xiàn)有階段業(yè)務(wù)實(shí)用,不過還是存在個(gè)問題,渠道應(yīng)用新增時(shí),還需要新增配置「重啟應(yīng)用」。

之前有一次新增渠道,忘記了在路由系統(tǒng)新增配置,從而導(dǎo)致新的渠道應(yīng)用無法被調(diào)用,找了很久的問題,才發(fā)現(xiàn)是這個(gè)問題。

所以第三階段,主要是優(yōu)化路由系統(tǒng),去掉上述配置文件,到達(dá)新增渠道應(yīng)用,而不用重啟路由系統(tǒng)。

這個(gè)階段的改造,我們不再使用 XML 配置引用服務(wù),而是借助 「Dubbo API」 ,動(dòng)態(tài)引用 Dubbo 服務(wù)。

查看 ?Dubbo 文檔 ,可以直接使用 ReferenceConfig 直接查找服務(wù)提供者。

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

官方文檔建議:

ReferenceConfig 實(shí)例很重,封裝了與注冊(cè)中心的連接以及與提供者的連接,需要緩存。否則重復(fù)生成 ReferenceConfig 可能造成性能問題并且會(huì)有內(nèi)存和連接泄漏。在 API 方式編程時(shí),容易忽略此問題。

這里使用ReferenceConfigCache,用于緩存 「ReferenceConfig」 實(shí)例。

改造之后,去除之前所有引用服務(wù)配置文件以及緩存注冊(cè)代碼,不用再使用 Map 存儲(chǔ)路由的映射關(guān)系。改造如下:

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

總結(jié)

回顧上文,可以看到初期沒有路由系統(tǒng),整個(gè)系統(tǒng)可以運(yùn)行下去。

但是隨著業(yè)務(wù)量不斷變大變復(fù)雜,最開始的系統(tǒng)架構(gòu)已經(jīng)不能適應(yīng)當(dāng)前的環(huán)境,所以我們才開始系統(tǒng)拆分,進(jìn)行微服務(wù)改造,一步步改進(jìn)系統(tǒng)。

改進(jìn)的過程中,不斷發(fā)現(xiàn)方案不足處,然后一步步迭代演進(jìn)。這個(gè)過程中,要善于利用現(xiàn)有框架的功能,加速功能的開發(fā)。

最后,本文給出了幾種不同階段路由系統(tǒng)實(shí)現(xiàn)方式,適合不同階段、不同類型的系統(tǒng)。

如果各位同學(xué)剛好也有類似需要,可以根據(jù)自己系統(tǒng)的情況借鑒參考。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

長按訂閱更多精彩▼

從無到有,支付路由系統(tǒng)升級(jí)打怪之路(原創(chuàng))

如有收獲,點(diǎn)個(gè)在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉