OSSC(Aliyun Open Storage Service C SDK)是我和实验室@王维同窗在2012首届阿里云开发者大赛中的参赛项目(http://2012.aliyun.com),咱们做品提交是在10月2号,可是11月8号才揭晓最终结果,因此剩下的半个月还要慢慢等吧。 html
从GIT的提交记录来看开发时间应该是2012-09-03 21:08:02首次提交,最终提交记录是在2012-10-02 23:14:46,恰好整整一个月时间,除了实验室导师的活须要完成,就只能零零散散的利用空余时间来完成OSSC。虽然时间很紧,不过还好完成了这次比 赛的项目,从中也学到了不少东西。 算法
下图是OSSC代码演进,总的代码(在GIT统计中包括第三方库,如压缩库LZ4,miniLZO,MD5等)大概接近4.6W行,除开第三发库,咱们本身的代码大概在3.0W行左右。 编程
下图是每一个做者代码统计: 安全
下图是活动统计: 网络
下图是文件类型统计: 多线程
下图是代码提交时刻统计: curl
阿里云存储服务(Open Storage Service,简称 OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。 用户能够经过简单的 REST 接口,在任什么时候间、任何地点、任何互联网设备上进行上传和下载数据, 也可使用WEB 页面对数据进行管理。同时,OSS 提供 Java、Python、PHP SDK,简化用户的编程。 基于 OSS,用户能够搭建出各类多媒体分享网站、网盘、我的企业数据备份等基于大规模数据的服务。 【摘自《OSS API 开放接口规范文档》】。 函数
目前 OSSC 提供了 OSS 开放接口中所描述的全部功能, 特色包括: 测试
咱们为OSS设计了一种可支持多种实时压缩算法(如LZO, LZ4,LZF)的文件存储格式,并实现了LZO,LZ4两种压缩算法(从此可能支持更多)的文件和内存块的实时压缩上传和下载解压缩功能,用户在压缩上 传文件时须要指定压缩算法(目前只能指定OSS_LZ4, OSS_LZO),可是在下载解压缩时并不须要指定解压缩算法,OSSC会自动根据文件格式选择适当的解压缩算法对文件或内存块进行解压缩。 网站
该压缩存储格式文件名称以.ossz结尾,可是不强制使用.ossz后缀,事实上,你可使用任意文件名和后缀,OSSC会自动检查文件是否为合法 的压缩格式。 另外,咱们为文件和内存块的实时压缩上传和下载解压缩分别提供了相应的API,咱们建议压缩上传和下载API成对使用,即上传时若是采用压缩上传,下载最 好采用压缩下载的API进行文件下载,以避免在下载解压缩时没必要要的文件格式检查,更详细的原理能够参考《OSSC 实现原理》一节,或源码 src/util/oss_compression.c, src/util/oss_decompress 或 src/core/client_object_operation.c。
目前 OSSC 除了提供 OSS 开放接口中所描述的全部功能之外,还包括如下亮点:
OSSC 在 Ubuntu 12.04 上开发,咱们测试了OSSC在不一样Linux操做系统发行版的稳定性,如下是OSSC通过测试操做系统:
OSSC 采用 CURL 库处理 HTTP 请求,所以在编译 OSSC 以前你须要安装 CURL,CURL 源码中包含了C调用API,最新版 CURL下载地址:http://curl.haxx.se/libcurl/。 除此以外,OSSC 不依赖任何其余程序库。
本节介绍如何编译 CURL
$ ./configure $ make $ make test (optional) $ make install(需root用户权限)
本节介绍如何编译OSSC。
OSSC采用 CMake 管理构建过程,应该先安装CMake,
cmake -DCMAKE_INSTALL_PREFIX=/your-path ../.
OSSC以程序库的形式提供给上层开发者使用,所以若是你想基于OSSC开发上层应用,必须连接OSSC程序库,OSSC大部分都集中到了 osscore 中,
只是支持多线程调用模式的API单独放在 ossextra库中(目前多线程只支持 pthread 线程库,后期会考虑在 Windows 下也支持多线程)
如下是你的程序须要链接OSSC,连接参数为:-L/path-to-your-ossc-installation -losscore.
另外须要注意的是,OSSC支持多线程断点续传模式下上传文件,若是你想体验该功能,你须要连接以下库: -L/path-to-your-ossc-installation -lossextra.
一个优秀的项目必须遵循良好的编码规范,良好的编码风格能够促进团队协做,减小 BUG 产生概率,有助于开发后的代码审查,下降后期维护成本。
OSSC虽然只是咱们在业余时间完成的小项目,可是也注重了编码风格的一致性,咱们强烈建议那些但愿基于OSSC作二次开发的编码人员阅读本规范, 相信本规范可以让你快速熟悉 OSSC 的总体结构和OSSC API 的使用方法。
OSSC详细的实现原理请参考: OSSC实现原理
OSSC(OSS-C-SDK)彻底采用C语言开发,并实现了相似面向对象的调用方式,即“对象(struct 结构)”的“成员函数(函数指针)“采用函数指针形式实现, 咱们尽可能和OSS-JAVA的使用方式切合,每一个对象都有相关的头文件和实现文件,并存放在modules目录下,其中与oss功能相关的全部的文件名均 以oss_为前缀,
每一个文件实现了一个对象(即模块),另外,为了方便开发人员记忆,OSSC中的全部结构和函数咱们采用以下命名;
request->set_bucket_name(request,"bucket-name-001");
好比上传一个对象,你须要定义标识上传对象的请求结构(oss_put_object_request_t *request)和
上传对象以后返回信息的结构(oss_put_object_result_t *result),而后将request做为参数传递给上传对象函数中(client_put_object_from_file()或者client_put_object()中),最后返回值会保存在result指针所指向的结构中。
OSSC 高级模块中包含了多线程上传大文件的 API,并支持断点续传,因为时间和精力有限,咱们目前并无实现 Windows 平台的多线程上传下载功能, 但愿从此会有其余开发者实现这一功能。
另外 Extra 库还支持简单的文件夹上传同步和下载同步的功能,但愿该API对其余开发者有用。
OSSC 采用了POSIX多线程标准库 pthread,理论上只要你的操做系统支持 pthread均可以使用 OSSC 的 extra 库中的 API。
OSSC 使用的开源程序:
OSSC 采用 LGPL(GNU Lesser General Public License:GNU 宽通用公共许可证)受权形式发布,有关 LGPL 能够查阅 GNU 官方文档: http://www.gnu.org/licenses/lgpl.html
傅海平:中国科学院计算技术研究所网络数据中心(haipingf@gmail.com)
王 维:中国科院学计算技术研究所网络数据中心(wangwei881116@gmail.com)