銀行流水號引發(fā)的 PHP 編程思考與實踐

流水號在銀行業(yè)最為常見继榆。相信很多人接觸到流水號都是從銀行相關的憑條或銀行系統(tǒng)查詢獲知令哟。

自從進入金融相關的公司或業(yè)務開發(fā)之后渐排,對流水號的應用開發(fā)就有了更深刻的認知。

那么孔祸,今天我們通過流水號來應用到實際開發(fā)中隆敢。解決我們開發(fā)中的問題。

一崔慧、流水號的特點:唯一性

流水號筑公,對于整個系統(tǒng)而言是全局唯一。這算是流水號最基礎最重要的特點尊浪。這個特點匣屡,能解決最根本實際開發(fā)中最實際的問題。

二拇涤、實際案例:卡券發(fā)放

A 系統(tǒng)屬于核心系統(tǒng)捣作。提供了各種各樣的核心功能,以及暴露一些 API 接口鹅士。這些接口可以給圍繞 A 系統(tǒng)做運營功能的系統(tǒng)使用券躁。

假如,現在有一個 B 系統(tǒng)有一個需求:
制作一個導流的活動頁面掉盅,在該頁面輸入手機號并接收驗證碼之后實現快捷注冊也拜,然后給這個手機號對應的賬戶贈送一張減免 10 元的卡券。

為什么不直接在導流的注冊流程里面直接贈送呢趾痘?

因為慢哈,有以下幾個原因:

  • (1)導流頁面是調用 A 系統(tǒng)的注冊接口。A 系統(tǒng)屬于核心業(yè)務系統(tǒng)永票,不會經常為了這些活動而定制改動系統(tǒng)代碼卵贱,影響系統(tǒng)穩(wěn)定性。
  • (2)B 系統(tǒng)只有 A 系統(tǒng)的可讀權限或可讀權限都沒有侣集。所以键俱,無法直接干涉核心業(yè)務數據庫的功能。
  • (3)B 系統(tǒng)引流注冊世分,如果用戶此時只是注冊编振,并不會去下載 App 登錄的話。那么臭埋,這時贈送卡券將變得毫無意義踪央。只會產生更多的垃圾數據。

那么斋泄,該如何做杯瞻?

  • (1)A 系統(tǒng)提供快捷注冊接口、短信發(fā)送接口炫掐、卡券發(fā)送接口魁莉。
  • (2)B 系統(tǒng)制作一個注冊導流 H5 頁面。用戶填寫手機號,獲取驗證碼旗唁,輸入驗證碼點擊畦浓,點擊提交調用 A 系統(tǒng)快捷注冊接口實現注冊用戶。
  • (3)B 系統(tǒng)調用 A 系統(tǒng)的注冊接口成功之后检疫,在自己的系統(tǒng)存儲手機號讶请、用戶ID、注冊時間屎媳、導流 H5 的頁面唯一標識(自己定一個)夺溢。
  • (4)A 系統(tǒng)在系統(tǒng)當中實現一系列事件(登錄、注冊烛谊、下單风响、充值、提現)丹禀。并且寫入隊列状勤。然后,把這些事件實時推送給 B 系統(tǒng)双泪。
  • (5)B 系統(tǒng)收到這些事件之后持搜,根據自己是否有建立在這些事件上的后續(xù)功能。比如焙矛,我們這個導流功能葫盼,就需要導流注冊成功之后,用戶首次登錄的時候贈送 10 元卡券薄扁。

上面的 (1)剪返、(2)、(3)邓梅、(4)都很好實現。其中邑滨,第(4)步主要是為了實現系統(tǒng)解耦日缨。并且這也是目前比較常用的方案。我們今天要講的是怎樣通過流水號來解決第(5)步的問題掖看。

那么第(5)步會有什么問題匣距?

比如,現在 B 系統(tǒng)收到了導流的用戶成功首次登錄的事件推送了哎壳。結果毅待,去調用 A 系統(tǒng)提供的發(fā)送卡券功能贈送 10 元卡券。結果归榕,調用卡券發(fā)送失敗了尸红。于是,準備在程序里面實現一個功能:失敗之后重發(fā)。最后成功了外里。但是怎爵,真的成功了嗎?

我們來分析一下盅蝗”盍矗卡券發(fā)送失敗的可能原因:

  • 請求被 A 系統(tǒng)正確接收。但是墩莫,由于網絡原因 B 系統(tǒng)中斷了芙委。
  • 請求沒有被 A 系統(tǒng)接收。
  • 請求被 A 系統(tǒng)正確接收狂秦,也正確發(fā)送了卡券灌侣。但是, A 系統(tǒng)故障了故痊。
  • 請求被 A 系統(tǒng)正確接收顶瞳,也正確發(fā)送了卡券。B 系統(tǒng)自己故障了愕秫。

當然慨菱,情況不止上面這幾種,還有其他原因戴甩。不管何種原因符喝,當我們要重發(fā)的時候,問題就來了:會導致卡券發(fā)送多次甜孤。

這時候我們可以利用流水號的特性协饲。每次導流注冊成功之后,給每條入庫的記錄一個唯一的流水號缴川。流水號一定要保證它的唯一性茉稠。該流水號在 A 系統(tǒng)當中的發(fā)送卡券接口也要實現防重發(fā)的功能。

怎樣在 A 系統(tǒng)當中的發(fā)送卡券接口防重復呢把夸?

很簡單而线。我們正確接收到 B 系統(tǒng)的請求之后,以此流水號寫入緩存恋日。然后膀篮,接著處理卡券發(fā)送的業(yè)務。當第二次同樣的請求發(fā)送過來的時候岂膳,檢查這個流水號是否在我們的緩存當中誓竿,如果存在立即查詢發(fā)送的狀態(tài)。并返回發(fā)送的結果谈截。

這樣 A 系統(tǒng)不管因為何種原因導致發(fā)送失敗筷屡,重發(fā)的時候都不會導致福利卡券發(fā)送失敗涧偷。

當然,A 系統(tǒng)也有可能會發(fā)送失敗速蕊。這時我們可以找到發(fā)送失敗的原因修復代碼嫂丙。然后, B 系統(tǒng)重新處理就好了规哲。

以上只是一個理論分析跟啤。沒有給出具體的 PHP代碼示例。在我司的金融產品當中唉锌,我們就用該思想理論隅肥,實現了諸如此類的重發(fā)問題。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末袄简,一起剝皮案震驚了整個濱河市腥放,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绿语,老刑警劉巖秃症,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異吕粹,居然都是意外死亡种柑,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門匹耕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聚请,“玉大人,你說我怎么就攤上這事稳其∈簧停” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵既鞠,是天一觀的道長煤傍。 經常有香客問我,道長嘱蛋,這世上最難降的妖魔是什么患久? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮浑槽,結果婚禮上,老公的妹妹穿的比我還像新娘返帕。我一直安慰自己桐玻,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布荆萤。 她就那樣靜靜地躺著镊靴,像睡著了一般铣卡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偏竟,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天煮落,我揣著相機與錄音,去河邊找鬼踊谋。 笑死蝉仇,一個胖子當著我的面吹牛,可吹牛的內容都是我干的殖蚕。 我是一名探鬼主播轿衔,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睦疫!你這毒婦竟也來了害驹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛤育,失蹤者是張志新(化名)和其女友劉穎宛官,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體瓦糕,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡底洗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了刻坊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枷恕。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谭胚,靈堂內的尸體忽然破棺而出徐块,到底是詐尸還是另有隱情,我是刑警寧澤灾而,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布胡控,位于F島的核電站,受9級特大地震影響旁趟,放射性物質發(fā)生泄漏昼激。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一锡搜、第九天 我趴在偏房一處隱蔽的房頂上張望橙困。 院中可真熱鬧,春花似錦耕餐、人聲如沸凡傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夏跷。三九已至哼转,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間槽华,已是汗流浹背壹蔓。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猫态,地道東北人佣蓉。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像懂鸵,于是被迫代替她去往敵國和親偏螺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容