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