當(dāng)前位置: 首頁(yè) » 綜合資訊 » 企業(yè)資訊 »

微信支付:如何打造移動(dòng)支付時(shí)代的高可用收銀系統(tǒng)?

發(fā)布日期:2017-04-11  中國(guó)POS機(jī)網(wǎng)

移動(dòng)支付時(shí)代,越來(lái)越多的人習(xí)慣于不帶現(xiàn)金出門,許多支付場(chǎng)景只需要掏出手機(jī)就能完成。正因?yàn)槿绱?,收銀系統(tǒng)的可用性問(wèn)題也越來(lái)越重要。如何打造移動(dòng)支付時(shí)代的高可用收銀系統(tǒng)?這是微信支付團(tuán)隊(duì)的經(jīng)驗(yàn),僅供參考。

1、為什么強(qiáng)調(diào)收銀系統(tǒng)的可用性?

隨著移動(dòng)支付高速發(fā)展,用戶已養(yǎng)成出門消費(fèi)不帶錢包的習(xí)慣,頻繁的日常消費(fèi)對(duì)商戶收銀系統(tǒng)高可用提出了極高的要求,收銀系統(tǒng)一點(diǎn)小小的故障如“付不了錢、重復(fù)支付、付款超時(shí)”等都會(huì)給用戶和商戶帶來(lái)諸多的不適和不利,引發(fā)用戶憤怒、投訴、糾紛,最終導(dǎo)致商戶的用戶流失。所以對(duì)于商戶來(lái)說(shuō)如何打造高可用的收銀系統(tǒng)就變得十分的重要。

如何打造高可用收銀系統(tǒng)?看完本文,相信您將有所啟發(fā)。

2、高可用收銀系統(tǒng)設(shè)計(jì)方案

通過(guò)對(duì)市面上的收銀系統(tǒng)進(jìn)行分析研究,發(fā)現(xiàn)普遍存在以下風(fēng)險(xiǎn):

1.服務(wù)時(shí)延不穩(wěn)定:

跨城調(diào)用、DNS配置不當(dāng),導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定;

2.系統(tǒng)可用性考慮不周:

多個(gè)支付渠道(支付寶、微信等)部署在一起,相互影響;

業(yè)務(wù)邏輯服務(wù)和數(shù)據(jù)服務(wù)部署在一起,相互影響;

無(wú)異地容災(zāi)、自動(dòng)切換能力;

3.數(shù)據(jù)容災(zāi)恢復(fù)不及時(shí):

DB單點(diǎn)、主備切換依賴人工、故障恢復(fù)時(shí)間(TTR)不可控;

為了幫助商戶提升服務(wù)質(zhì)量,盡可能降低以上風(fēng)險(xiǎn),微信支付團(tuán)隊(duì)提出一套高可用收銀系統(tǒng)的設(shè)計(jì)方案,其系統(tǒng)架構(gòu)圖如下所示:

接下來(lái)從三個(gè)層面分別闡述:

1.降低服務(wù)時(shí)延:

收銀系統(tǒng)線下門店遍布全國(guó)、網(wǎng)絡(luò)復(fù)雜(包含電信、聯(lián)通、鐵通、移動(dòng)等),對(duì)系統(tǒng)時(shí)延提出更高挑戰(zhàn)。

針對(duì)這個(gè)問(wèn)題,一些云服務(wù)商支持“BGP網(wǎng)絡(luò)訪問(wèn)跨地域?qū)崟r(shí)切換”的能力,通過(guò)冗余網(wǎng)絡(luò)出口部署,實(shí)現(xiàn)跨區(qū)域網(wǎng)絡(luò)間靈活切換調(diào)度,為網(wǎng)絡(luò)出口災(zāi)備提供了保障。

另外騰訊云聯(lián)合微信支付推出支付加速方案,部署在騰訊云上的服務(wù)可以直接將發(fā)往微信支付的公網(wǎng)請(qǐng)求解析為內(nèi)網(wǎng)訪問(wèn),將延時(shí)率減少30%,提升用戶支付體驗(yàn)。

同時(shí),微信支付官方還提供了api和api2兩個(gè)API域名,供服務(wù)商系統(tǒng)自行探測(cè)服務(wù)質(zhì)量,優(yōu)先選擇速度更快的域名進(jìn)行訪問(wèn)。

注:雙域名探測(cè)擇優(yōu)有如下注意點(diǎn):

并發(fā)探測(cè),誰(shuí)先回來(lái)誰(shuí)先被采用,從而提升效率;

建立探測(cè)重試機(jī)制、控制探測(cè)頻率,減少不必要的探測(cè);

建議的探測(cè)時(shí)機(jī):系統(tǒng)開啟時(shí)發(fā)起探測(cè),或請(qǐng)求超時(shí)發(fā)起探測(cè);

2.云助力,低成本提升可用性:

文章開頭提到,在移動(dòng)支付時(shí)代,用戶對(duì)收銀系統(tǒng)的可用性有更高的要求,這就迫使服務(wù)商做系統(tǒng)設(shè)計(jì)需要考慮更多因素。

由于這些因素實(shí)現(xiàn)成本比較高,純粹自己實(shí)現(xiàn)的話不太現(xiàn)實(shí),所以這里筆者將結(jié)合比較熟悉的騰訊云提供的能力來(lái)進(jìn)行闡述,建議身處云時(shí)代的服務(wù)商多了解這些能力,低成本解決高可用問(wèn)題。

因素一、多地部署、多點(diǎn)接入:

利用騰訊云在全球20多個(gè)數(shù)據(jù)中心的基礎(chǔ)設(shè)施,很容易實(shí)現(xiàn)多地部署和多點(diǎn)接入,在架構(gòu)層的高可用設(shè)計(jì)可以最大限度容忍單個(gè)地域網(wǎng)絡(luò)運(yùn)營(yíng)商故障和網(wǎng)絡(luò)抖動(dòng)帶來(lái)的不穩(wěn)定因素,并為全球各地的業(yè)務(wù)伙伴提供最優(yōu)質(zhì)的接入條件。

當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時(shí),騰訊云全球內(nèi)網(wǎng)互聯(lián)互通,及時(shí)調(diào)度業(yè)務(wù)流量至其他區(qū)域可以保證用戶體驗(yàn)不受影響。

因素二、防DDoS攻擊:

DDoS攻擊將真正的用戶擋在門外,現(xiàn)在云服務(wù)商也會(huì)提供防御此類攻擊的服務(wù)。比如騰訊云大禹BGP高防系統(tǒng)提供800G防護(hù)帶寬和21道BGP線路,可以動(dòng)態(tài)調(diào)度網(wǎng)絡(luò)流量,幫助用戶有效抵御DDoS攻擊。

因素三、負(fù)載均衡、故障蔽:

為了提升系統(tǒng)的穩(wěn)定性和容災(zāi)能力,業(yè)界比較成熟的解決方案是基于“無(wú)狀態(tài)的應(yīng)用層服務(wù)設(shè)計(jì)”,做到能夠“實(shí)時(shí)監(jiān)控服務(wù)器節(jié)點(diǎn)可用狀態(tài)、自動(dòng)轉(zhuǎn)移失敗任務(wù)到其他可用節(jié)點(diǎn)、將集中請(qǐng)求分?jǐn)偟郊焊鱾€(gè)機(jī)器節(jié)點(diǎn)的能力”。

身處云時(shí)代服務(wù)商可以借助騰訊云的負(fù)載均衡(CLB)能力來(lái)低成本解決這個(gè)問(wèn)題。騰訊云的負(fù)載均衡具備健康檢查能力,可允許用戶自定義健康檢查頻率,以確保后端云服務(wù)器在出現(xiàn)故障時(shí)第一時(shí)間感知到并且及時(shí)切走業(yè)務(wù)流量,保證前端應(yīng)用的高可用和無(wú)感知。

CLB單集群4臺(tái)物理服務(wù)器組成,最大并發(fā)連接數(shù)超過(guò)1.2億,可處理峰值40Gbps的流量,每秒處理包量為600萬(wàn)。只有一臺(tái)實(shí)例可用的極端情況下,仍可支撐3000萬(wàn)以上的并發(fā)連接,確保后端正常提供服務(wù),高擴(kuò)展和低成本的優(yōu)勢(shì)最大限度節(jié)省IT成本。

因素四、過(guò)載保護(hù):

移動(dòng)支付目前處于高速增長(zhǎng)期,各種營(yíng)銷活動(dòng)會(huì)帶來(lái)業(yè)務(wù)高峰。

一方面需要及時(shí)擴(kuò)容,預(yù)留冗余服務(wù)能力;另一方面當(dāng)實(shí)際業(yè)務(wù)流量遠(yuǎn)超過(guò)系統(tǒng)的最大正常服務(wù)水平時(shí)進(jìn)行自我保護(hù),快速拒絕掉部分請(qǐng)求,保證正常的服務(wù)水平,而不是被拖垮影響全部服務(wù);

建議采用云服務(wù)商提供的消息隊(duì)列,通過(guò)云上的分布式消息隊(duì)列CMQ提供可靠的異步通信,有效提升系統(tǒng)吞吐量,確保消息的可靠傳遞,減少后端系統(tǒng)壓力,防止系統(tǒng)雪崩。

另外騰訊云服務(wù)器具備彈性伸縮(Auto Scaling)能力,只需配置簡(jiǎn)單的伸縮規(guī)則,集群即可在高負(fù)載時(shí)自動(dòng)擴(kuò)容縮容,確保業(yè)務(wù)平穩(wěn)度過(guò)高峰。按量計(jì)費(fèi)能力可以最大限度節(jié)省IT成本。

3.“跳單”,實(shí)現(xiàn)數(shù)據(jù)層秒級(jí)自動(dòng)容災(zāi)切換能力:

收銀系統(tǒng)的數(shù)據(jù)分成兩類,一類是訂單信息(主要包括訂單表和退款表,特點(diǎn)是數(shù)據(jù)量大且多讀多寫);另一類是基礎(chǔ)信息(主要包含門店、設(shè)備、商戶等信息,特點(diǎn)是數(shù)據(jù)量少且多讀少寫)。這里介紹的數(shù)據(jù)庫(kù)高效容災(zāi)實(shí)踐是基于訂單信息DB,以MySQL為例。

MySQL容災(zāi)策略普遍依賴“半同步,主備切換”,通過(guò)自動(dòng)或者人工切換(業(yè)務(wù)恢復(fù)時(shí)間在1分鐘到幾十分鐘之間)。這對(duì)于交易量稍大的場(chǎng)景來(lái)講,故障恢復(fù)時(shí)間還是太長(zhǎng)。如何在更短的時(shí)間內(nèi)達(dá)到恢復(fù)業(yè)務(wù),我們?cè)O(shè)計(jì)了“跳單”的數(shù)據(jù)層容災(zāi)解決方案。

核心思路:

在數(shù)據(jù)訪問(wèn)層封裝一個(gè)“跳單”組件“自動(dòng)避開有故障的存儲(chǔ)”,讓訂單數(shù)據(jù)數(shù)據(jù)可以隨意落到各個(gè)容器。

下面詳細(xì)介紹“跳單”的整體流程:

為了實(shí)現(xiàn)跳單邏輯,我們先將數(shù)據(jù)庫(kù)水平劃分為若干組,每組DB一主兩備、讀寫分離,主DB用來(lái)寫,從DB用于讀,主從同步由MySQL半同步機(jī)制來(lái)保證。

使用訂單號(hào)保存分組標(biāo)記,如原先單號(hào)為201609121215432322199,可以在最后一位加分組標(biāo)識(shí),如組2,則變成2016091212154323221992

在這樣的前提下:

a)創(chuàng)建訂單請(qǐng)求:

收銀終端的一個(gè)創(chuàng)建訂單請(qǐng)求過(guò)來(lái),先調(diào)用DB選擇器隨機(jī)選擇一組DB,然后查詢計(jì)數(shù)器,看該組DB失敗次數(shù)是否超出閾值,超限則跳過(guò)重選,否則通過(guò)探測(cè)器發(fā)送一條update語(yǔ)句,探測(cè)DB是否可用。如失敗則需重選DB,成功則把分組標(biāo)記寫到單號(hào),把訂單插入改組DB。

b)更新或查詢請(qǐng)求:

直接解析單號(hào)的分組標(biāo)記,然后操作對(duì)應(yīng)DB。“跳單”保證新交易是正常的,優(yōu)先把支付做成。某組DB發(fā)生故障時(shí),訂單查詢和撤銷等操作需等主備切換恢復(fù)才能進(jìn)行。

這里的注意事項(xiàng):

計(jì)數(shù)器需要設(shè)置周期,比如一分鐘,以便設(shè)備故障恢復(fù)自動(dòng)啟用。

調(diào)用MYSQL的時(shí)候需要設(shè)置超時(shí)時(shí)間,比如1秒,避免某一組DB故障,拖死上層服務(wù)。

探測(cè)使用update語(yǔ)句,這是因?yàn)镈B如果死機(jī)恢復(fù)了之后有可能是只讀狀態(tài),如果發(fā)送select來(lái)探測(cè)就無(wú)法保證DB是可寫的。

3、做了“跳單“后的日常演練

為檢測(cè)系統(tǒng)是否真正高可用,需要做定期演練,以下是我們的日常演練計(jì)劃:

每周做一次單組DB故障的常規(guī)演練。

每季度做一次多組DB故障演練。

從下圖演練時(shí)的監(jiān)控可見,當(dāng)某組DB故障時(shí)請(qǐng)求會(huì)掉底發(fā)生跳單,但整體曲線平滑,業(yè)務(wù)運(yùn)行正常,無(wú)影響。

4、做了“跳單”后的擴(kuò)容和縮容

擴(kuò)容步驟:

部署新的訂單DB,給它分配DB編號(hào);

將新庫(kù)信息配置到DB選擇組件;

新庫(kù)接入業(yè)務(wù)流量;

觀察監(jiān)控有無(wú)異常;

縮容步驟:

將撤掉DB的庫(kù)編號(hào)按收縮之后剩余DB數(shù)取模:例如原來(lái)有5組DB,收縮到3組,計(jì)劃撤掉庫(kù)5,則先把5庫(kù)模3得到2。

把數(shù)據(jù)遷移到庫(kù)2,修改配置,關(guān)閉庫(kù)5流量。新的訂單不會(huì)再進(jìn)入庫(kù)5,而歷史查詢則通過(guò)取模訪問(wèn)庫(kù)2即可。

監(jiān)控?zé)o異常之后正式撤掉庫(kù)5。

5、做了“跳單”后的商戶維度查詢

多組DB容災(zāi)方案有一個(gè)通用難題就是“商戶維度列表查詢效率問(wèn)題”。訂單分散在不同的DB,若查詢量小則可直接采用全庫(kù)掃描,通過(guò)上層并發(fā)調(diào)用來(lái)解決效率問(wèn)題。如果變成高頻操作,則需考慮額外搭建一套數(shù)據(jù)庫(kù),以商戶緯度進(jìn)行數(shù)據(jù)存儲(chǔ),這兩套數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步采用可靠消息隊(duì)列來(lái)進(jìn)行同步。具體推薦了解下騰訊云上面的PGXZ和MQ組件。

雖然因?yàn)?ldquo;跳單”而帶來(lái)了列表查詢的效率問(wèn)題,但是對(duì)收銀系統(tǒng)來(lái)說(shuō),核心設(shè)計(jì)理念還是“盡可能把支付做成”!不要因?yàn)榱斜聿樵儐?wèn)題而影響到核心支付的可用性。

6、收銀系統(tǒng)安全性考慮

系統(tǒng)安全性也是衡量一個(gè)收銀系統(tǒng)可用性的關(guān)鍵指標(biāo),通過(guò)調(diào)研發(fā)現(xiàn)線下收銀系統(tǒng)有可能存在以下安全風(fēng)險(xiǎn):

收銀終端軟件被非法安裝;

整臺(tái)pos機(jī)被盜;

中間人攻擊;

正常交易訂單被非法退款;

為了應(yīng)對(duì)上述風(fēng)險(xiǎn),我們提供以下策略供大家參考:

POS機(jī)注冊(cè)激活機(jī)制,即解決收銀終端軟件被非法安裝的問(wèn)題,又可以在POS機(jī)被盜時(shí)直接屏蔽掉;

請(qǐng)求及響應(yīng)參數(shù)簽名機(jī)制,防止客戶端偽造,及請(qǐng)求篡改;

走HTTPS協(xié)議,且限制合法根證書,防止中間人抓包、監(jiān)聽、請(qǐng)求重放;

限制當(dāng)天內(nèi)的訂單可以在當(dāng)時(shí)交易的POS機(jī)上發(fā)起退款,超過(guò)一天的只能通過(guò)微信支付商戶系統(tǒng)進(jìn)行退款,解決惡意退款問(wèn)題。

另外微信支付官方安全團(tuán)隊(duì)也在微信支付的開發(fā)者文檔里面加入了“最佳安全實(shí)踐”,大家可以自行前往查看。

7、推薦使用微信支付網(wǎng)絡(luò)監(jiān)控工具

為了更好的監(jiān)控商戶服務(wù)器與微信支付服務(wù)器之間的網(wǎng)絡(luò)質(zhì)量,微信支付的運(yùn)維團(tuán)隊(duì)提供了一套網(wǎng)絡(luò)監(jiān)控工具,通過(guò)將監(jiān)控?cái)?shù)據(jù)上報(bào)到微信支付的運(yùn)維系統(tǒng),方便運(yùn)維人員幫助商戶優(yōu)化鏈路質(zhì)量。

該工具的詳細(xì)使用說(shuō)明可以看微信支付開發(fā)者文檔中的說(shuō)明。

8、寫在最后

綜上所述,從無(wú)到有搭建一套高可用收銀系統(tǒng)要考慮的問(wèn)題點(diǎn)很多。全部自建成本不低,建議多關(guān)注云服務(wù)商提供的一些基礎(chǔ)能力(BGP高防、BGP網(wǎng)絡(luò)訪問(wèn)跨地域?qū)崟r(shí)切換、分布式消息隊(duì)列CMQ、負(fù)載均衡CLB、彈性伸縮AS、TDSQL、“云支付”等),盡可能站在云時(shí)代的基礎(chǔ)設(shè)施上來(lái)進(jìn)行高效研發(fā)才是更加明智的選擇。

再次強(qiáng)調(diào),我們追求的是“盡可能把支付做成”!

 

打賞
 
?
免責(zé)聲明:
本網(wǎng)站部分內(nèi)容來(lái)源于網(wǎng)站會(huì)員、合作媒體、企業(yè)機(jī)構(gòu)、網(wǎng)友提供和互聯(lián)網(wǎng)的公開資料等,僅供參考。本網(wǎng)站對(duì)站內(nèi)所有資訊的內(nèi)容、觀點(diǎn)保持中立,不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。如果有侵權(quán)等問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們,我們將在收到通知后第一時(shí)間妥善處理該部分內(nèi)容。

圖文推薦

您在本欄的歷史瀏覽
熱門資訊

中國(guó)POS機(jī)行業(yè)權(quán)威門戶網(wǎng)站 引領(lǐng)行業(yè)發(fā)展


微信號(hào):pos580com

網(wǎng)站首頁(yè) | 網(wǎng)站地圖 | 誠(chéng)征英才 | 關(guān)于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權(quán)隱私 | 排名推廣 | 廣告服務(wù) | 積分換禮 | 網(wǎng)站留言 | RSS訂閱

版權(quán)所有:POS機(jī)網(wǎng) 北京瑞紀(jì)華人科技有限公司 京ICP證060984  |  京ICP備07503063號(hào)

聯(lián)系電話:010-51658061 E-mail:bjsale#pos580.com(請(qǐng)把#替換成@)在線QQ:841617225

站所有信息均屬本站版權(quán)所有,如需轉(zhuǎn)載請(qǐng)注明來(lái)源地址 域名:500635.com