支付服務(wù)架構(gòu)演進之路——解決的問題

前天和朋友在一起聊天砾医,聊到在做什么俗壹,聽著他滔滔不絕地,真佩服他的記憶力藻烤,后面他說他都有記筆記的習(xí)慣绷雏,一篇篇的,什么CSDN怖亭、javaeye涎显、博客園,還自建博客兴猩。確實東西做久了期吓,自然慢慢地也就淡忘了,回想一下以前做過的事倾芝,能記起來的還真屈指可數(shù)讨勤。

看看上次寫博文的時間是在2013年8月27日,距今已經(jīng)4年了晨另,這4年我在干什么潭千????

今天就說說支付服務(wù)的那些事吧借尿。以此來緬懷過去的創(chuàng)業(yè)經(jīng)歷刨晴。

系統(tǒng)演進

新的業(yè)務(wù)系統(tǒng)初建時屉来,業(yè)務(wù)邏輯相對簡單,業(yè)務(wù)量也比較小狈癞,為了能夠快速實現(xiàn)功能茄靠,發(fā)布上線,大多數(shù)團隊都會把所有的邏輯都耦合在一個系統(tǒng)蝶桶。這對于初期業(yè)務(wù)的快速迭代是有一定好處的慨绳。毫不例外,前公司的支付交易系統(tǒng)也采用了這樣的方式真竖。

單體架構(gòu)簡便快速脐雪,然而這種架構(gòu)的缺點也很明顯,姑且不說高并發(fā)訪問疼邀,邏輯分散喂江,隨著需求的迭代召锈,后期難以維護旁振。初接項目,問題很多涨岁,每天就是排查問題拐袜,和第三方確認(rèn)交易等。好在深陷泥濘不久梢薪,就開始著手新支付服務(wù)設(shè)計實現(xiàn)蹬铺。那么,支付要解決的問題有哪些呢秉撇?

解決的問題

做支付服務(wù)也有兩年多了甜攀,總結(jié)下支付服務(wù)要解決的有哪些問題。

- 最原始和核心的需求琐馆,資金流動规阀。

- 高可用。全天候提供服務(wù)瘦麸。需要解決如下問題:

? ? ? ? - 多機谁撼。熱發(fā)布。

? ? ? ? - 通信異匙趟牵或超時厉碟。異常的交易如何保證交易最終一致性。

? ? ? ? - 防雪崩屠缭。渠道偶也會有抽風(fēng)時箍鼓,他們抽風(fēng)了,我們可不能跟著抽風(fēng)呵曹“乐龋快速熔斷,防止大量資源(連接)被暫用。

? ? ? ? - 通知下游服務(wù)失敗或異常時之剧,重試通知郭卫。

- 易用性。滿足各種業(yè)務(wù)需求背稼,各業(yè)務(wù)系統(tǒng)調(diào)用只需提供少量必要信息即可贰军,接口簡單、調(diào)用方便蟹肘。

- 簡單風(fēng)控词疼。對交易做校驗,識別并阻止誤交易或惡意交易帘腹。

- 防止重復(fù)交易贰盗。不用的業(yè)務(wù)場景,對重復(fù)扣款要求不一阳欲。對于同一用戶下同一業(yè)務(wù)的扣款舵盈,交易發(fā)起方可能會有多個,如:用戶自動發(fā)起球化、工作人員介入發(fā)起秽晚、系統(tǒng)定時扣款發(fā)起,即會下多個支付訂單筒愚,然由于業(yè)務(wù)要求多個支付訂單只能有一筆支付成功赴蝇。如何保證不會多扣用戶的錢,即需要防止對同一業(yè)務(wù)下的支付訂單重復(fù)扣款巢掺。而有些業(yè)務(wù)(如充值)又沒有此限制句伶。

- 支付路由。為保證服務(wù)的穩(wěn)定可靠陆淀,一般會接入多個支付渠道互備考余。多個支付渠道,如何個性化選擇倔约?一般考慮路由的的因素有如下:

? ? ? ? ?- 不同業(yè)務(wù)對支付渠道有特殊要求秃殉。

? ? ? ? ?- 同一業(yè)務(wù)不同時期對支付渠道有特殊要求。

? ? ? ? ?- 支付渠道有個人問題(卡掛失浸剩、卡過期钾军、交易金額超個人設(shè)置限額、未知異常等)和渠道問題(渠道下某個銀行未開通或交易金額超渠道設(shè)置限額绢要、渠道跪了吏恭、渠道對個人余額不足做次數(shù)限制等)導(dǎo)致不可用。

? ? ? ? ?- 不同渠道費率可能不盡相同,省錢省錢省錢。

? ? ? ? ?- 一般會將費率高的渠道作為備用冻押,然而作為合作備胎也是有尊嚴(yán)的棒假,你也是要時不時撩一下,給下希望考抄,所以每天也得保證一定的交易量捺弦。

- 需求迭代躬存。由于業(yè)務(wù)的特殊性茄唐,需求一直在迭代息裸,經(jīng)常需要接入新渠道。如何滿足快速的需求迭代沪编?如何讓新人快速高效投產(chǎn)呼盆?系統(tǒng)架構(gòu)要合理,高內(nèi)聚低耦合蚁廓。自動化測試釋放重復(fù)性的一些測試工作访圃。

- 監(jiān)控與預(yù)警。要保證系統(tǒng)的高可靠和高可用相嵌,監(jiān)控必不可少腿时。業(yè)務(wù)上,監(jiān)控異常的交易平绩。監(jiān)控銀行和渠道的可用性圈匆。手續(xù)費預(yù)警漠另,避免坐扣發(fā)生捏雌。系統(tǒng)運行情況監(jiān)控等。

- 資源分配笆搓。按交易來源的不同性湿,交易可以分為兩類:一類是用戶發(fā)起,一類是系統(tǒng)定時批量交易满败。用戶發(fā)起的交易一定得先得到保證肤频,然后又要兼顧系統(tǒng)定時批量交易。

- 異常交易快速發(fā)現(xiàn)及處理算墨。系統(tǒng)難免有異常交易的情況發(fā)生宵荒。如交易超時、回盤超時净嘀、渠道或銀行系統(tǒng)抽風(fēng)报咳、掉單等。如何快速發(fā)現(xiàn)異常交易并快速修復(fù)異常挖藏。

- 動態(tài)配置暑刃。渠道或銀行系統(tǒng)難免會有維護的時候,尤其銀行節(jié)假日經(jīng)常會有升級維護膜眠。維護期間或者他們的服務(wù)是不可用的岩臣,或者限制交易限額等等溜嗜。智能路由也有如權(quán)重優(yōu)先級等一些配置,等等此類的配置都是需要動態(tài)維護的架谎。

- 全局異常處理炸宵。各業(yè)務(wù)調(diào)用方式不一,有RESTFUL接口DUBBO接口等谷扣。如何保證異常處理的一致性焙压。

- 支付結(jié)果個性化通知。由于支持了不同的業(yè)務(wù)抑钟,而不同業(yè)務(wù)的后續(xù)處理方式是不同的涯曲,需要個性化通知下游系統(tǒng)。

- Fail fast在塔。分布式系統(tǒng)幻件,要對每個模塊系統(tǒng)的可用性持懷疑態(tài)度,當(dāng)出現(xiàn)某個系統(tǒng)不可用時(如發(fā)包)蛔溃,要能快速優(yōu)雅地結(jié)束整個流程绰沥。這點設(shè)計出問題時可能會幫你避免影響的進一步擴大。舉個例子贺待,服務(wù)出現(xiàn)過僅有的兩次事故徽曲,一次是路由服務(wù)機子磁盤滿了,一次是網(wǎng)絡(luò)問題麸塞,導(dǎo)致異常交易發(fā)生秃臣,“Fail fast”避免了雪崩效應(yīng),同時保證了交易的一致性哪工,避免人工修數(shù)據(jù)情況的發(fā)生奥此,為服務(wù)的快速恢復(fù)提供了可能(從問題發(fā)現(xiàn)到服務(wù)恢復(fù),均在十分鐘左右)雁比。

- 埋點稚虎。涉及錢的,應(yīng)該是一件很嚴(yán)肅的事偎捎。任何系統(tǒng)都會存在BUG蠢终,所以交易需要進行必要的埋點用于追蹤問題交易。

- 限制資源的使用茴她。對于資源使用的限制設(shè)計是高可用系統(tǒng)最重要的一點寻拂,也是容易被忽略的一點,資源相對有限败京,用的過多了兜喻,自然會導(dǎo)致應(yīng)用宕機。一般有如下限制:

? ? ? ? - 限制連接數(shù)

? ? ? ? - 限制線程創(chuàng)建

? ? ? ? - 限制并發(fā)

? ? ? ? - 限制內(nèi)存的使用

- 狀態(tài)碼的學(xué)習(xí)赡麦。第三方支付渠道返回的狀態(tài)碼偶爾會變更(推測是第三方會切換渠道或者接入新的渠道)朴皆,而新增的新狀態(tài)碼第三方往往通知不及時甚至不通知帕识,新狀態(tài)碼在未能判定成功或失敗的情況下,是個未知狀態(tài)(寧可未知也不能誤判遂铡。這一點很重要肮疗,很多第三方在處理和銀行或其他第三方時,出現(xiàn)通訊超時或者未知狀態(tài)碼后就返回失敗扒接,這導(dǎo)致了很多掉單情況的發(fā)生伪货,踩了很多這樣的坑...),如何快速發(fā)現(xiàn)并學(xué)習(xí)新狀態(tài)碼的含義钾怔?

總之碱呼,需求很明確,就是適應(yīng)互聯(lián)網(wǎng)應(yīng)用的場景宗侦,也沒啥特別之處愚臀。后面有時間再理一下系統(tǒng)的演進實現(xiàn)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矾利,一起剝皮案震驚了整個濱河市姑裂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男旗,老刑警劉巖舶斧,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異察皇,居然都是意外死亡茴厉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門让网,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呀忧,“玉大人师痕,你說我怎么就攤上這事溃睹。” “怎么了胰坟?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵因篇,是天一觀的道長。 經(jīng)常有香客問我笔横,道長竞滓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任吹缔,我火速辦了婚禮商佑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厢塘。我一直安慰自己茶没,他們只是感情好肌幽,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抓半,像睡著了一般喂急。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笛求,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天廊移,我揣著相機與錄音,去河邊找鬼探入。 笑死狡孔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜂嗽。 我是一名探鬼主播步氏,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徒爹!你這毒婦竟也來了荚醒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤隆嗅,失蹤者是張志新(化名)和其女友劉穎界阁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胖喳,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泡躯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽焊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片较剃。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖技健,靈堂內(nèi)的尸體忽然破棺而出写穴,到底是詐尸還是另有隱情,我是刑警寧澤雌贱,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布啊送,位于F島的核電站,受9級特大地震影響欣孤,放射性物質(zhì)發(fā)生泄漏馋没。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一降传、第九天 我趴在偏房一處隱蔽的房頂上張望篷朵。 院中可真熱鬧,春花似錦婆排、人聲如沸声旺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艾少。三九已至卡乾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缚够,已是汗流浹背幔妨。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谍椅,地道東北人误堡。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像雏吭,于是被迫代替她去往敵國和親锁施。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容