天天看點

網際網路金融平台微服務架構設計

網際網路金融平台微服務架構設計

  按照孢子架構要義對網際網路金融理财平台進行微服務架構設計。假設我們設計的目标是5年後的陸金所(https://www.lu.com/)。

陸金所簡介,平安集團旗下理财平台,是中國最大的網絡投融資平台之一,2011年9月在上海注冊成立,注冊資本金8.37億元,lufax結合全球金融發

展與網際網路技術創新,在健全的風險管控體系基礎上,為中小企業及個人客戶提供專業、可信賴的投融資服務,幫助他們實作财富增值。截至2014年1月末,注

冊使用者已逾570萬。

l 需求分析

參照陸金所,獲得如下核心需求矩陣。

分類 功能 品質 限制
前端使用者首頁及其它 産品展示 及時響應、搜尋引擎優化
本周特推 根據使用者特性推薦
廣告圖檔 可随時更換
公告 可随時釋出
幫助中心
上證指數顯示 及時響應 實時同步上證指數
促銷活動
媒體報道
常見問題
産品搜尋
投資某産品 及時響應、安全性、可靠性 多種投資品種,某些品種投資流程不一樣
登入、注冊 及時響應、安全性 符合國家安全等級标準
前端使用者會員中心 賬戶總覽
我的投資
我的借款
資金記錄
充值、取現
賬戶安全設定
我的陸金币
我的商品
我的消息
推薦好友
前端使用者會員俱樂部 商品推薦 可随時設定規則,自動推薦商品
商品詳情
購買商品
秒殺購買商品
活動類推薦
活動類詳情
活動類玩法 目前包括:刮刮樂、抽獎、競猜、競拍
商品、活動搜尋
新手指南 可随時更新
登入 及時響應、搜尋引擎優化、安全性 會員登入後免登陸
背景運維業務需求 系統管理
不同産品的運維管理 及時響應、可擴充性
不同産品的釋出管理
新聞及公告釋出
統計及報表

  宏觀上講,陸金所的營運目标是要打造一個網際網路金融理财平台。目前産品包括:穩盈-安e、穩盈-變現通、穩盈-鑫保、安盈-票據、點金計劃、大

數金融等P2P理财産品,包括信托理财、粵股交等專享理财産品,還包括1000多隻基金,以及零活寶、保險理财等投資理财産品。所有理财對于前端使用者來說

目的和操作隻有一個,那就是投資,然後擷取收益。從需求分析來看,網際網路金融理财平台可以看做是一個金融類的電子商務網站,使用者在其上選擇産品并投資,這

和傳統電子商務選擇産品進行購買操作類似。

      上面的需求我簡化了背景運維功能的需求,一方面我不是陸金所的開發人員,也不知道他們具體有哪些需求。另外一方面,金融産品背景運維管理及其複雜,因為涉及到錢,我們也不好去猜,是以就給出了幾個簡化的大項背景功能需求。 

l 系統分析

      要将需求進行系統分析,還需要有企業的營運目标做支援。我們假設陸金所5年後營運目标是:

      産品方面:繼續上線目前沒有的理财産品(比如期貨、現貨投資)

      注冊人數:達到3000萬

      年營業額:達到1000億

      網站日通路量:3000萬PV

      産品購買并發:1000 QPS

那麼我們按照上面的需求,進行系統分析,首先按大的職責将職責相同的劃分為一個服務。并且有了上面這個經營目标,所有功能需求都需要增加一項“質

量”特性,那就是“高并發”,高并發會影響到所有設計。如果隻有幾個使用者在使用整個系統,那麼顯而易見一個應用,也不需要什麼微服務,一個web伺服器就

搞定了所有事情。另外如果要将網際網路金融平台品質特性排個序,很顯然最重要的是安全性、可靠性,這畢竟是關系到使用者的血汗錢。安全性和可靠性也會直接影響

功能的技術實作,但并沒有并發性影響性大。深入分析職責後把每一種功能的實作關鍵技術列出,如下:

需求 實作子系統及服務 實作技術(軟硬體結合)
産品展示、産品搜尋、促銷活動、推薦服務 平台商品服務 叢集部署、高速緩存、分布式緩存、搜尋引擎技術、靜态化
廣告圖檔、公告、幫助中心、媒體報道、常見問題
平台會員服務 叢集部署、消息隊列、實時計算
使用者會員中心 賬戶總覽、我的投資、我的借款資金記錄、賬戶安全設定、我的陸金币、我的商品、我的消息、推薦好友、充值 叢集部署
商品推薦、商品詳情、活動類推薦、活動類詳情、商品、活動搜尋 俱樂部商品服務
購買商品、秒殺購買商品、活動類玩法 俱樂部會員服務
新增系統服務需求 日志采集系統
充值、支付 第三方支付服務
短信、郵件通知 通知服務 叢集部署、調用多家第三方短信接口
安全性 服務授權及審計服務
資料可靠性 自動對賬服務
前端頁面 網站前端頁面 平台網站WEB、WAP端
會員俱樂部WEB、WAP端
運維管理 系統管理、不同産品的運維管理、不同産品的釋出管理、新聞及公告釋出、統計及報表 運維管理服務
運維管理前端 運維管理WEB端
手機用戶端 Andriod APP及蘋果APP

  如上所述,要支援營運目标的陸金所平台,可以分為大小十幾個服務和子系統。系統劃分的依據一方面是職責,一方面跟實作技術有關,同一職責下實作

技術不同會被劃分為兩個服務,比如購買商品和商品展示原本屬于同一個大的領域,但其因為實作技術和品質要求不同需要劃分為兩個子產品。這是因為微服務和傳統

SOA最大的差別就是技術實作的個性化,隻有個性化才能做好做專,并節省成本。另外根據系統分析,我們需要将第三方調用的地方抽取為服務,比如支付,将這

些第三方調用抽取為一個單獨的服務首先也是基于職責考慮,其次是基于穩定性考慮,因為調用第三方的東西通常存在很大的不穩定性,當某一廠商提供的API不

能用時,我們的系統需要自動切換到可用的API。使用者購買産品産生訂單相關資料,訂單資料關系到商品和使用者兩方面,如果是超高并發的系統,使用者購買行為需

要單獨的服務,但限于網際網路金融的特殊性-不會在同一時刻産生大量交易,我們将訂單服務合并到使用者賬戶服務,因為從資料角度來講,訂單屬于每一個使用者。

      另外,金融平台和會員俱樂部從大的方面來講是兩個獨立的系統。雙方不共用任何基礎資料,如果需要對方資料通過各自的接口進行互動。總的來說,雖然有十幾個

服務,但有些服務工作量并不是很大,有一些小的服務比如支付、通知等,一個開發人員可以開發好幾個,是以總體上所需的開發成本比傳統SOA還是要低很多,

而且傳統SOA技術門檻過高,對開發工程師要求較高,不像微服務隻要定義好接口和規則,普通開發人員都能做。

l 邏輯架構

邏輯視圖采用以下方法建立。

   

按照職責、通用性、技能及工作量綜合考慮和計量,平台邏輯架構設計如下圖:

  

  十幾個子系統分别分布在服務層、服務監控與治理、表現層。實體層和接口通路層雖然屬于“層”,但它們并不單

獨釋出,而是使用Jar包類庫的方式提供給其它服務調用,是邏輯上的層。業務服務子產品具有子產品化,構件化的特點,并可以以各種不同的協定釋出服務,包括

SOAP、RMI、REST、JMS等。

l 開發架構

系統所需的工程,“[ ]”裡面表示工程的名稱。

所需公共子產品工程:

開發環境:

編碼:UTF-8                                          

工具:Myeclipse 10

SVN:Site-1.8.22

注釋插件:Jautodoc_1.8.0

Web伺服器:Tomcat7

JDK: JDK1.7、 Java EE 5

開發環境:Maven 3

開發技術選型:

表現層:Bootstrap+Html+Jquery

MVC架構:Spring MVC 3.2

安全架構:Spring security 3.2

Rest接口實作:Spring MVC Rest

持久層:Mybatis3.2

緩存架構:Ehcache 2.6、Redis

日志管理:SLF4J 1.7、Log4j

資料庫:MySql 5.5

l 運作架構

  此架構設計視圖的關注點是控制流組織。運作架構考慮一些非功能性的需求,如性能和可用性。它解決并發性、分布性、系統完整性、容錯性的問題,以及邏輯視圖的主要抽象如何與程序結構相配合在一起-即在哪個控制線程上,對象的操作被實際執行。

主要控制流包括:

l  頁面通路控制流

由前端浏覽器發起請求,部分請求首先會到緩存裡查詢,如果緩存裡有結果則傳回,如果沒有緩存内容,則繼續請求web伺服器。也有部分無需緩存的請求直接通路web伺服器擷取資料。

l  日志采集

記錄檔采集有兩條控制流。一條是頁面的采集js,直接将使用者請求發送至日志采集接口,由日志采集接口送出給消息隊列,再由日志采集子產品從消息隊列裡擷取資料并儲存。另外一條是在web伺服器層面攔截通路請求并送出給消息隊列,并由日志采集子產品擷取和處理。

l  自動對賬

由接口通路層攔截需要記賬的操作,并轉換成記賬憑證送出到消息隊列,由自動對賬子產品從消息隊列中擷取資料并儲存。自動對賬功能是由定時任務觸發,由自動對賬服務按規則進行對賬計算,如果需要預警則産生預警資料。

l  手機APP通路

由手機app發起,部分請求首先會到緩存裡查詢,如果緩存裡有結果則傳回,如果沒有緩存内容,則繼續請求web伺服器。也有部分無需緩存的請求直接通路web伺服器擷取資料。

l  運維管理

由浏覽器發起請求,考慮到并發情況并不是很大,可不經過緩存伺服器,直接與web伺服器運維服務互動。

l 實體架構

此架構設計視圖的關注點是實體節點(Node)分布,以及軟體到硬體的具體映射關系。

主要關鍵技術:

l  負載均衡

1)采用負載均衡器來實作硬體級的四層交換負載均衡,或采用LVS來實作軟體的四層交換負載均衡。并通過nginx實作反向代理伺服器叢集。

2)   使用zookeeper實作業務服務的負載均衡。

l  緩存

1)系統使用Varnish 叢集以作為靜态頁面和圖檔的高速緩存。

2)使用Redis叢集作為業務層的高速緩存,Redis具有高并發、高可用等特性。

l  檔案存儲

鑒于平台檔案存儲業務并不複雜,通過NFS實作檔案存儲叢集。

l  消息隊列

系統使用高并發、高穩定性消息隊列rabbitmq實作異步消息處理。

l  Docker叢集