UPYUN Open Talk第二期:挖財(cái)架構(gòu)設(shè)計(jì)中的6大關(guān)鍵點(diǎn)
在UPYUN Open Talk 第二期“移動(dòng)時(shí)代互聯(lián)網(wǎng)金融架構(gòu)趨勢(shì)”的技術(shù)分享中,挖財(cái)***架構(gòu)師王福強(qiáng)帶來(lái)了《挖財(cái)?shù)幕ヂ?lián)網(wǎng)金融技術(shù)探索》,王福強(qiáng)重點(diǎn)分享了當(dāng)前挖財(cái)架構(gòu)設(shè)計(jì)中的6大關(guān)鍵點(diǎn):
1、系統(tǒng)層級(jí)分離
從大的體系來(lái)講,挖財(cái)主要在做四個(gè)緯度的事情,***個(gè)是會(huì)員中心,挖財(cái)有一套自己的會(huì)員體系,第二個(gè)是現(xiàn)金流,第三個(gè)是風(fēng)控中心,第四個(gè)是產(chǎn)品中心,***是一些清算和結(jié)算的東西。
挖財(cái)在所有的系統(tǒng)上都會(huì)做一些適度的關(guān)鍵點(diǎn)分離。在這個(gè)層面上SOA(構(gòu)造分布式計(jì)算的方法)必不可少,當(dāng)系統(tǒng)形成一定規(guī)模后也會(huì)逼著我們往這個(gè)方向走。
在現(xiàn)金流體系中,因?yàn)楝F(xiàn)金流數(shù)據(jù)的特性和一般數(shù)據(jù)特性不一樣,它會(huì)隨著時(shí)間的緯度不停往上漲,不能單純按照用戶(hù)來(lái)劃分,所以挖財(cái)從用戶(hù)和時(shí)間線(xiàn)兩個(gè)維度的區(qū)分現(xiàn)金流。為了保持?jǐn)?shù)據(jù)的一致性,挖財(cái)在選型的時(shí)候采用了Scala語(yǔ)言。在系統(tǒng)體系里,中間件會(huì)隨著數(shù)據(jù)量的增長(zhǎng)而遭遇瓶頸,所以挖財(cái)在后面的服務(wù)化方向就專(zhuān)門(mén)針對(duì)服務(wù)做優(yōu)化,在應(yīng)用層針對(duì)數(shù)據(jù)層做一些屏蔽工作,將其分離開(kāi)來(lái)。
除了在技術(shù)上做邊界分離,我們還會(huì)對(duì)職責(zé)進(jìn)行一些劃分,讓個(gè)人優(yōu)勢(shì)得以充分發(fā)揮,挖財(cái)在這一點(diǎn)上強(qiáng)調(diào)的是前后端分離,最早挖財(cái)在技術(shù)上只是做異步的調(diào)用,生成一些protect層面的規(guī)范,但最終前端的事情還是要完全由前端來(lái)做,這會(huì)使得前后端的工作效率得到整體提升。
2、消息傳遞
上面的分離,主要是在系統(tǒng)層級(jí)的隔離和界定上,隔離后還需要進(jìn)行系統(tǒng)層級(jí)間的交流互通,形成體系后才可以產(chǎn)生更大價(jià)值的服務(wù)。挖財(cái)采用了消息傳遞機(jī)制來(lái)解決系統(tǒng)互通的問(wèn)題。
在消息傳送的方式上采用remoting(分布式處理方式),提到remoting更多的還是和RPC相關(guān)的概念,互聯(lián)網(wǎng)大部分技術(shù)體系都是同時(shí)采用多語(yǔ)言開(kāi)發(fā)的,RPC是跨語(yǔ)言的通信標(biāo)準(zhǔn)。基于服務(wù)做的工作,基本都會(huì)參考使用BUBBO服務(wù)框架。鑒于金融系統(tǒng)對(duì)高并發(fā)的要求沒(méi)有特別高,挖財(cái)采用了HTTP協(xié)議來(lái)實(shí)現(xiàn)。
3、異步化處理
通過(guò)消息傳遞解決了系統(tǒng)互通的問(wèn)題后,為了盡量減少事件給系統(tǒng)帶來(lái)的影響,在盡可能所有的地方都走異步化。
挖財(cái),Async典型應(yīng)用場(chǎng)景
當(dāng)移動(dòng)端對(duì)服務(wù)器端發(fā)起的請(qǐng)求直接達(dá)到***別以后,通過(guò)異步處理的方式形成一個(gè)完整的異步閉環(huán),等數(shù)據(jù)處理完后,將數(shù)據(jù)Push給移動(dòng)端。在這個(gè)過(guò)程中,服務(wù)器端可以進(jìn)行某些交互,也可在本地做一些事情。在這個(gè)環(huán)節(jié)挖財(cái)使用得最多的是Kafka和Akka技術(shù)。Akka是Actor模型在JAVA/Scala平臺(tái)上的一個(gè)比較成熟的實(shí)現(xiàn)。
Akka本質(zhì)上沒(méi)有限速,所有的消息都可以實(shí)時(shí)發(fā)送,這就會(huì)導(dǎo)致稍不注意就會(huì)導(dǎo)致處理節(jié)點(diǎn)的數(shù)據(jù)崩盤(pán),所以我們?cè)谑褂肁kka過(guò)程中***個(gè)要處理的問(wèn)題就是限流。比如通過(guò)ACK機(jī)制緩解后端處理壓力。
4、信息存儲(chǔ),寧多勿缺
挖財(cái)對(duì)信息這一塊現(xiàn)在采用寧多勿缺的原則,保留每一次的更改,代替原有的直接覆蓋,這樣使得出現(xiàn)問(wèn)題的時(shí)候能有跡可循,不會(huì)因?yàn)椴樵?xún)不到一些信息而一頭霧水。
在消息傳遞環(huán)節(jié)采用Kafka也是考慮到了這方面的原因,我們最看重的就是Kafka的多副本數(shù)據(jù)保存能力。
除了Kafka,我們還進(jìn)行了一些小實(shí)踐,在維護(hù)方面,如果核心資料變更,以前是直接覆蓋,現(xiàn)在是核心字段配一個(gè)版本號(hào),后期出現(xiàn)任何問(wèn)題都可以根據(jù)時(shí)間將操作找出來(lái)。比如說(shuō)Actor崩潰的話(huà),我們通過(guò)Akka的創(chuàng)建功能可以隨時(shí)回去,不至于出現(xiàn)消息丟失、數(shù)據(jù)丟失的問(wèn)題。總之挖財(cái)?shù)募夹g(shù)希望能有自己的時(shí)光機(jī),出了問(wèn)題可以回退。
5、系統(tǒng)安全
對(duì)金融系統(tǒng)來(lái)講,安全是一個(gè)比較重要的問(wèn)題。在金融系統(tǒng)來(lái)說(shuō),ATBS已經(jīng)是***標(biāo)準(zhǔn)。為了抵制外來(lái)危害,首先盡可能的設(shè)置門(mén)檻,這樣可以減低技術(shù)成本。
在技術(shù)層面,會(huì)構(gòu)建基本防御層,比如網(wǎng)絡(luò)防火墻,應(yīng)用防火墻。
在業(yè)務(wù)層面,借力第三方,在反欺詐層面挖財(cái)使用了同盾科技的技術(shù),同時(shí)配以風(fēng)控團(tuán)隊(duì)進(jìn)行人工干預(yù)。
在攔截層面,為了保證隔離性,且不希望Kafka在接管所有東西后,這個(gè)集群出現(xiàn)問(wèn)題,這個(gè)集體整體會(huì)受到影響,因此希望從物理上部署應(yīng)用的隔離性,相應(yīng)集群負(fù)責(zé)相應(yīng)的業(yè)務(wù)處理。
6、存儲(chǔ)冗余
從分布式存儲(chǔ)的角度來(lái)講,傳統(tǒng)互聯(lián)網(wǎng)更多在CP的角度考慮問(wèn)題,往往是將存儲(chǔ)弱化掉,但對(duì)互聯(lián)網(wǎng)金融企業(yè)來(lái)講,需要將存儲(chǔ)數(shù)據(jù)的一致性提高到***位。對(duì)于核心交易系統(tǒng),為了避免Message Queue的弱勢(shì),采用了簡(jiǎn)單、靈活的Multi-write來(lái)解決數(shù)據(jù)一致性的問(wèn)題。
挖財(cái)從技術(shù)架構(gòu)上來(lái)說(shuō),希望最終形成這樣一套完全靠事件來(lái)觸發(fā)的,以時(shí)間和數(shù)據(jù)為流向,充滿(mǎn)彈性機(jī)制的Reactive(響應(yīng))系統(tǒng)。