知識結(jié)構(gòu)
軟件系統(tǒng)架構(gòu)師綜合的知識能力包括9個方面,即:
1、戰(zhàn)略規(guī)劃能力。
2、業(yè)務流程建模能力。
3、信息數(shù)據(jù)結(jié)構(gòu)能力。
4、技術(shù)架構(gòu)選擇和實現(xiàn)能力。
5、應用系統(tǒng)架構(gòu)的解決和實現(xiàn)能力。
6、基礎(chǔ)IT知識及基礎(chǔ)設施、資源調(diào)配能力。
7、信息安全技術(shù)支持與管理保障能力。
8、IT審計、治理與基本需求分析、獲取能力。
9、面向軟件系統(tǒng)可靠性與系統(tǒng)生命周期的質(zhì)量保障服務能力。
- 作為系統(tǒng)架構(gòu)師,必須成為所在開發(fā)團隊的技術(shù)路線指導者;具有很強的系統(tǒng)思維的能力;需要從大量互相沖突的系統(tǒng)方法和工具中區(qū)分出哪些是有效的,哪些是無效的。架構(gòu)師應當是一個成熟的、豐富的、有經(jīng)驗的、有良好教育的、學習快捷、善溝通和決策能力強的人。豐富是指他必須具有業(yè)務領(lǐng)域方面的工作知識,知識來源于經(jīng)驗或者教育。他必須廣泛了解各種技術(shù)并精通一種特定技術(shù),至少了解計算機通用技術(shù)以便確定那種技術(shù)最優(yōu),或組織團隊開展技術(shù)評估。優(yōu)秀的架構(gòu)師能考慮并評估所有可用來解決問題的總體技術(shù)方案。需要良好的書面和口頭溝通技巧,一般通過可視化模型和小組討論來溝通指導團隊確保開發(fā)人員按照架構(gòu)建造系統(tǒng)。
編者按:要開發(fā)出用戶滿意的軟件并不是件容易的事,軟件架構(gòu)師必須全面把握各種各樣的需求、權(quán)衡需求之間有可能的矛盾之處,分門別類地將不同需求一一滿足。在UPYUN Open Talk 第二期“移動時代互聯(lián)網(wǎng)金融架構(gòu)趨勢”的技術(shù)分享中,挖財首席架構(gòu)師王福強帶來了《挖財?shù)幕ヂ?lián)網(wǎng)金融技術(shù)探索》,王福強重點分享了當前挖財架構(gòu)設計中的6大關(guān)鍵點:
系統(tǒng)層級分離
從大的體系來講,挖財主要在做四個緯度的事情,第一個是會員中心,挖財有一套自己的會員體系,第二個是現(xiàn)金流,第三個是風控中心,第四個是產(chǎn)品中心,最后是一些清算和結(jié)算的東西。
挖財在所有的系統(tǒng)上都會做一些適度的關(guān)鍵點分離。在這個層面上SOA(構(gòu)造分布式計算的方法)必不可少,當系統(tǒng)形成一定規(guī)模后也會逼著我們往這個方向走。

在現(xiàn)金流體系中,因為現(xiàn)金流數(shù)據(jù)的特性和一般數(shù)據(jù)特性不一樣,它會隨著時間的緯度不停往上漲,不能單純按照用戶來劃分,所以挖財從用戶和時間線兩個維度的區(qū)分現(xiàn)金流。為了保持數(shù)據(jù)的一致性,挖財在選型的時候采用了Scala語言。在系統(tǒng)體系里,中間件會隨著數(shù)據(jù)量的增長而遭遇瓶頸,所以挖財在后面的服務化方向就專門針對服務做優(yōu)化,在應用層針對數(shù)據(jù)層做一些屏蔽工作,將其分離開來。
除了在技術(shù)上做邊界分離,我們還會對職責進行一些劃分,讓個人優(yōu)勢得以充分發(fā)揮,挖財在這一點上強調(diào)的是前后端分離,最早挖財在技術(shù)上只是做異步的調(diào)用,生成一些protect層面的規(guī)范,但最終前端的事情還是要完全由前端來做,這會使得前后端的工作效率得到整體提升。
消息傳遞
上面的分離,主要是在系統(tǒng)層級的隔離和界定上,隔離后還需要進行系統(tǒng)層級間的交流互通,形成體系后才可以產(chǎn)生更大價值的服務。挖財采用了消息傳遞機制來解決系統(tǒng)互通的問題。
在消息傳送的方式上采用remoting(分布式處理方式),提到remoting更多的還是和RPC相關(guān)的概念,互聯(lián)網(wǎng)大部分技術(shù)體系都是同時采用多語言開發(fā)的,RPC是跨語言的通信標準?;诜兆龅墓ぷ?,基本都會參考使用DUBBO服務框架。鑒于金融系統(tǒng)對高并發(fā)的要求沒有特別高,挖財采用了HTTP協(xié)議來實現(xiàn)。
異步化處理
通過消息傳遞解決了系統(tǒng)互通的問題后,為了盡量減少事件給系統(tǒng)帶來的影響,在盡可能所有的地方都走異步化。

當移動端對服務器端發(fā)起的請求直接達到百萬級別以后,通過異步處理的方式形成一個完整的異步閉環(huán),等數(shù)據(jù)處理完后,將數(shù)據(jù)Push給移動端。在這個過程中,服務器端可以進行某些交互,也可在本地做一些事情。在這個環(huán)節(jié)挖財使用得最多的是Kafka和Akka技術(shù)。Akka是Actor模型在Java/Scala平臺上的一個比較成熟的實現(xiàn)。
Akka本質(zhì)上沒有限速,所有的消息都可以實時發(fā)送,這就會導致稍不注意就會導致處理節(jié)點的數(shù)據(jù)崩盤,所以我們在使用Akka過程中第一個要處理的問題就是限流。比如通過ACK機制緩解后端處理壓力。
信息存儲,寧多勿缺
挖財對信息這一塊現(xiàn)在采用寧多勿缺的原則,保留每一次的更改,代替原有的直接覆蓋,這樣使得出現(xiàn)問題的時候能有跡可循,不會因為查詢不到一些信息而一頭霧水。
在消息傳遞環(huán)節(jié)采用Kafka也是考慮到了這方面的原因,我們最看重的就是Kafka的多副本數(shù)據(jù)保存能力。
除了Kafka,我們還進行了一些小實踐,在維護方面,如果核心資料變更,以前是直接覆蓋,現(xiàn)在是核心字段配一個版本號,后期出現(xiàn)任何問題都可以根據(jù)時間將操作找出來。比如說Actor崩潰的話,我們通過Akka的創(chuàng)建功能可以隨時回去,不至于出現(xiàn)消息丟失、數(shù)據(jù)丟失的問題??傊谪?shù)募夹g(shù)希望能有自己的時光機,出了問題可以回退。
系統(tǒng)安全
對金融系統(tǒng)來講,安全是一個比較重要的問題。在金融系統(tǒng)來說,ATBS已經(jīng)是最低標準。為了抵制外來危害,首先盡可能的設置門檻,這樣可以減低技術(shù)成本。
在技術(shù)層面,會構(gòu)建基本防御層,比如網(wǎng)絡防火墻,應用防火墻。
在業(yè)務層面,借力第三方,在反欺詐層面挖財使用了同盾科技的技術(shù),同時配以風控團隊進行人工干預。
在攔截層面,為了保證隔離性,且不希望Kafka在接管所有東西后,這個集群出現(xiàn)問題,這個集體整體會受到影響,因此希望從物理上部署應用的隔離性,相應集群負責相應的業(yè)務處理。
存儲冗余
從分布式存儲的角度來講,傳統(tǒng)互聯(lián)網(wǎng)更多在CP的角度考慮問題,往往是將存儲弱化掉,但對互聯(lián)網(wǎng)金融企業(yè)來講,需要將存儲數(shù)據(jù)的一致性提高到第一位。對于核心交易系統(tǒng),為了避免Message Queue的弱勢,采用了簡單、靈活的Multi-write來解決數(shù)據(jù)一致性的問題。

挖財從技術(shù)架構(gòu)上來說,希望最終形成這樣一套完全靠事件來觸發(fā)的,以時間和數(shù)據(jù)為流向,充滿彈性機制的Reactive(響應)系統(tǒng)。
作者:王福強,現(xiàn)任挖財首席架構(gòu)師,原阿里資深架構(gòu)師, 先后在阿里巴巴平臺技術(shù)部及天貓產(chǎn)品技術(shù)部任職;6 年日本、歐美頂級金融機構(gòu)信貸,外匯期貨,債券交易平臺產(chǎn)品規(guī)劃,架構(gòu)設計,開發(fā)運維;5 年阿里系浸淫大數(shù)據(jù),搜索/推薦, 中間件, 實時數(shù)據(jù)計算與流計算等多個技術(shù)領(lǐng)域;1 年自由職業(yè),平臺研究及創(chuàng)作;cobarclient分布式數(shù)據(jù)訪問層作者;《Spring揭秘》作者;Scala早期接受者與布道者。