云存储案例:纳斯达克采用Amazon S3存储服务
深入Amazon简单存储服务(S3)
之所以选择Amazon S3的原因,是因为市场回放程序需要一个廉价而且扩展性非常好的存储方式。要知道证券市场每天都会产生若干GB的交易数据。市场回放要存放每一个交易的细节数据并且在请求到达后能快速取回所需数据。
NASDAQ一开始制定的目标就是能在线保存数年的数据,并且能以合理的花费就能迅速地的得到全部所需数据,就这一点来说S3是非常令人满意的。有了S3的支持,在毫不牺牲性能的前提下,市场回放能为无数的的用户提供数量多达数十亿个的文件。
市场回放能够支持用户对数月或者数年前数据的请求,只要这些请求是遵规守法的。能迅速地得到所有的历史回放数据是一项非常重要的需求。S3已被证明可以持续地保持高速访问。
NASDAQ的原始数据是分布在各实时数据源处的,在将数据上载到S3之前,NASDAQ会将数据源处的数据格式转换成专为回放优化过的数据格式。这种专利的转换过程转换后得到的是非常简单高效的文本文件,并且这些文件是为快速上载和下载优化过的。文件里包含了所有的报价信息,AIR桌面客户端程序可以利用这些信息构造回放和分析过程的每一个细节。对整个产品来说,每天有成百上千的文件被上载到S3中。
市场回放的数据应用了一种短小精悍的、用逗号分隔的扁平的文件格式。S3的设计使得其可以快速可靠地存储和取回如此巨量的文件。这些文件拥有简单可读的格式,这一点从下边的例子中可以看出。文件名包含有股票代码、日期、文件中所含数据的开始时间等信息。开始的几行记录是每笔交易的初始最高出价和最低报价。接着是这些价格的变化信息。其中的字段包括:Exchange、sequence number、shares at bid、shares at offer、price of bid、price of offer、start time (milliseconds since midnight)、end time (milliseconds since midnight)。
组织和管理上百万的文件似乎是困难重重,然而扁平文件模型跟回放程序跟结合得非常好,因为每次回放或者分析都不需要很多数据就可以完成。这些数据就存放在一个易于管理的服务器文本文件上。程序自身会将用户的回放请求转换为文件名,然后向Amazon S3请求此文件,当请求返回时再对结果进行解析。回放程序目前还不支持跨多只股票或者大时间跨度等开放式查询,但可以对一只股票的所有交易细节进行观察和分析。
Amazon为S3的访问提供了REST和SOAP接口。Flex框架本身也支持访问REST和SOAP接口。除此之外,Google Code上有 一个名为as3awss3lib的开源API,它利用Action Script为AIR运行时与S3之间的交互提供了详尽的支持。
下面就是一个用as3awss3lib访问文件的例子:
//sample method for init the downloading of a fileprivate function getFile():void { //creates as3awss3lib wrapper with auth parameters var s3Service:AWSS3 = new AWSS3(this.accessKey, this.secretAccessKey); //add event handlers for async calls s3Service.addEventListener(IOErrorEvent.IO_ERROR, onIOError); s3Service.addEventListener(AWSS3Event.ERROR, onError); s3Service.addEventListener(AWSS3Event.OBJECT_RETRIEVED, onFileDownloaded); //calls AWSS3 method to get file s3Service.getObject(fileName, key);}//Event handler used file is returnedprivate function onFileDownloaded(e:AWSS3Event):void { //get file details var currentObject:Object = downloadQueue.shift(); var ext:String = mimeMap.getExtension(e.data.type); var fileName:String = (ext != null && currentObject.key.indexOf(".") == -1) ? currentObject.key + "." + ext : currentObject.key; //save file to specified downloadLocation var fs:FileStream = new FileStream(); fs.open(downloadLocation.resolvePath(fileName), FileMode.WRITE); fs.writeBytes(e.data.bytes); fs.close(); Alert.show("Your file(s) have been successfully downloaded.", "Success!", Alert.OK, null, null, null);}在这个例子中,"getFile"方法构造了as3awss3lib中类AWSS3的一个实例,并且利用"getObject"方法取回想要的文件。Flex中所有的远程服务都采用异步的方式。因此,getObject的调用也是异步的,AWSS3Event.OBJECT_RETRIEVED事件的处理器(handler) 被用来处理返回的结果。在以上代码中,返回的文件被保存并且利用警告对话框(Alert)告知用户。
在数据准备过程中,数据被分为许多个文件。每个文件只含有一只股票某一天中十分钟内的交易数据(所有的时间段都被标准化了,如9:25-9:35, 9:35-9:45等)。文件名包含数据的股票名称、日期和时间段信息,它是按照日期、股票代码和时间的顺序组合而成的。用户输入股票代码、日期和时间后,客户端程序将其拼装成一个文件名,然后向S3请求需要的文件。S3在快速取得文件和返回文件内容上是非常高效的。
选择Amazon S3除了技术优势外,它的价格模型也是决定性因素之一。它的价格是透明的和可预测的。你可以精确地预测操作所需要的花费,并且能做到实时监控。
对提交给S3的文件进行了精心设计再加上S3的廉价,决定了NASDAQ可以做到一直不进行数据卸载。S3上大部分花销都在数据提交和下载时候产生,将大量文件放在那里一个月不动其实是花不了多少钱的。
S3是按照市场回放所使用的容量收费的。因此NASDAQ就不用为了满足几个月甚至几年之后满负荷运转的需要,而花巨资去购买大量的硬件,这大大降低了市场回放程序的开发和启动成本。S3的可扩展性和价格模型使其可以按需扩容,不需要为了应对可能的用户增长加速而预留空间。
结论
NASDAQ市场回放最近会发布一个新的版本,在此版本中除了报价以外还会加入交易数据。这次发布会对程序做重要修改,包括:报价数据与交易数据的同步、重写图形接口、一个包括交易及其特征的列表、计算关于交易的一些数据。主要的更新在一个月左右的开发时间内就实现了,回放程序的架构和AIR及S3平台的的高品质和强大功能在此过程中充分显现了出来。此外,在AIR上进行版本的更新也很方便,因为其会在每次启动时检查和安装更新程序。NASDAQ市场回放程序的实现过程表明了一个数据驱动应用也能在有限的预算条件下快速地开发和部署,这真是一个令软件业界兴奋的时刻。这要归功于平台的不断发展进步,云计算出现和强大的客户端运行时。
集成系统网络情报信息数据库
CIO频道人物视窗
CIO频道方案案例库
大数据建设方案案例库
电子政务建设方案案例库
互联集成系统构建方案案例库
商务智能建设方案案例库
系统集成类软件信息研发企业名录

