面向金融量化投资的高性能存储方案
量化投资是指通过数量化方式及计算机程序化发出买卖指令,以获取稳定收益为目的的交易方式。在海外的发展已有30多年的历史,其投资业绩稳定,市场规模和份额不断扩大、得到了越来越多投资者认可。从全球市场的参与主体来看,按照管理资产的规模,全球排名前四以及前六位中的五家资管机构,都是依靠计算机技术来开展投资决策,由量化及程序化交易所管理的资金规模在不断扩大。
量化投资里面首先是数据,数据是第一要位,尤其是高质量的数据,假如没有数据就无从做回测,没有好的数据就无法得到正确的结果。其次是经验,有了数据就可以写模型,完成一个有效的策略需要丰富的投资经验,这很关键。
量化投资主要需要哪些数据呢?这里主要讲一些传统的数据分类,其实还有很多特色大数据。
第一是基础数据:没有基础数据很多的量化策略是没法写的。主要包括:证券及公司基本信息,行情数据,财务报表,公司行为,财务数据,市场行为,指数数据等。
二是宏观和行业数据主要包括:各类经济指标,国内生产总值,居民消费指数,特价指数,经济景气指数,财政与货币政策价格,工业品出厂价格指数等,行业包括有色煤炭,能源化工,房地产,汽车交运,电力,消费品等。
三是高频数据:股票的分笔高频,分时高频,各类分钟数据,股指期货高频,商品期货高频等。
四是衍生数据:这个数据体现了公司的投资和技术能力,很多需要自己去计算,但是小公司或者是小的机构没有这种研究能力,需要采购,比如很多有价格的技术因子,基本面因子,资金流向因子,分析师因子,风控数据等。
数据存储类型主要是有CSV,TXT,EXCEL,HDF file,DataBase;数据处理工具有很多例如Python、R语言、Matlab、SAS、Java等,但是目前Python在金融数据分析领域越来越越受到欢迎。
为了能够更好的为量化投资建模和模拟分析过程,就必须从各个来源抓取更加丰富的信息数据,作为量化分析的数据源。这些数据非常庞大,并且一直会处理持续增长的状态。这些基础数据在存储系统中的呈现方式为文件数据,并且需要有多个CPU服务器和GPU服务器共同处理和分析,所以还需要将数据存储在一个全局共享的文件系统之中,以便能够协同处理分析。
金融数据包含了大量的CSV,TXT,EXCEL,HDF file格式的文件,这类文件都是数十KB~数MB的大小,所以这类文件在存储系统上面看来都属于小文件。传统的存储系统存储海量的小文件以后都会效率低下,严重影响访问效率。
首先是做数据采集和整理,主要包括数据规划、采集、清洗处理、结构化、API化。因为从各个源头去采集数据的话,需要做很多工作,这部分占了量化模型实现百分之六十左右的工作量。
二是策略开发和调优,这部分主要包括设计策略模型,编码实现模型,通过数据进行回测,根据结果进行优化改进,这部分主要占据大约百分之三十的工作量。
三是模拟和交易,策略实盘之前要进行模拟测试,根据实际的行情进行模拟交易跟踪,模拟通过之后进行实盘交易,资金量级的大小会影响策略的效果,不同的阶段要进行很谨慎的测试和模拟。
在量化投资业务进行过程中,基金经理需要使用编写处理程序对从各处搜集过来庞大的数据类型进行快速、高效的建模、回测并进行模拟交易,以获得能够对后续的实际交易做出指导性帮助。而金融市场交易行情瞬息万变,如何能够在庞大的数据中快速建模找到相关规律特征,并迅速的做出决策,这就是量化投资过程中需要重点考虑的方向。在当今CPU、GPU处理能力快速提升的背景下,数据存储读写的性能往往很容易成为整个处理过程中的性能瓶颈。
2.1 并行文件系统大显身手
StarGFS是星实信息面向性能为中心而自主开发的并行文件系统,基于集群架构,采用通用化的硬件部署,可同时提供文件、块和对象三种协议实现存储的整合。
StarGFS的基本原理是以软件方式整合物理集群中多个独立节点上的存储资源,组成具有单一文件系统映像的存储空间;并通过良好设计的系统结构和数据分布策略,保证系统性能的高可扩展性,支持存储容量/性能的在线线性扩展。同时,StarGFS中采用副本及纠删码来保证数据的高可用性,多个节点/磁盘失效均不会导致数据丢失,数据服务的可持续正常运行。
StarGFS具有几个特点:
- 在线扩展到大容量:StarGFS支持在线扩展,同时支持元数据服务和存储服务的在线扩展,系统规模可近似无限的扩展单一文件系统到EB级别;
- 客户端缓存:StarGFS创新的实现了将客户端服务器上的SSD资源整合到系统的缓存系统中,实现了数据就近快速读取;
- 聚合带宽:StarGFS通过高性能优化的专有客户端,将从客户端服务器写入的数据同时写到多个存储节点的多块硬盘上。使得整个系统能真正的并行写入实现了极高的聚合带宽,充分发挥服务器的物理性能;
- 数据安全:StarGFS支持多副本和纠删码两种数据冗余模式,实现了高效并发的同时,保证数据的安全性,并可以针对目录设置不同的冗余模式;
- 兼容性强:StarGFS客户端支持市面上常见的各种操作系统,并且支持多种CPU平台,包括:x86、arm、龙芯、申威、飞腾等;
目前,StarGFS已经被应用于科学计算、视频处理与视频服务、医疗影像、云计算与服务等多种类型的应用。经过长时间生产环境的验证,StarGFS已被证明是上述类型应用行之有效的存储解决方案。
2.2 架构原理介绍
StarGFS是星实信息推出的并行文件系统,具有极高的性能、稳定性和易管理性。StarGFS采用了集群的架构,集群中有元数据和存储两大服务,都可以按需扩展。StarGFS采用元数据集中管理的模式,为非对称式架构,也可以将元数据服务和存储服务混合部署形成对称式架构。文件系统原生的需要元数据,更为贴近非对称式的模式。集中的元数据让系统架构更为简单和可靠。扩容和分配空间由元数据管理,整个系统无节点规模的限制,并且扩容后无强制性的数据迁移。
图 1 StarGFS系统架构图
StarGFS系统分为:元数据节点(Meta Node)、存储节点(Storage Node)和客户端节点(Client Node);
- 元数据节点(Meta Node):负责存储和管理文件的元数据信息及目录结构信息,并实现全局统一命名空间;
- 存储节点(Storage Node)负责以对象的形式存储文件的真实数据;
- 客户端节点(Client Node)则是上层应用访问数据的接入点,所有上层应用只有通过客户端才能与元数据节点(Metadata Node)和存储节点(Storage Node)进行交互,完成文件系统操作。
上述服务也是逻辑上的区分,元数据服务、存储服务、客户端服务都可以混合部署,最小支持单机部署。
2.3 StarGFS优势概要
2.3.1 高性能客户端并行读写提升效率
StarGFS采用了专有的访问协议,能够将数据并发的同时写到所有节点上。极大的增大了系统聚合续写带宽。并发的访问将原本需要串行写入的IO换成了并行写入,也节省了在IO上消耗的时间,降低了文件系统的延迟。
图 2 StarGFS并行读写模式
StarGFS具有专门为高性能计算场景设计的客户端协议。
采取了不同于传统NFS、CIFS等协议的一对一的数据读写方式,而是直接在客户端上将文件数据进行切片后对后端存储节点进行条带化写入,实现客户端一台对后端多台存储节点进行写入和读取的交互方式。通过这种客户端和存储节点之间一对多的读写方式,可以实现即时只有一台客户端的情况下,该客户端内部多线程进行文件系统读写,那么该客户端的文件切片数据也会直接传输发送到多台存储节点上,实现更好的文件数据分布存储和访问的均衡,充分利用好后端的存储硬件性能和容量资源。
StarGFS高性能专有客户端实现在Windows、Linux、Mac OS等常见操作系统内核模块化多线程设计,减少了数据多次内存拷贝的性能损耗,并且多线程池的设计能够极大的发挥并发读写的性能优势。
相比传统的NFS和CIFS等协议,或者采用Fuse模式实现的文件系统挂载方式,StarGFS高性能专有客户端能够提供相比40%左右的并发读写性能优势,可以极大的提升同样环境的作业计算效率,从而加快业务进展;StarGFS高性能专有客户端目前兼容了所有常见的Windows、Linux、Mac OS以及诸多国产操作系统的版本,可以不重启操作系统无缝的切入到运行中的操作系统中,实现高性能的并行文件系统挂载,确保业务运行连贯性。
StarGFS高性能专有客户端在网络层面采取了自动探测网络故障和自动切换的机制:实现了多网络通道并行传输的模式,一旦有其中一个通道出现故障,会自动将服务切换到其他网络通道,确保文件存储在存储网络中的连续性。同时StarGFS高性能专有客户端也会动网络的闪断进行一定的跟进重连处理机制,防止网络偶尔中断导致文件系统无法访问从而导致前端业务程序报错而退出,确保业务连续性。
StarGFS并行文件系统系统提供了字节粒度锁:系统支持对一个文件的某一段(字节粒度)进行修改并且加锁,同时此文件的另外段落也能同时被修改。并且系统采用强一致性,保证数据直接落盘,保证不同节点读取的数据是一致的。
2.3.2 纠删码确保数据可靠性和空间利用率
StarGFS采用了多种方式来保证数据的可靠性,针对文件的数据安全性,提供了副本和EC纠删码两种数据冗余模式,并且可以针对单独的文件、目录模式。在满足性能的前提下,用户可以根据业务的需求,灵活的调整性能优先策略或者容量优先的策略。
图 3 StarGFS纠删码机制容错
相比市场上常见的分布式存储系统上线之初都采用了2副本甚至3副本的方式来保障数据安全,往往付出了昂贵的硬件成本代价。StarGFS的纠删码功能可以支持在文件、块、对象等三种协议基础上大规模部署上线,完全具备了应用到生产线上的基础能力。相比传统常用的多副本策略,StarGFS的纠删码可以在更少的硬件投入情况下,存储相同的数据容量和实现相同的容错能力:
图 4 StarGFS纠删码机制带来巨大的构建、使用成本优势
2.3.3 客户端缓存提升效率
StarGFS提供高性能多级缓存加速,包括客户端缓存、RAM缓存、SSD缓存总共三级缓存。其中客户端缓存采用了客户端服务器上的SSD作为缓存,能够让客户端迅速的将数据写到缓存中。RAM缓存采用了预读算法,提升了系统性能。SSD缓存为后端存储服务器上的缓存,能够智能分析热点数据进行提前缓存,大大提供业务下的系统读写性能。
图 5 StarGFS多级缓存
2.3.4 小文件容器存储策略提升效率
StarGFS支持百亿级文件统一存储和高效率检索。StarGFS内部的系统采用了创新的小文件Container容器存储技术,能够在前端呈现标准POSIX文件系统名字空间的同时,在后端小文件落盘存储的时候实现智能的聚合成大文件的方式来实际存储。
StarGFS通过采用该技术将任何大文件、小文件都会被当做大文件一样的来存储和检索访问,完全消除了传统文件系统文件存储数量受限、文件检索效率低下等严重的数量和效率的问题,打破了传统存储的局限,将小文件创建、检索效率提高到传统存储的十倍以上,完全可以轻松应对任何存在海量小文件的业务场景。