好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 大眾點評網站的支付系統構建經驗分享

大眾點評網站的支付系統構建經驗分享

熱門標簽:騰訊地圖標注店面 柳州市電話電銷機器人團隊 宜春手機外呼系統 新科游樂園地圖標注 農村電銷機器人 福州防封電銷卡辦理低資費 廣州銷售外呼系統定制 天刀地圖標注錯誤 地圖標注位置怎么快速上線

一、能用階段
早期業務流量還不是很大,渠道網關系統業務邏輯也很簡單,一句話總結就是:讓用戶在交易的時候,能順利把錢給付了。做的事情可簡單概括成3件:發起支付請求、接收支付成功通知以及用戶要求退款時原路退回給用戶的支付賬戶。這個階段系統實踐比較簡單,主要就是“短、平、快”,快速接入新的第三方支付渠道并保證能用。系統架構如圖1。

二、可用階段
在系統演進初期的快速迭代過程中,接入的第三方支付渠道不多,系統運行還算比較平穩,一些簡單問題也可通過開發人員人工快速解決。但隨著接入的第三方支付渠道不斷增多,逐漸暴露出一些新的問題:

(1) 所有的業務邏輯都在同一個物理部署單元,不同業務之間互相影響(例如退款業務出現問題,但是與此同時把支付業務也拖垮了);

(2) 隨著業務流量的增大,數據庫的壓力逐漸增大,數據庫的偶爾波動造成系統不穩定,對用戶的支付體驗影響很大;

(3) 支付、退款等狀態的同步很大程度上依賴第三方支付渠道的異步通知,一旦第三方支付渠道出現問題,造成大量客訴,用戶體驗很差,開發、運營都很被動。

針對(1)中的業務之間互相影響問題,我們首先考慮進行服務拆分,將之前一個大的物理部署單元拆成多個物理部署單元。有兩種明顯的可供選擇的拆分策略:

按照渠道拆分,不同的第三方支付渠道獨立一個物理部署單元,例如微信一個部署單元,支付寶一個部署單元等;
按照業務類型拆分,不同的業務獨立一個物理部署單元,例如支付業務一個部署單元,退款業務一個部署單元等。
考慮到在當時的流量規模下,支付業務優先級最高,退款等業務的優先級要低;而有些渠道的流量占比很小,作為一個獨立的部署單元,會造成一定的資源浪費,且增加了系統維護的復雜度?;诖?,我們做了一個符合當時系統規模的trade-off:選擇了第2種拆分策略 — 按照業務類型拆分。

針對(2)中的DB壓力問題,我們和DBA一起分析原因,最終選擇了Master-Slave方案。通過增加Slave來緩解查詢壓力;通過強制走Master來保證業務場景的強一致性;通過公司的DB中間件Zebra來做負載均衡和災備切換,保證DB的高可用性。

針對(3)中的狀態同步問題,我們對不同渠道進行梳理,在已有的第三方支付渠道異步通知的基礎上,通過主動查詢定時批量同步狀態,解決了絕大部分狀態同步問題。對于仍未同步的少量Case,系統開放出供內部使用的API,方便后臺接入和開發人員手動補單。

在完成上述的實踐之后,渠道網關系統已達到基本可用階段,通過內部監控平臺可以看到,核心服務接口可用性都能達到99.9%以上。演化之后的系統架構如圖2。

三、柔性可用階段
在解決了業務隔離、DB壓力、狀態同步等問題后,渠道網關系統度過一段穩定可用的時期。但架不住業務飛速增長的壓力,之前業務流量規模下的一些小的系統波動、流量沖擊等異常,在遭遇流量洪峰時被急劇放大,最終可能成為壓垮系統的最后一根稻草。在新的業務流量規模下,我們面臨著新的挑戰:

(1) 隨著團隊的壯大,新加入的同學在接入新的渠道或者增加新的邏輯時,往往都會優先選用自己熟悉的方式完成任務。但熟悉的不一定是合理的,有可能會引入新的風險。特別是在與第三方渠道對接時,系統目前在使用的HTTP交互框架就有 JDK HttpURLConnection/HttpsURLConnection、Httpclient3.x、Httpclient4.x(4.x版本內部還分別有使用不同的小版本)。僅在這個上面就踩過好幾次慘痛的坑。

(2) 在按業務類型進行服務拆分后,不同業務不再互相影響。但同一業務內部,之前流量規模小的時候,偶爾波動一次影響不大,現在流量增大后,不同渠道之間就開始互相影響。例如支付業務,對外統一提供分布式的支付API,所有渠道共享同一個服務RPC連接池,一旦某一個渠道的支付接口性能惡化,導致大量占用服務RPC連接,其他正常渠道的請求都無法進來;而故障渠道性能惡化直接導致用戶無法通過該渠道支付成功,連鎖反應導致用戶多次重試,從而進一步導致惡化加劇,最終引起系統雪崩,拒絕服務,且重啟后的服務還有可能被大量的故障渠道重試請求給再次擊垮。

(3) 目前接入的第三方支付渠道,無論是第三方支付公司、銀行或是其他外部支付機構,基本都是通過重定向或SDK的方式引導用戶完成最終支付動作。在這條支付鏈路中,渠道網關系統只是在后端與第三方支付渠道進行交互(生成支付重定向URL或預支付憑證),且只能通過第三方支付渠道的異步通知或自己主動進行支付查詢才能得知最終用戶支付結果。一旦某個第三方支付渠道內部發生故障,渠道網關系統完全無法得知該支付鏈路已損壞,這對用戶支付體驗造成損害。

(4) 現有的渠道網關的DB,某些非渠道網關服務仍可直接訪問,這對渠道網關系統的DB穩定性、DB容量規劃等帶來風險,進而影響渠道網關系統的可用性,內部戲稱被戴了“綠帽子”。

(5) 對于退款鏈路,系統目前未針對退款異常case進行統一收集、整理并分類,且缺乏一個清晰的退款鏈路監控。這導致用戶申請退款后,少量用戶的退款請求最終未處理成功,用戶發起客訴。同時由于缺乏監控,導致這種異常退款缺乏一個后續推進措施,極端情形下,引起用戶二次客訴,極大損害用戶體驗和公司信譽度。

為最大程度解決問題(1)中描述的風險,在吸取踩坑的慘痛教訓后,我們針對第三方渠道對接,收集并整理不同的應用場景,抽象出一套接入框架。接入框架定義了請求組裝、請求執行、響應解析和錯誤重試這一整套網關交互流程,屏蔽了底層的HTTP或Socket交互細節,并提供相應的擴展點。針對銀行渠道接入存在前置機這種特殊的應用場景,還基于Netty抽象出連接池(Conn Pool)和簡單的負載均衡機制(LB, 提供Round Robin路由策略)。不同渠道在接入時可插入自定義的組裝策略(擴展已有的HttpReq、HttpsReq或NettyReq),執行策略[擴展已有(Http、Https或Netty)Sender/Receiver],解析策略(擴展已有的HttpResp、HttpsResp或NettyResp),并復用框架已提供的內容解析(binary/xml/json parser)、證書加載(keystore/truststore loader)和加解密簽名(encrypt/decrypt/sign/verify sign)組件,從而在達到提高渠道接入效率的同時,盡可能減少新渠道接入帶來的風險。接入框架的流程結構如圖3。

為解決問題(2)中渠道之間相互影響,一個簡單直觀的思路就是渠道隔離。如何隔離,隔離到什么程度?這是2個主要的問題點:

如何隔離 考慮過將支付服務進一步按照渠道拆分,將系統繼續做小,但是拆分后,支付API的調用端需要區分不同渠道調用不同的支付API接口,這相當于將渠道隔離問題拋給了調用端;同時拆分后服務增多,調用端需要維護同一渠道支付業務的多個不同RPC-API,復雜度提高,增加了開發人員的維護負擔,這在當前的業務流量規模下不太可取。所以我們選擇了在同一個支付服務API內部進行渠道隔離。由于共用同一個支付服務服務API連接池,渠道隔離的首要目標就是避免故障渠道大量占用AP連接池,對其他正常渠道造成株連影響。如果能夠自動檢測出故障渠道,并在其發生故障的初期階段就快速失敗該故障渠道的請求,則從業務邏輯上就自動完成了故障渠道的隔離。
隔離到什么程度 一個支付渠道下存在不同的支付方式(信用卡支付、借記卡支付、余額支付等),而有些支付方式(例如信用卡支付)還存在多個銀行。所以我們直接將渠道隔離的最小粒度定義到支付渠道 -> 支付方式 -> 銀行。
基于上述的思考,我們設計并實現了一個針對故障渠道的快速失?。╢ail-fast)機制:

將每一筆支付請求所附帶的支付信息抽象為一個特定的fail-fast路徑,請求抽象成一個fail-fast事務,請求成功即認為事務成功,反之,事務失敗。
在fail-fast事務執行過程中,級聯有2個fail-fast斷路開關:
靜態開關,根據人工配置(on/off),斷定某個支付請求是否需快速失敗。
動態開關,根據歷史統計信息,確定當前健康狀態,進而斷定是否快速失敗當前支付請求。
動態斷路開關抽象了3種健康狀態(closed-放行所有請求;half_open-部分比例的請求放行;open-快速失敗所有請求),并依據歷史統計信息(總請求量/請求失敗量/請求異常量/請求超時量),在其內部維護了一個健康狀態變遷的狀態機。狀態變遷如圖4。

狀態機的每一次狀態變遷都會產生一個健康狀態事件,收銀臺服務可以監聽這個健康狀態事件,實現支付渠道的聯動上下線切換。
每一筆支付請求結束后都會動態更新歷史統計信息。
經過線上流量模擬壓測觀察,fail-fast機制給系統支付請求增加了1~5ms的額外耗時,相比第三方渠道的支付接口耗時,占比1%~2%,屬于可控范圍。渠道故障fail-fast機制上線之后,結合壓測配置,經過幾次微調,穩定了線上環境的fail-fast配置參數。

在前不久的某渠道支付故障時,通過公司內部的監控平臺,明顯觀察到fail-fast機制起到很好的故障隔離效果,如下圖5。

為解決問題(3)中支付鏈路可用性監測,依賴公司內部的監控平臺上報,實時監控支付成功通知趨勢曲線;同時渠道網關系統內部從業務層面自行實現了支付鏈路端到端的監控。秒級監控支付鏈路端到端支付成功總量及支付成功率,并基于這2個指標的歷史統計信息,提供實時的支付鏈路郵件或短信報警。而在流量高峰時,該監控還可通過人工手動降級(異步化或關閉)。這在很大程度上提高了開發人員的核心支付鏈路故障響應速度。

為解決問題(4)中的“綠帽子”,渠道網關系統配合DBA回收所有外部系統的DB直接訪問權限,提供替換的API以供外部系統訪問,這給后續的提升DB穩定性、DB容量規劃以及后續可能的異步多機房部署打下基礎。

針對問題(5)中退款case,渠道網關系統配合退款鏈路上的其他交易、支付系統,從源頭上對第三方渠道退款異常case進行統一收集、整理并分類,并形成退款鏈路核心指標(退款當日成功率/次日成功率/7日成功率)監控,該部分的系統實踐會隨著后續的“退款鏈路統一優化”一起進行分享;

隨著上述實踐的逐步完成,渠道網關系統的可用性得到顯著提高,核心鏈路的API接口可用性達到99.99%,在公司的917大促中,渠道網關系統平穩度過流量高峰,并迎來了新的記錄:提交第三方渠道支付請求的TPS達到歷史新高。且在部分渠道接口發生故障時,能保證核心支付API接口的穩定性,并做到故障渠道的自動檢測、恢復,實現收銀臺對應渠道的聯動上下線切換。同時,通過核心支付鏈路支付成功率監控,實現第三方渠道內部故障時,渠道上下線的手動切換。至此,基本保證了在部分第三方渠道有損的情況下,渠道網關系統的柔性可用。演化后的此階段系統架構如圖6。

四、經驗與總結
在整個渠道網關系統一步步的完善過程中,踩過很多坑,吃過很多教訓,幾點小的收獲:
1.堅持核心思想,拆分、解耦,大系統做小,做簡單;
2.系統總會有出問題的時候,重要的是如何快速定位、恢復、解決問題,這是一個長期而又艱巨的任務;
3.高可用性的最大敵人不僅是技術,還是使用技術實現系統的人,如何在業務、系統快速迭代的過程中,保證自我驅動,不掉隊;
4.高流量,大并發對每一個工程師既是挑戰,更是機遇。

標簽:呼和浩特 陽江 南昌 和田 雅安 揭陽 宣城 貴州

巨人網絡通訊聲明:本文標題《大眾點評網站的支付系統構建經驗分享》,本文關鍵詞  大眾,點評,網,站的,支付,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《大眾點評網站的支付系統構建經驗分享》相關的同類信息!
  • 本頁收集關于大眾點評網站的支付系統構建經驗分享的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 久久精品国产网红主播图片| 看全黄大色黄大片老人做| 强壮公借种日日躁娇妻H视频| l看真人视频一级毛片| 天天看天天摸天天操| 国产在线拍揄自揄拍无码网站新闻 | 厨房挺进美妇市长雪臀| 印度aaa特级毛片| 国产精品无码人妻一区二区在线| 变态折磨类的小黄文| 欧洲色综合| 隔着内裤把她摸出水| 年底突破母爱| 色吊丝永久在线观看最新免费| 杏吧电台| 操姨姐| 又爽又黄的视频| 别揉我胸?啊?嗯~出水了| 男同互相囗交| 国产边打电话边被躁BD在线看| 中国妇女china| 男女被?到爽??流白浆软件| 一本色道久久综合狠狠躁篇怎么玩| 欧洲猛男gay69www| 亚洲天堂网址| 精品人妻无码一区二区奶茶视频| 国产AV一区二区三区天堂综合网| 大陆黄色片| 亚洲一在线| 风间性色精品一区二区| 九九热九九热| 护士被老头边摸边吃奶的| 打大A免费| 男女吻上摸下面的视频| 俄罗斯18–19sex性HSD| 日本xxxx色视频在线播放| 啦啦啦www高清在线观看影院| 久狠综久久婷天综合天天| 久久99亚洲综合精品首页| 新鄉市聯眾塑化有限公司的訂製流程 | 00:00 英文超清怎么设置|