互联网账户系统如何设计(上篇)
在很多互聯(lián)網(wǎng)公司業(yè)務(wù)發(fā)展的早期,業(yè)務(wù)模式比較單一的情況下,涉及用戶賬戶資金交易相關(guān)的邏輯也比較簡單,但是隨著公司業(yè)務(wù)模式的不斷創(chuàng)新及類型的多元化發(fā)展,會漸漸發(fā)現(xiàn)現(xiàn)有系統(tǒng)賬戶邏輯越來越雍腫,不僅難以支持新業(yè)務(wù)的擴(kuò)張,對現(xiàn)有業(yè)務(wù)的支持也適配困難,最終導(dǎo)致新業(yè)務(wù)系統(tǒng)不得不重新搭建自己的業(yè)務(wù)賬戶邏輯,造成重復(fù)建設(shè)不說,也往往給后續(xù)的財務(wù)資金核算造成混亂。
以某互聯(lián)網(wǎng)A租車公司的業(yè)務(wù)發(fā)展路徑為例?
階段A
A公司在早期開展租車業(yè)務(wù)時根據(jù)用戶使用場景規(guī)定用戶必須在繳納押金以后才可以租車,并且支持用戶進(jìn)行余額充值,余額可以支付租車費用以及購買相關(guān)優(yōu)惠產(chǎn)品。所以賬戶資金流是這樣子的:
?
通過上述設(shè)計基本上就滿足了簡單的業(yè)務(wù)需求,用戶繳納押金單獨存放在一個押金賬戶,用戶的每次押金沖退都記錄賬戶流水(繳押金記+,退押金記-);用戶余額充值單獨存放在一個余額賬戶,用戶的每次余額充值、消費、退款都記錄賬戶流水(余額充值記+、余額消費記-、余額退款記-)。
事實上,以上賬戶邏輯的設(shè)計基本已經(jīng)能滿足業(yè)務(wù)早期的發(fā)展的需要了,并且如果賬戶流水記錄完整(例如記錄必要的業(yè)務(wù)類型,如余額購買了一張租車次卡)那么后續(xù)也能基本滿足早期業(yè)務(wù)的財務(wù)核算需求。遺憾的是,很多公司在類似以上簡單賬戶邏輯的設(shè)計上都比較混亂,如有的公司將賬戶直接綁定在用戶信息表上、有些直接更新賬戶余額,沒有完整記錄賬戶流水或賬戶流水記錄業(yè)務(wù)信息缺乏等,這種情況即使業(yè)務(wù)沒有多元化發(fā)展,也很難滿足后續(xù)業(yè)務(wù)邏輯的擴(kuò)展,特別是會造成嚴(yán)重的財務(wù)數(shù)據(jù)核算困難,更不用談業(yè)務(wù)多元化發(fā)展后如何能夠快速支撐了,造成這種問題的原因是多方面的,這里也就不在贅述。
下面我們繼續(xù)看A公司租車業(yè)務(wù)的發(fā)展演進(jìn)情況!
假設(shè)在A公司租車業(yè)務(wù)發(fā)展過程中為了鼓勵用戶進(jìn)行余額充值,采用了充值+返現(xiàn)的形式進(jìn)行活動,如:“充值100贈送20”,此時用戶余額賬戶的總金額應(yīng)該是120,那么賬戶邏輯如何支持呢?
?
這里注意,之所以需要區(qū)分余額中真實充值和贈送的原因在于,如果產(chǎn)品邏輯允許余額退款,那么清晰地區(qū)分了真實充值和贈送所對應(yīng)的余額的話,退款邏輯的實現(xiàn)將會比較簡單,否則就會變得比較痛苦,并且不清晰的邏輯也會增加造成公司資金損失的風(fēng)險;另外如果余額返現(xiàn)賬戶變動流水記錄得比較明確的話,對財務(wù)后續(xù)的收入核算也會方便很多。
但是,是否這樣就能滿足業(yè)務(wù)需求了呢?
顯然,這樣還不能讓邏輯完全運行起來,因為增加了賬戶相應(yīng)地交易邏輯與資金邏輯都需要進(jìn)行相應(yīng)的改變才行,以上業(yè)務(wù)場景中原來余額充值只需要調(diào)用余額賬戶記賬一次,現(xiàn)在需要根據(jù)充返邏輯再調(diào)用余額返現(xiàn)賬戶記賬一次;而余額消費則需要根據(jù)業(yè)務(wù)規(guī)則進(jìn)行余額消費記賬,假設(shè)業(yè)務(wù)規(guī)則為“余額消費優(yōu)先扣減余額返現(xiàn)賬戶,再次扣減余額賬戶”,那么系統(tǒng)交易及記賬邏輯如下圖所示:
?
從邏輯上看業(yè)務(wù)交易系統(tǒng)需要根據(jù)業(yè)務(wù)規(guī)則多次調(diào)用余額賬戶及余額返現(xiàn)賬戶進(jìn)行記賬,并且需要從流程上保證兩個賬戶記賬調(diào)用的事務(wù)一致性,例如一筆消費訂單金額為20元,此時余額賬戶余額為10元,余額返現(xiàn)賬戶余額為5元,在優(yōu)先消費返現(xiàn)賬戶金額扣款5元后無法再從余額賬戶消費15元時,交易失敗后需要回滾余額返現(xiàn)賬戶消費邏輯,余額返現(xiàn)賬戶“交易沖正 +5”。
階段B
在階段A中,單個業(yè)務(wù)會根據(jù)不同的產(chǎn)品設(shè)計進(jìn)行賬戶邏輯的迭代,增加余額充返賬戶后雖然從賬戶邏輯層面只是增加了新的資金賬戶,但是交易邏輯卻是進(jìn)行了較大的變更和調(diào)整;如果此時該業(yè)務(wù)場景又出現(xiàn)新的邏輯變化,例如某一天該租車業(yè)務(wù)針對某些信用良好的用戶進(jìn)行免押金用車活動,并且支持這類用戶在退押金時可以選擇將押金的全部或部分金額進(jìn)行余額充值,那么在流程設(shè)計上還會存在賬戶轉(zhuǎn)賬的情況(押金賬戶->余額賬戶)。
每次產(chǎn)品業(yè)務(wù)的迭代涉及用戶資金邏輯,都不免會影響交易邏輯及賬戶邏輯本身,但如果業(yè)務(wù)品類單一,這種迭代及擴(kuò)展通過硬編碼方式多少還能繼續(xù)支持。但是,如果隨著公司業(yè)務(wù)向多元化發(fā)展,問題往往就變得復(fù)雜了。
假設(shè)A公司在主營租車業(yè)務(wù)發(fā)展態(tài)勢進(jìn)入到趨于平緩的階段后,為了擴(kuò)展業(yè)務(wù)范圍需要嘗試新的業(yè)務(wù),例如,某團(tuán)隊提出不能僅僅只搞租車也得弄個網(wǎng)約車平臺,那怎么弄?
首先肯定是需要先集結(jié)隊伍啦。集結(jié)完隊伍就需要好好分析分析下業(yè)務(wù)場景了,我們先大概看看一個網(wǎng)約車平臺的大概業(yè)務(wù)場景是什么樣子的,其中涉及的資金交易的流程應(yīng)該如何設(shè)計呢?
在A公司的租車業(yè)務(wù)中,從參與角色角度來看涉及的邏輯并不算太復(fù)雜,只有“用戶、車、租車公司(內(nèi)部可稱租車業(yè)務(wù)線)”,而從交易場景上看,用戶繳納押金、預(yù)存余額及余額消費都只是單向的C->B交易模型,如果不考慮公司層在線交易賬戶體系(這里是指公司層面的交易賬戶)業(yè)務(wù)復(fù)雜度還不算十分復(fù)雜,并且在這種單向業(yè)務(wù)模式下,沒有公司層面的在線交易賬戶本身并不影響業(yè)務(wù)流程,收入核算只需要線下計算即可,這也就是為什么前面會特意強(qiáng)調(diào)賬戶流水業(yè)務(wù)關(guān)鍵信息不能缺失的原因了。
而約車業(yè)務(wù)則是多向的C->B-C-B的交易模型,因為從參與角色上看除了普通打車用戶外,還有司機(jī)、打車平臺都會緊緊地參與到整個業(yè)務(wù)流程中;而從賬戶資金流上看用戶支付的車費不會以C->C的模式直接支付給司機(jī),而是會由打車平臺代收,打車平臺扣除訂單抽成后剩下的車費才會打到司機(jī)在打車平臺開的賬戶上,司機(jī)才能從個人賬戶提現(xiàn)。
?
從上圖的分析中我們可以看到,我們需要為普通用戶、司機(jī)賬戶、打車平臺分別設(shè)置必要的賬戶邏輯,普通用戶賬戶邏輯與之前的租車業(yè)務(wù)比較類似,用戶可以直接支付打車費用、也可以通過余額充值后使用余額支付打車費用;而平臺則需要代收用戶的打車費用并且需要按照服務(wù)規(guī)則從代收的打車費用中扣掉部分服務(wù)費,然后通過代收/付平臺賬戶將車費實時結(jié)算給司機(jī)端收款賬戶,司機(jī)通過個人收款賬戶發(fā)起提現(xiàn)后經(jīng)過結(jié)算賬戶完成提現(xiàn)。資金流如下:
?
此外,為了滿足產(chǎn)品邏輯的擴(kuò)張,例如要具備凍結(jié)司機(jī)賬戶的業(yè)務(wù)功能,則需要設(shè)置凍結(jié)賬戶;平臺為了進(jìn)行市場營銷活動,如發(fā)放紅包則需要設(shè)置平臺市場營銷賬戶等。
階段C
業(yè)務(wù)發(fā)展到這個階段,初步看好像并沒有太多的邏輯變動,并且看著只需要擴(kuò)展下之前租車業(yè)務(wù)的賬戶邏輯就好了。但真的是這樣嗎?
事實上從單純的產(chǎn)品邏輯來看,同一套個人用戶賬戶貌似是沒有什么問題的,但是根據(jù)很多互聯(lián)網(wǎng)公司業(yè)務(wù)發(fā)展的路徑來看,不同的業(yè)務(wù)線根據(jù)發(fā)展情況不同往往會分別設(shè)置不同的法律主體,而且根據(jù)業(yè)務(wù)性質(zhì)的不同監(jiān)管層面的政策也是完全不一樣的,例如在國內(nèi)運營的租車業(yè)務(wù)司機(jī)車費代收代發(fā)這類業(yè)務(wù)是要求運營公司具備支付牌照的,沒有則會牽扯到非法二清這樣的法律風(fēng)險,而一般來說在沒有支付牌照又想繼續(xù)運營的話,替代方案目前主要是采用銀行資金托管的方式,即用戶資金通過銀行三類賬戶進(jìn)行托管。
一旦涉及這類業(yè)務(wù),整個系統(tǒng)的業(yè)務(wù)復(fù)雜度會成倍地增長,所以如果采用同一套個人用戶賬戶的話,資金流將會變得難以拆分,對整個系統(tǒng)的升級也會造成比較大的困擾。
另外如果除了租車業(yè)務(wù)、打車業(yè)務(wù)外又嘗試了別的新業(yè)務(wù),如直播之類。業(yè)務(wù)類型完全不同,且財務(wù)本身就要求進(jìn)行分類的話,只能重新設(shè)計新的賬戶邏輯了;但,從某種角度看這類賬戶邏輯實質(zhì)上又是與之前業(yè)務(wù)存在共性的。如直播類平臺也是普通用戶充值,購買平臺禮物后打賞給主播,此時平臺會對用戶贈送的禮物抽成后將其轉(zhuǎn)換為可提現(xiàn)的余額結(jié)算給主播賬戶,這類賬戶邏輯與約車平臺其實是很類似的。
那么,是否存在既能統(tǒng)一財務(wù)數(shù)據(jù)又能良好地支持業(yè)務(wù)的橫向擴(kuò)展相對通用的賬戶系統(tǒng)模型呢?
接下來繼續(xù)和大家探討一套可以持續(xù)擴(kuò)展的業(yè)務(wù)賬戶系統(tǒng)該如何設(shè)計?
業(yè)務(wù)模型
首先我們分析下大多數(shù)在線資金業(yè)務(wù)涉及的邏輯實體,用戶是第一存在,但是用戶根據(jù)參與的性質(zhì)不同又分為普通消費端用戶、普通服務(wù)端用戶,拿打車來說一個普通打車的人屬于普通消費端用戶,而司機(jī)個人則屬于普通消費用戶,并且司機(jī)身份也是可以轉(zhuǎn)換為普通打車用戶,另外就是平臺用戶,是指公司內(nèi)部各個不同的業(yè)務(wù)主體,它們關(guān)聯(lián)的法律主體可能是同一個也可能是不同的。
所以綜上所說,我們需要的可能是一套“為不同公司主體下,不同業(yè)務(wù)的同一個/不同用戶提供不同賬戶交易邏輯支撐,并且可以滿足業(yè)務(wù)及用戶平滑擴(kuò)張的系統(tǒng)”。
事實上要達(dá)到這樣的效果是很難的,需要在系統(tǒng)平臺層面進(jìn)行良好地系統(tǒng)及業(yè)務(wù)架構(gòu)設(shè)計,并且確保在制定業(yè)務(wù)規(guī)則時遵循一定的制度及規(guī)范才行。
以下圖示為目前業(yè)內(nèi)相對比較完整的通用賬戶體系模型,俗稱“三戶模型”,最早是電信行業(yè)為適配復(fù)雜通信業(yè)務(wù)場景而設(shè)計的一套賬戶體系模型;而大部分互聯(lián)網(wǎng)公司業(yè)務(wù)的復(fù)雜度是低于復(fù)雜的電信業(yè)務(wù)的,所以在這里我們對此模型進(jìn)行部分改進(jìn),以期形成適應(yīng)互聯(lián)網(wǎng)公司業(yè)務(wù)發(fā)展的通用賬戶體系模型。
?
在上述模型中信息被劃分成了三個類型:客戶、用戶、賬戶。客戶是用戶身份信息的承載實體,例如張三這個人是一個客戶;而客戶也不僅僅只是針對個人,針對業(yè)務(wù)線所關(guān)聯(lián)的法律主體也劃分在客戶的范疇,如某某打車公司。而有了基本的客戶信息后,企業(yè)客戶具體可以開展什么業(yè)務(wù),普通個人用戶是否使用了該企業(yè)客戶提供的服務(wù),在模型中是采用用戶這個概念來承載的。企業(yè)客戶開展該業(yè)務(wù)時根據(jù)業(yè)務(wù)的設(shè)計需要開通什么平臺賬戶,普通個人用戶使用該業(yè)務(wù)服務(wù)需要開通什么樣的個人賬戶都可以根據(jù)業(yè)務(wù)的設(shè)計通過用戶下設(shè)立相應(yīng)地賬戶進(jìn)行隔離區(qū)分。
假設(shè)此時A公司的租車業(yè)務(wù)與打車業(yè)務(wù)法律主體尚未進(jìn)行拆分屬于同一家公司,但是財務(wù)上要求隔離兩類業(yè)務(wù)的資金流,那么可以在賬戶系統(tǒng)上為租車業(yè)務(wù)開立租車業(yè)務(wù)用戶,如果張三使用了租車業(yè)務(wù)則為張三設(shè)置租車業(yè)務(wù)用戶并在該用戶下開立余額、余額返現(xiàn)、押金三類賬戶并配置業(yè)務(wù)及記賬規(guī)則,此外若希望業(yè)務(wù)資金在平臺上也有個完整體現(xiàn)也可以在租車業(yè)務(wù)用戶下設(shè)立相應(yīng)的平臺賬戶,只是業(yè)務(wù)流程上可以采用緩沖或異步記賬的方式。
而打車業(yè)務(wù)則需要根據(jù)普通客戶信息為普通打車用戶開立相應(yīng)的個人賬戶,若是司機(jī)則需要開通司機(jī)相關(guān)的業(yè)務(wù)賬戶,而平臺也需要開通相應(yīng)的平臺賬戶。在信息流上,客戶信息為所有業(yè)務(wù)所共用,用戶信息則是根據(jù)不同的業(yè)務(wù)設(shè)置,賬戶是根據(jù)業(yè)務(wù)掛在相應(yīng)地業(yè)務(wù)用戶下。如若各業(yè)務(wù)間沒有橫向地聯(lián)系,各業(yè)務(wù)層賬戶體系根據(jù)自身業(yè)務(wù)分別運行、互不干擾,而如果存在聯(lián)系,如租車余額可以進(jìn)行打車,則可以設(shè)計為允許業(yè)務(wù)層間賬戶的互轉(zhuǎn),只是這種資金流會更復(fù)雜,需要配置的記賬分錄也會更加復(fù)雜。
以上述模型的定義而設(shè)計的賬戶系統(tǒng)會初步形成一個具備支持多類業(yè)務(wù)賬戶邏輯并行的通用中臺賬戶系統(tǒng)雛形,從財務(wù)角度看賬戶層次會相對清晰。另外,圖中還定義了機(jī)構(gòu)的概念以支持總公司-分公司這樣具備層級關(guān)系的財務(wù)核算需求,當(dāng)然這種情況在互聯(lián)網(wǎng)公司的扁平化模式下并不常見,所以可以暫時忽略。
本篇通過業(yè)務(wù)場景舉例從業(yè)務(wù)模型上大概闡述了互聯(lián)網(wǎng)賬戶系統(tǒng)如何設(shè)計得相對通用和清晰,事實上在系統(tǒng)設(shè)計上也需要進(jìn)行更多的設(shè)計,并且需要根據(jù)公司實際業(yè)務(wù)情況進(jìn)行一定的取舍。
互聯(lián)網(wǎng)賬戶系統(tǒng)如何設(shè)計(下篇)
來源:http://51jdk.com/7313500be4a84c05bc555c1bf4904b4e.html
總結(jié)
以上是生活随笔為你收集整理的互联网账户系统如何设计(上篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言 编写循环语句
- 下一篇: 16k a4_A4纸和16K的纸张大小有