对象存储入门实践。
网络存储工业协会 SNIA 对象存储入门:
网络存储工业协会 Storage Networking Industry Association (SNIA) 是由来自于全球存储市场的众多企业组建的全球性非盈利组织。
Git tutorial https://github.com/cs-course/git-tutorial
替代方案
- 发行版
- 用容器快速部署 (可选)
- 选项 3: Python Docker https://github.com/Zhan2012/python-lab
- dockerhub (docker大本营)
docker pull zhan2016/python-lab:3.6.0
- daocloud (国内平台)
docker login daocloud.io && docker pull daocloud.io/zhan2016/python-lab:master-31a932d
- dockerhub (docker大本营)
- 选项 3: Python Docker https://github.com/Zhan2012/python-lab
同学期课程: Java语言程序设计, 2018-2019 第2学期 3~8周
一些安装辅助脚本 https://github.com/Zhan2012/java-bundle (给喜欢自己琢磨的同学参考)
- 国内资料 https://studygolang.com/
- 墙外本体 https://golang.org/
- 经典书籍 https://github.com/Unknwon/the-way-to-go_ZH_CN
- 学习资料荟萃 https://github.com/uhub/awesome-go
目的: 计划无伤尝试 mock-s3 或 s3proxy
工具: Virtualbox, VMWare ...
直奔图形界面,或者参考 Vagrant tutorial https://github.com/cs-course/vagrant-tutorial
目的: 计划尝试 Openstack Swift 或 Ceph
使用容器简化部署,容器使用可参考 Docker tutorial https://github.com/cs-course/docker-tutorial
- 初学者:
- 选项 1: Minio, 最新版 https://minio.io/downloads.html。
- 实验性模拟服务程序:
- 选项 2: mock-s3,用Python重写fake-s3。需要Python 2.7。
- 选项 2.1: Python 3版(移植中,测试版) https://github.com/Zhan2012/mock-s3。
- 选项 3: s3proxy,为各类存储提供S3 API。预编译包猛击此处
- 选项 3.1: 自己用Java/Maven从源码构建
mvn package -Dmaven.test.skip=true
。
- 选项 3.1: 自己用Java/Maven从源码构建
- 选项 4: fake-s3,Amazon S3轻量级模仿。需要Ruby,首个S3克隆项目。
- 选项 5: s3mock,用Java/Scala实现S3模拟。需要用Java/SBT构建。
- 选项 6: S3Mock,可以放进Docker容器或者JUnit规则的S3模拟。需要用Java/SBT构建,需要Docker运行,由Adobe (c)推出。
- 选项 2: mock-s3,用Python重写fake-s3。需要Python 2.7。
- 企业级项目:
- 选项 7: Openstack Swift,开箱即用容器版: https://github.com/cs-course/openstack-swift-docker。
- 选项 8: Ceph,开箱即用容器版: https://github.com/ceph/ceph-container。
除初学用 选项1 之外,选项2,3 也提供免编译执行程序下载。
- 独立工具集:
- 选项 1: Minio Client https://docs.minio.io/docs/minio-client-quickstart-guide
- 选项 2: s3cmd https://github.com/s3tools/s3cmd
- 于Python环境中运行
pip install s3cmd
- 为 Minio 配置 https://docs.minio.io/docs/s3cmd-with-minio
- 于Python环境中运行
- 选项 3: aws-shell https://github.com/awslabs/aws-shell
- 于Python环境中运行
pip install aws-shell
- 为 Minio 配置 https://docs.minio.io/docs/aws-cli-with-minio
- 官方手册 https://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
- 于Python环境中运行
- 选项 4: osm https://github.com/appscode/osm
go get -u go get -u github.com/appscode/osm
- APIs:
- 选项 4: aws-sdk-java
- 选项 5: boto
选项 2 & 3 更具通用性,已广泛用于各类云存储服务。
- COSBench https://github.com/intel-cloud/cosbench
- S3 Bench https://github.com/igneous-systems/s3bench
- 安装
go get -u github.com/igneous-systems/s3bench
- 命令行范例
./s3bench -accessKey=hust -accessSecret=hust2019 -bucket=loadgen -endpoint=http://127.0.0.1:9000 -numClients=10 -numSamples=100 -objectNamePrefix=loadgen -objectSize=1024
- 安装
安装使用过程中的各种"坑" 经验分享https://github.com/cs-course/obs-tutorial/wiki 问题报告https://github.com/cs-course/obs-tutorial/issues
- COSBench: cloud object storage benchmark https://dl.acm.org/citation.cfm?doid=2479871.2479900
- COSBench: A Benchmark Tool for Cloud Object Storage Services http://www.cs.cmu.edu/~qingzhen/files/cosbench_cloud12.pdf
- COSBench: A benchmark tool for Cloud Storage https://www.snia.org/sites/default/files/files2/files2/SDC2013/presentations/Cloud/YaguangWang__COSBench_Final.pdf
在计算机领域中,create, read, update, and delete (缩写为 CRUD) 是访问持久存储的4项基本操作。
Operation | SQL | HTTP |
---|---|---|
Create | INSERT | PUT / POST |
Read (Retrieve) | SELECT | GET |
Update (Modify) | UPDATE | PUT / POST / PATCH |
Delete (Destroy) | DELETE | DELETE |
指标:吞吐率Throughput、延迟Latency,以及环境参数:对象尺寸object size、并发性、服务器数量。
建议思考:
- 对象尺寸如何影响性能?
- 对于熟悉的某类应用,根据其数据访问特性,怎样适配对象存储最合适?
- I/O 延迟背后的关键影响要素?
- 首先要采集全面的 I/O 延迟观测数据。
- 百分位延迟观测需使用s3bench,然后即可分析尾延迟影响因素。
- 如果客户端爆满将怎样?
- 测试项为何出现 'fail'? (不是 terminate)
- 横向扩展系统 (Scaling Out) 效果如何 (向系统中追加更多存储服务器)?
不限于上述内容,鼓励更丰富思考。
- 前述实验如何自己编程实现 (不借助于 COSBench、s3bench)?
- 把 Python 当作自己的实验台
- Jupyter Notebook Tutorial https://github.com/cs-course/jupyter-tutorial
- 对象存储方面 SNIA 最新博文 http://sniablog.org/category/object-storage/
- 企业级 对象存储比较
- 用Go语言自制对象存储系统
Zhan.Shi @ 2017, 2018, 2019