挖财后端架构简介
挖財(cái)后端技術(shù)用的主要是比較大眾的東西,Web容器用Tomcat,框架主要是Spring MVC,也有少量的Play,中間服務(wù)層是Dubbo,微容器用Spring Boot,服務(wù)注冊(cè)這一塊是用ZooKeeper,核心業(yè)務(wù)開發(fā)方式還是圍繞著Spring和Mybatis等;數(shù)據(jù)的存儲(chǔ)這塊是MySQL和Hbase,分布存儲(chǔ)這塊是用阿里巴巴之前開源的一個(gè)中間件Cobar。消息和實(shí)時(shí)計(jì)算這塊主要是Kafka, Storm,日志以及監(jiān)控系統(tǒng)則是用典型的ELK和Zabbix。另外我們將要放棄MongoDB和Memcached,并不是這些產(chǎn)品自身的問題,而是人的因素,最早的架構(gòu)師對(duì)MongoDB很熟,后來(lái)因?yàn)樗x開,這塊的一些問題缺乏強(qiáng)有力的人把控,就放棄了。其他人對(duì)MySQL和Hbase更熟悉,并且這兩種組合基本滿足我們的需求了。Memcached則是被Redis替代。總的來(lái)說,我們裁剪掉了一些之前使用的相似產(chǎn)品,減少為一種,主要是基于自身運(yùn)維能力考慮的,不在于這些技術(shù)是否足夠好或者是否符合團(tuán)隊(duì)的特性和遇到的問題,而是你能不能把它維護(hù)的好,或者說風(fēng)險(xiǎn)控制好。
業(yè)務(wù)上面我們大概也是比較典型的。基礎(chǔ)設(shè)施是一塊,然后中間是服務(wù),上面是日常的應(yīng)用。基礎(chǔ)設(shè)施就包括典型的存儲(chǔ)、消息、框架,還有發(fā)布、運(yùn)維、監(jiān)控等等。中間就是現(xiàn)在典型的SOA服務(wù),用戶的資產(chǎn)、服務(wù)、流水、交易等等,所有的服務(wù)采用Spring Boot打包部署,主要便于運(yùn)維上的統(tǒng)一和方便做一些切面層的事情。最上面是應(yīng)用,包括社區(qū)、記帳、錢管家、理財(cái)。而安全和風(fēng)控會(huì)切入在每一個(gè)環(huán)節(jié)。
其實(shí)作為一個(gè)互聯(lián)網(wǎng)的金融公司,很多時(shí)候我們對(duì)金融會(huì)有一點(diǎn)點(diǎn)陌生,在我們看來(lái)做一個(gè)理財(cái)產(chǎn)品或者一個(gè)理財(cái)業(yè)務(wù)其實(shí)和電商業(yè)務(wù)有很大的相似之處。主要就是理財(cái)產(chǎn)品,他也是一個(gè)商品,這個(gè)商品可能有高的回報(bào),最初形成這個(gè)商品的時(shí)候背后有一套綜合系統(tǒng)或者說有一套邏輯。并且購(gòu)買這個(gè)商品之后,這個(gè)商品是有歷史的,他的收益是在變化的,所以簡(jiǎn)化之后,我們發(fā)現(xiàn)跟電商系統(tǒng)是相似的。
這就是典型的架構(gòu),前面是Web或Gateway,中間是Service,中間層協(xié)議是Dubbo默認(rèn)方式或者是HTTP。
數(shù)據(jù)存儲(chǔ)這一塊主要是MySQL和Hbase,當(dāng)前還有小部分?jǐn)?shù)據(jù)使用的Mongo,ORMapping這塊我們用了MyBatis。數(shù)據(jù)的水平擴(kuò)展主要是基于剛才提到的Cobar,它是阿里比較成功的開源產(chǎn)品之一。Cobar支持?jǐn)?shù)據(jù)的二維擴(kuò)展,能滿足我們的場(chǎng)景,比如說幾千萬(wàn)用戶的流水記錄可以按用戶加時(shí)間的維度來(lái)劃分。如果單純按時(shí)間的維度分區(qū),在查詢用戶的流水時(shí)要散落到各個(gè)分區(qū)上,對(duì)各個(gè)分區(qū)的壓力都較大。而按用戶的維度則可能導(dǎo)致這個(gè)分區(qū)在一定時(shí)間后達(dá)到我們預(yù)設(shè)的容量上線,因?yàn)橐惶煊袔装偃f(wàn)甚至上千萬(wàn)的流水進(jìn)入。二維的方式可以解決這些問題。盡管我們后來(lái)發(fā)現(xiàn)用戶的數(shù)據(jù)大多在最近一段時(shí)間內(nèi)較熱,時(shí)間比較早的數(shù)據(jù)相對(duì)較冷,只用了Cobar的一維擴(kuò)展方式,將冷數(shù)據(jù)歸檔到Hbase集群來(lái)解決。在數(shù)據(jù)的在線處理這塊,有很多用Akka框架的程序,比如計(jì)息系統(tǒng)主要是運(yùn)算的,所以Akka很適合干這個(gè)事情。
自動(dòng)記帳這塊主要是錢管家這款產(chǎn)品,他會(huì)根據(jù)銀行的帳單把這些數(shù)據(jù)匯總到這個(gè)產(chǎn)品里面,主要是從其他系統(tǒng)匯聚出原始的數(shù)據(jù),根據(jù)這些數(shù)據(jù)我們會(huì)進(jìn)行分類,進(jìn)行加工和抽取,最后匯總到database,這個(gè)過程的思路就是command+pipeline下面這套組合,只不過是分布式命令和管道,分布式里面命令是Akka所承擔(dān)的角色。
數(shù)據(jù)分析這塊,Canal會(huì)把binlog數(shù)據(jù)丟到Kafka然后同步到其他系統(tǒng)。在線分析主要通過Storm進(jìn)行,數(shù)據(jù)分析過程中緩存用了豌豆莢的Codis。離線分析目前用Hadoop/Spark的方式,數(shù)據(jù)分析之后,一部分存到Hbase,另一部分在通過Cober存儲(chǔ)到MySQL里面。
轉(zhuǎn)載于:https://www.cnblogs.com/linjiqin/p/6406853.html
總結(jié)
- 上一篇: Redmi K50至尊版为何定制1.5K
- 下一篇: 小米MIX Fold 2内外屏成本超40