挖財后端架構簡介

挖財后端技術用的主要是比較大眾的東西,Web容器用Tomcat,框架主要是Spring MVC,也有少量的Play,中間服務層是Dubbo,微容器用Spring Boot,服務注冊這一塊是用ZooKeeper,核心業務開發方式還是圍繞著Spring和Mybatis等;數據的存儲這塊是MySQL和Hbase,分布存儲這塊是用阿里巴巴之前開源的一個中間件Cobar。消息和實時計算這塊主要是Kafka, Storm,日志以及監控系統則是用典型的ELK和Zabbix。另外我們將要放棄MongoDB和Memcached,并不是這些產品自身的問題,而是人的因素,最早的架構師對MongoDB很熟,后來因為他離開,這塊的一些問題缺乏強有力的人把控,就放棄了。其他人對MySQL和Hbase更熟悉,并且這兩種組合基本滿足我們的需求了。Memcached則是被Redis替代。總的來說,我們裁剪掉了一些之前使用的相似產品,減少為一種,主要是基于自身運維能力考慮的,不在于這些技術是否足夠好或者是否符合團隊的特性和遇到的問題,而是你能不能把它維護的好,或者說風險控制好。

業務上面我們大概也是比較典型的。基礎設施是一塊,然后中間是服務,上面是日常的應用。基礎設施就包括典型的存儲、消息、框架,還有發布、運維、監控等等。中間就是現在典型的SOA服務,用戶的資產、服務、流水、交易等等,所有的服務采用Spring Boot打包部署,主要便于運維上的統一和方便做一些切面層的事情。最上面是應用,包括社區、記帳、錢管家、理財。而安全和風控會切入在每一個環節。

其實作為一個互聯網的金融公司,很多時候我們對金融會有一點點陌生,在我們看來做一個理財產品或者一個理財業務其實和電商業務有很大的相似之處。主要就是理財產品,他也是一個商品,這個商品可能有高的回報,最初形成這個商品的時候背后有一套綜合系統或者說有一套邏輯。并且購買這個商品之后,這個商品是有歷史的,他的收益是在變化的,所以簡化之后,我們發現跟電商系統是相似的。

這就是典型的架構,前面是Web或Gateway,中間是Service,中間層協議是Dubbo默認方式或者是HTTP。

數據存儲這一塊主要是MySQL和Hbase,當前還有小部分數據使用的Mongo,ORMapping這塊我們用了MyBatis。數據的水平擴展主要是基于剛才提到的Cobar,它是阿里比較成功的開源產品之一。Cobar支持數據的二維擴展,能滿足我們的場景,比如說幾千萬用戶的流水記錄可以按用戶加時間的維度來劃分。如果單純按時間的維度分區,在查詢用戶的流水時要散落到各個分區上,對各個分區的壓力都較大。而按用戶的維度則可能導致這個分區在一定時間后達到我們預設的容量上線,因為一天有幾百萬甚至上千萬的流水進入。二維的方式可以解決這些問題。盡管我們后來發現用戶的數據大多在最近一段時間內較熱,時間比較早的數據相對較冷,只用了Cobar的一維擴展方式,將冷數據歸檔到Hbase集群來解決。在數據的在線處理這塊,有很多用Akka框架的程序,比如計息系統主要是運算的,所以Akka很適合干這個事情。

自動記帳這塊主要是錢管家這款產品,他會根據銀行的帳單把這些數據匯總到這個產品里面,主要是從其他系統匯聚出原始的數據,根據這些數據我們會進行分類,進行加工和抽取,最后匯總到database,這個過程的思路就是command+pipeline下面這套組合,只不過是分布式命令和管道,分布式里面命令是Akka所承擔的角色。

數據分析這塊,Canal會把binlog數據丟到Kafka然后同步到其他系統。在線分析主要通過Storm進行,數據分析過程中緩存用了豌豆莢的Codis。離線分析目前用Hadoop/Spark的方式,數據分析之后,一部分存到Hbase,另一部分在通過Cober存儲到MySQL里面。

轉載于:https://www.cnblogs.com/linjiqin/p/6406853.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【pyqt5學習】——QcomboBox學習

目錄 1、添加條目: 1)逐一添加 2)批量添加 3)獲取當前選中的索引 4)獲取當前選中文本 5)根據索引獲取文本 6)統計條目總數 7)信號——當前選中的索引發生改變currentIndexChanged() 2、…

vSphere Client 編輯虛擬機屬性的問題

vSphere Client 編輯虛擬機屬性的問題 編輯虛擬機屬性的時候, 出現: vpxclient.vmconfig.cpuid 初始值設置異常之類的,重置了, 并將注冊表中的所有vmvare 相關鍵值刪除了, 還是一樣的。。 后面參照https://kb.vmware.c…

Val編程-系統架構

利用Val可以編寫相對大型軟件。 界面書寫,運動軌跡規劃,外部通訊,進程交互,文本讀寫.... GlobalData可以利用一個庫來作為一個公用庫,實現各個庫的數據交互。 PublicFunc書寫基本的通用函數來作為基本函數,…

poj 1256 Anagram—next_permutation的神奇應用

題意:給你一條字符串,讓你輸出字符串中字符的全排列,輸出的順序要按它給的奇葩的字典序。 題解:要輸出全排列,暴力dfs可以過,但要注意題目的字典序以及相同字符的情況。如果用next_permutation()處理可以簡…

【pyqt5學習】—— 滑動條Qslider、計數器QSpinBox學習

目錄 1、滑動條QSlider 1)常用屬性 2)實例——利用滑動條來實現字體大小的修改 ?編輯 2、計數器QSpinBox 1)屬性方法 2)實例 1、滑動條QSlider 1)常用屬性 self.slider QSlider(Qt.Horizontal)# 設置最小值self.slider.setMinimum(2)…

shell常用命令之curl: -w,–write-out參數詳解

顧名思義,write-out的作用就是輸出點什么。curl的-w參數用于在一次完整且成功的操作后輸出指定格式的內容到標準輸出。 輸出格式由普通字符串和任意數量的變量組成,輸出變量需要按照%{variable_name}的格式,如果需要輸出%,double一…

Val編程-速度因子

機械手臂在一個三個基本指令(movel,movej,movec)指令中有下面基本參數進行配置。 1. Frame toolField; Tcp的值2. Frame frameField;用戶坐標系的值3. MoveType absRelField;絕對運動與相對運動4. Config configField;姿態5. BlendType blendTypeField;倒…

Node.js學習之路24——Express框架的app對象

1.express() 基于Node.js平臺,快速、開放、極簡的web開發框架。創建一個Express應用.express()是一個由express模塊導出的入口top-level函數.const express require(express); let app express(); 1.1 靜態資源管理 express.static(root, [options]) express.stat…

【pyqt5學習】——對話框QDialog學習(QMessageBox、QColorDialog、QFIleDialog、QFontDialog、QInputDialog)

目錄 1、對話框QDialog類別 2、通用對話框 ?編輯 3、消息對話框QMessageBox() 1)消息對話框QMessageBox類型 2)案例 ?編輯 4、輸入對話框QInputDialog 1) 類型 2)案例 5、字體格式對話框QFontDialog 6、顏色對話框QColorDialog 1&…

使用 Mesos 管理虛擬機

摘要 為了滿足渲染、基因測序等計算密集型服務的需求,UCloud 推出了“計算工廠”產品,讓用戶可以快速創建大量的計算資源(虛擬機)。該產品的背后,是一套基于 Mesos 的計算資源管理系統。本文簡要介紹該系統的結構、Mes…

Swift數據類型_整型和浮點型

//swift中的整型和浮點型/***//類型推斷整數是Int 浮點數是Double ,日常使用需要注意不能越界,存儲時間毫秒數 英雄經驗數等等之類內容容易越界整型大多數情況下,你不需要在代碼中指定哪種整型。Swift提供了一種額外的整型,Int類型Java中的long型&#x…

Val編程-套接字

套接字的介紹:http://zh.wikipedia.org/wiki/Berkeley%E5%A5%97%E6%8E%A5%E5%AD%97 主要分為客戶端和服務器。客戶端一般是需要主動去鏈接,需要配置服務器的IP和端口。服務器是被動響應,需要打開相應的端口。端口一般不推薦使用系統端口和常用…

【pyqt5學習】——Qpainter控件學習(文本、圖像、各種圖形)

目錄 1、作用及應用步驟 2、繪制文本drawText() 3、像素級別繪制點(正弦曲線為例) 4、繪制不同樣式的直線 5、繪制弧形、圓形、扇形、圖像等 6、畫刷填充區域QBrush 1、作用及應用步驟 QPainter是一個用于繪制的類,該類可以用于繪制&…

反向代理與Real-IP和X-Forwarded-For(轉)

如下圖所示,客戶端通過Nginx Proxy1 和 Nginx Proxy2 兩層反向代理才訪問到具體服務Nginx Backend(或如Tomcat服務)。那Nginx Backend如何才能拿到真實客戶端IP呢? 接下來我們來看看如何才能獲取到客戶端真實IP。 場景1  場景1是…

Android studio打開之后 cannot load project: java.lang.NUllpointerException

參考來源:http://bbs.csdn.net/topics/391014393 關閉網絡,重新打開Android studio就好了。(但是原因不清楚是為什么?) Internal error. Please report to http://code.google.com/p/android/issuescom.intellij.ide.p…

Val編程-任務編程

不同任務之間可以通過一個標志符來實現互斥事件。 程序代碼&#xff1a; Task2 <span style"font-size:12px;">beginwhile truewait(bTaskFlag)cls()gotoxy(1,1)put("這是Task2")gotoxy(1,2)if bTaskFlagput("BFlag:true ")elseput(&…

【pyqt5學習】——拖拽功能(DragDrop)、剪切板(QApplication.clipboard)

目錄 1、拖拽功能&#xff08;Drag&Drop&#xff09; 2、剪切板&#xff08;QApplication.clipboard&#xff09; 1、拖拽功能&#xff08;Drag&Drop&#xff09; 選擇文本輸入框中的文本&#xff0c;移動到下拉框中自動添加步驟&#xff1a; 1、將文本輸入框設置為可…

oracle12c之 控制pdb中sga 與 pga 內存使用

Memory Management using Resource Manager Oracle數據庫資源管理器(資源管理器)現在可以在多租戶容器數據庫(CDB)中管理可插入數據庫(PDBs)之間的內存使用。這一特性有助于在CDB中維護所有PDBs的性能&#xff0c;確保所有的PDBs都不會占用更多資源&#xff0c;從而導致其他PDB…

[LeetCode] 21. Merge Two Sorted Lists ☆

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 解法&#xff1a; 新建一個鏈表&#xff0c;依次比較兩個鏈表的頭元素&#xff0c;把較小的移到新鏈表中&#xff0c;直到有…

Val編程-特殊函數使用

Waitendmove()和$Waitendmove()使用心得 這是兩個部分&#xff0c;程序運行部分和運動堆棧部分&#xff0c;waitendmove是兩個部分進行交互的一個函數。 一般情況下waitendmove()速度會降到0&#xff0c;相當于blend等于off. 代碼&#xff1a; begincls()userPage()title("…