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