楊重陽
摘要:隨著大數據時代的來臨,證券行業這種數據密集型產業對數據處理的性能有著愈發急切的需求。傳統的磁盤-數據庫模式的處理速度愈發不能滿足需要。文中采取內存計算方式給出了該問題的一個解決方向。首先結合目前研究現狀簡要說明內存計算的概念,并總結出內存計算的特點。然后從單節點和多節點兩個方向結合證券行業不同的業務場景給出對應的系統架構,并指出相關條件下需要關注的問題和解決方向。
關鍵詞: 內存計算;證券;單節點;多節點;架構設計
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)04-0056-03
The Architecture Design and Evaluation of the Securities in Memory Trading System
YANG Chong-yang
(Department of Computer Science and Technology, Tongji University,Shanghai 200092,China)
Abstract:With the advent of the era of big data, there is urgent need for massive data processing performance in the data intensive industries, Such as securities. The speed of processing in traditional disk - database schema is increasingly unable to meet the requirement.In this paper, one solution of this problem has been given by using in-memory technology. At first, with the present situation of the in-memory technology study, briefly explain its concept and summarize the characteristics. then, combining the business scene of the securities industry,the corresponding system architecture is presented from different business scenarios ,single node and multi-node. Finally, point out the relevant issues and the solutions.
Key words: in-memory technology;securities;single node; multi-node;architecture
1 總述
隨著大數據時代的來臨,證券行業的發展日新月異,交易數據量越來越大,日交易額已經步入千億級別,2016年雖然A股市場較為低迷,以震蕩為主,但是已有統計數據表明,截止2016年末,僅滬深兩市場的日交易額均已達億元級別。近幾年隨著交易所融資融券,股票質押,券商投行,再融資,并購重組等新業務推進步伐的加快,基金公司、券商、私募等機構投資者也對量化交易、策略交易、做市、程序化交易等有著愈發迫切的需求。滬港深市場交易種類繁多,交易數據的快速增長,大規模數據和業務場景的高時效性要求與傳統的內存-磁盤訪問模式產生了巨大矛盾,隨著數據量的激增,在傳統計算模型中的諸多問題逐漸顯現出來, 如內存容量的大小,原始數據緩存的尋址命中率,磁盤的I/O瓶頸(輸入/輸出),數據處理效率等問題,基于底層數據查詢方式的局限,目前這些問題在現有的架構上都只能在軟件或者硬件上初步緩解,如更新系統架構,更換更好的CPU,服務器等硬件設施,但是并不能從根本上解決這些問題。
內存計算的出現給這種數據密集型訪問的處理方式提供了一個較好的解決方案。以內存計算為基礎的內存數據庫可以從很大程度上緩解目前的性能瓶頸。其支持數據直接訪問的高處理效率很好的貼合了當前證券行業的業務現狀。內存數據庫系統帶來的優越性能不僅僅在于對內存讀寫比對磁盤讀寫快上,更重要的是,從根本上拋棄了許多傳統的磁盤數據管理方式,并基于全部內存數據的管理進行了新的體系結構的設計,并且在數據緩存、快速算法、并行操作等方面有相應的改進,故相比于傳統數據庫的數據處理速度來說有極大的提高。
本文第2節介紹內存計算的相關特點及當前的發展狀況,并根據系統硬件架構的不同概述對應的設計要點。第3節針對于單節點系統框架,重點從性能,并發的角度設計系統架構;第3節針對于多節點系統框架,重點從網絡,多節點間通信的角度分析系統;第5節總結內存計算架構并給出進一步研究方向。
2 內存計算概述
內存計算的概念早在20世紀90年代的時候就已經有人提出并付諸實驗,只是局限于當時的技術水平等條件, 研究的步伐沒有現在這么快。目前較權威的機構,如IBM對其說明為:針對數據訪問密集型應用,為了提高數據處理效率,將數據全部或部分放置于內存,利用內存的高讀取速度來提高處理速度,結合具體業務場景來看,內存計算還需要另外專門設計搭配的軟件體系架構、軟件接口等[1]。據此,內存計算應包含如下幾個特性:
1) 大容量內存(單節點或者多節點),可將待處理的數據全部或者主要的部分存放于內存中;
2) 良好的業務處理模型和接口;
3) 數據規模大,較高的時效性要求;
4) 支持業務的并行處理。
綜上,內存計算是在大數據環境下,憑借計算機軟硬件的快速發展,并通過體系架構和編程模型的重大革新,將數據的處理主要放在內存中完成,取代原來數據傳統操作的新型的并發計算架構。
目前國內證券行業的蓬勃發展,大券商實力較為雄厚,經過多年的積淀,對性能,規模,災備,監控等都有著較高的要求,分布式多節點部署可以較好的切合需要。 相比較而言,小型券商也有類似的需求,只是受限于自身的發展情況,單節點已經能滿足大部分需要。
1) 單節點
單節點內存計算系統是指運行于單個物理節點上,擁有一個或多個處理器和共享內存(集中式共享內存,或非一致性共享內存(non-uniform memory access,NUMA))單節點上的內存計算主要是壓榨CPU的性能,同時優化軟件處理流程,磁盤讀取方式和業務處理邏輯,同步采用新型計算架構,采用大內存和多線程并行,以達到充分發揮內存和 CPU 的 cache的緩存處理能力,提高處理性能的目的。
2) 多節點
單節點內存計算因局限于硬件資源,在處理更大規模數據的時候,由于先天架構的局限,在硬件的橫向擴展方面的問題并不一定完全兼容。故分布式系統的內存計算開發和應用也逐漸豐富起來。比如以MapReduce 為代表的大規模分布式內存處理技術。這種內存計算處理方式充分考慮了硬件的擴展性,天然支持多個節點(計算機/服務器)構成的集群來構建分布式內存,并通過統一的資源調度,使待處理數據有序的存儲于對應分布式內存中,并根據一定的規則實現大規模數據的快速訪問和并行處理。
3 單節點系統設計要點
在該業務場景下,因其不涉及與外部的交互,所有的業務均是由券商自己單節點內部完成,故技術上著重考慮的是單機性能方面的問題。如系統內高并發的解決,復雜業務的接口設計,業務流程的優化等。
簡要的系統框架圖如下:
在簡單的網絡環境下,(暫不考慮行情等其他輔助插件),性能的提升需緊密結合業務流程,精簡不需要的冗余步驟,圍繞多線程并發開展業務流程設計。打好系統的底層基礎架構,充分考慮后續的延展性和健壯性。
在具體的數據處理上,現也有給出較好解決方案的處理框架,如Grace[2],Ligra[3],GRACE[4]和 GraphLab[5]。大體思路都是一樣,都利用多核 CPU 和大內存,結合多線程并行技術,達到充分利用內存和 CPU的目的,只是三者的處理機制和側重點有所區別。Grace 提出的是一種聚集圖更新策略,針對于圖劃分間(線程間)進行了通信和負載均衡優化,以此提高圖處理效率;Ligra的計算方式則是以圖為中心,提出了一種輕量級的圖處理架構,重點在于更容易實現對應的圖遍歷算法;GRACE 重點針對的是同步/異步模式,提出了一種可以根據具體需求場景,由用戶自行決定或者切換同步/異步執行的并行圖處理結構。最后, GraphLab 是一種基于圖模型處理的機器學習算法,其并行框架是異步的。
在數據存貯上,內存數據庫起步很早,如MMDB[6-7](main-memory database),在數據訪問,主存和磁盤的尋址映射,內存索引結構的優化,查詢的優化,日志記錄和優化上都有相應的提高,現也得到了較好的效果,近幾年已有商業化的解決方案出現。類似的解決方案還有,hyper和hekaton, Hyper[8]是一種混合 OLTP和 OLAP的高性能內存數據庫;Hekaton[9]是一個基于行,針對事務處理(TP)的的內存數據管理系統,其優化過的應用可提升 50 倍的速度,并且完全集成了 SQLServer。
雖然在底層上對數據的訪問有了極大的改進, 但是在業務設計上也不能忽視數據的訪問成本,流程的設計也需要兼顧數據的增刪改查邏輯,避免無謂的資源消耗。
4 多節點系統設計要點
在多節點的環境下,相對于內存讀取的速度,網絡間通信的讀寫至少要慢上兩個數量級。如何解決網絡內節點間通信,數據傳輸,節點間同步,安全問題和節點宕機的災備恢復等則是需要考慮的重點。
簡要的系統框架圖如下:
在該多節點的網絡環境下,(暫不考慮行情等其他輔助插件),底層需要加入仲裁機這個角色,承擔負載均衡,排隊等職責,用來均衡多系統核心的負載,并對數據包進行去重,排序來保持業務處理的可靠性。網絡節點的布置中還需要用相應的網絡協議和對應的鏈路訪問機制來維護節點間的路由狀態和鏈路暢通,最常用的如OSPF(Open Shortest Path First開放式最短路徑優先),RIP(Routing Information Protocol路由信息協議),BGP/BGP4(Border Gateway Protocol,邊界網關協議)等。
節點間通信除了上述開銷之外,還需要加入容錯,災備,節點間同步等處理機制,用來保證業務狀態的正確性和唯一性。 由于內存數據的易失性的影響,相應數據的災備,恢復等異常處理機制是至關重要的。重載是最容易想到也是實現起來最方便的,如MapReduce, 其容錯機制主要通過定期檢查鏈路中的各個父子節點,對于故障的子節點, 及時從其他子節點中獲取對應的任務列表并重復執行,恢復到故障前的狀態,而對于出現故障的父節點,則通過從集群中的其他父節點上復制數據備份并傳輸到本地后重新加載的方法來解決。需要在原有的業務處理邏輯上加入對應網絡機結構的改造,需要整合多核心情況下的業務流程,確保多個核心可以充分發揮各自的能力,提高處理性能和CPU的利用率,解決負荷偏載,死鎖等問題。
5 結束語
本文首先初步分析了內存計算特點和發展情況,結合目前證券行業的現狀,進一步闡述了證券行業面臨的挑戰和問題;并從內存計算的兩種不同架構,機制以及模型等方面對內存計算技術的應用進行了簡要的說明,并對現有的一些較好的科研成果進行了總結。當然,內存計算的研究問題還有很多需要進一步深入研究才能解決。比如,目前的多節點內存計算系統中的重演機制帶來的存儲開銷問題,分布式共享內存[10]、內存數據庫等,節點的容錯方式均是通過接口來移動和復制其他節點的數據,或以記錄日志重演的方式更新集群間各個節點。而這兩種方法對于數據密集型的應用來說,開銷和負荷太大,集群節點之間大量數據的復制帶來的硬件存儲的開銷以及遠小于內存帶寬的網絡傳輸帶寬帶來的漫長耗時,這都是后續需要分析和研究的問題。
參考文獻:
[1] In memory database: HANA, exadata X3 and flash memory.2012[EB/OL].http://flashdba.com/2012/10/10/in-memory-databases-part2/.
[2] Shun J, Blelloch G E. Ligra: A lightweight graph processing framework for shared memory[C]. In: Proc. of the 18th ACM SIGPLANSymp. on Principles and Practice of Parallel Programming. ACM Press, 2013:135-146.
[3] Prabhakaran V, Wu M, Weng X, et al.Managing large graphs on multi-cores with graph awareness[C].In: Proc. of the Presented as Part of the 2012 USENIX Annual Technical Conf. (USENIX ATC 2012). 2012: 41-52.
[4] Wang G, Xie W, Demers A, Gehrke J.Asynchronous large-scale graph processing made easy[C]. In: Proc. of the 6th Biennial Conf. onInnovative Data Systems Research (CIDR 2013). Asilomar, 2013.
[5] Low Y, Gonzalez J, Kyrola A, et al. Graphlab: A new parallel framework for machine learning[D].arXiv preprint arXiv:1006.4990, 2010.
[6] Garcia-Molina H, Salem K. Main memory database systems: An overview[J]. IEEE Trans. on Knowledge and Data Engineering, 1992,4(6):509-516.
[7] DeWitt D, Katz RH, Olken F, Shapiro LD, Stonebraker MR, Wood DA. Implementation techniques for main memory database systems[J]. In: Proc. of the SIGMOD. 1984,14(2):1-8.
[8] Kemper A, Neumann T. HyPer: A hybrid OLTP & OLAP main memory database system Based on virtual memory snapshots[J]. In:Proc. of IEEE the 27th Intl Conf. on Data Engineering. Hannover, 2011: 195-206.
[9] Diaconu C, Freedman C, Ismert E, Larson PA, Mittal P, Stonecipher R, Verma N, Zwilling M.Hekaton: SQL servers memoryoptimized OLTP engine[J]. In: Proc. of the 2013 ACM SIGMOD Intl Conf. on Management of Data. ACM Press, 2013:1243-1254.
[10] Nitzberg B, Lo V.Distributed shared memory: A survey of issues and algorithms[J].Computer, 1991,24(8):52?60.