这个库为实现擦除代码提供了一个简单的python接口。为了获得最佳性能,底层的擦除代码算法是用C语言编写的。
pyeclib的Python项目详细描述
这个库为实现擦除代码提供了一个简单的python接口。 我们知道它可以与python v2.6、2.7和3.x一起工作。 性能方面,库使用了liberasurecode,这是一个基于c的擦除 代码库。
pyeclib支持多种擦除编码后端,包括 由jerasure[1]提供的reed solomon实现,liberasurecode[3], 英特尔的isa-l[4]和phazr.io的libphazr。它还为公寓提供支撑 基于xor的编解码器(liberasurecode的一部分)-一类hd 基于“存储系统中基于平面异或的擦除码”的组合码: 结构、有效恢复和权衡”,见IEEEMSST2010[2])。 这些代码非常适合存档用例,有一个简单的结构 并且在单个磁盘期间需要最少数量的参与磁盘 重构(想想基于异或的lrc代码)。
安装
安装先决条件:
- python 2.6、2.7或3.x(包括开发包)、argparse、setuptools
- 自由代码v1.3.1或更高版本[3]
- 擦除代码后端库、gf complete和jerasure[1]、[2]、isa-l[4]等
安装依赖项:
debian/ubuntu主机:
$ sudo apt-get install build-essential python-dev python-pip liberasurecode-dev $ sudo pip install -U bindep -r test-requirements.txt
RHEL/CENTOS主机:
$ sudo yum install -y redhat-lsb python2-pip python-devel liberasurecode-devel $ sudo pip install -U bindep -r test-requirements.txt $ tools/test-setup.sh
如果要确认所有依赖项包都已成功安装,请尝试:
$ sudo bindep -f bindep.txt
note:目前,对于ubuntu,repo包中的liberasurecode dev比v1.2.0早。 对于centos,请确保安装最新的openstack cloud sig repo 才能安装最新可用版本的liberasurecode-devel。
安装pyeclib:
$ sudo python setup.py install
包括运行测试套件:
$ ./.unittests
如果测试套件因为找不到任何共享库而失败, 那么您可能需要将/usr/local/lib添加到加载时搜索的路径 图书馆。最好的方法(在Linux上)是将“/usr/local/lib”添加到:
/etc/ld.so.conf
然后确保运行:
$ sudo ldconfig
开始
“工具”目录中提供了使用pyeclib的示例:
命令行编码器:
tools/pyeclib_encode.py
命令行解码器:
tools/pyeclib_decode.py
确定重建丢失片段所需内容的实用程序:
tools/pyeclib_fragments_needed.py
一个配置实用程序,帮助比较可用的EC方案 性能和冗余:
tools/pyeclib_conf_tool.py
pyeclib初始化:
ec_driver = ECDriver(k=<num_encoded_data_fragments>, m=<num_encoded_parity_fragments>, ec_type=<ec_scheme>))
支持的ec_type值:
- liberasurecode_rs_vand=>;vandermonde reed solomon编码,仅限软件后端,由liberasurecode[3]实现
- jerasure_rs_vand=>;vandermonde reed solomon编码,基于jerasure[1]
- jerasure_rs_cauchy=>;高加索里德所罗门编码(Jerasure变体),基于Jerasure[1]
- flat_xor_hd_3,flat_xor_hd_4=>;基于平面异或的HD组合代码,自由代码[3]
- isa_l_rs_vand=>;英特尔存储加速库(isa-l)-simd加速擦除编码后端[4]
- isa_l_rs_cauchy=>;柯西里德所罗门编码(isa-l变体)[4]
- shss=>;日本NTT实验室擦除编码库[5]
- libphazr=>;phazr.io内置隐私的擦除代码库[6]
代码维护
这个库目前主要由openstack swift社区维护。 有关问题或任何其他帮助,请在freenode上的openstack swift中询问。
参考文献
[1]Jerasure,支持存储应用程序中擦除编码的C库,http://jerasure.org
[2]Greenan,Kevin M等人,“存储系统中基于平面异或的擦除码”,http://www.kaymgee.com/Kevin_Greenan/Publications_files/greenan-msst10.pdf
[3]自由代码,用于擦除编码后端的C API抽象层,https://github.com/openstack/liberasurecode
[4]英特尔(R)存储加速库(开源版本),https://01.org/intel%C2%AE-storage-acceleration-library-open-source-version
[5]Kota Tsuyuzaki,tsuyuzaki.kota@lab.ntt.co.jp>;,“NTT SHSS擦除编码后端”
[6]Jim Cheung,support@phazr.io>;,“内置隐私的phazr.io libphazr擦除代码后端”