按照孢子框架要義對網際網路金融理財平臺進行微服務架構設計。假設我們設計的目標是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叢集

系統採用最新的虛擬機器技術docker作為服務叢集釋出的載體。