对象存储入门实践。
网络存储工业协会 SNIA 对象存储入门:
网络存储工业协会 Storage Networking Industry Association (SNIA) 是由来自于全球存储市场的众多企业组建的全球性非盈利组织。
Git tutorial https://github.com/cs-course/git-tutorial
- 发行版
- 用容器快速部署 (可选)
- 选项 3: Python Docker https://github.com/cs-course/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/cs-course/python-lab
同学期课程: Java语言程序设计, 2019-2020 第2学期
一些安装辅助脚本 https://github.com/ShiZhan/java-bundle (给喜欢自己琢磨的同学参考)
- 国内资料 https://studygolang.com/
- 墙外本体 https://golang.org/
- 经典书籍 https://github.com/Unknwon/the-way-to-go_ZH_CN
- 学习资料荟萃 https://github.com/uhub/awesome-go
- 安装Rust: https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html
- 学习Rust: https://kaisery.github.io/trpl-zh-cn/
目的: 计划无伤尝试 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模仿Amazon S3。
- 选项 2.1: 原始版需要Python 2.7 https://github.com/jserver/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模仿Amazon S3。
- 企业级项目:
- 选项 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 github.com/appscode/osm
- Windows版执行程序
- 编程 API:
- 选项 4: aws-sdk-java https://aws.amazon.com/cn/sdk-for-java/
- 选项 5: boto https://github.com/boto/boto3
- 选项 6: aws-sdk-rust https://github.com/awslabs/aws-sdk-rust
选项 1 提供可执行文件,开箱即用,选项 2 & 3 需要 Python 环境,选项 4 需要 go 环境,选项 6 需要 Rust 环境。
在计算机领域中,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 |
在实际应用里面试一试:zfile。
-
选项 1: S3 Bench https://github.com/igneous-systems/s3bench
-
安装
go get -u github.com/igneous-systems/s3bench
- Linux: 编译文件缺省位置在
~/go/bin/s3bench
- 预编译Windows执行程序,需下载放置在本资料库所在目录中。
- Linux: 编译文件缺省位置在
-
命令行范例
s3bench \ -accessKey=hust -accessSecret=hust_obs \ -endpoint=http://127.0.0.1:9000 \ -bucket=loadgen -objectNamePrefix=loadgen \ -numClients=10 -numSamples=100 -objectSize=1024
-
- 实际使用建议通过定制参数,设计循环结构实现批量测试,将结果重定向进文件用于后期分析。
- Windows版
-
-
选项 2: s3-benchmark https://github.com/wasabi-tech/s3-benchmark
-
安装 原始版本未更新依赖,且兼容性不足,可以用这个修补版本
go get -u github.com/chinglinwen/s3-benchmark
-
命令行范例
s3-benchmark \ -a hust -s hust_obs -u http://127.0.0.1:9000 -b wasabi-benchmark \ -d 3 -t 1 -z 1K Wasabi benchmark program v2.0 Parameters: url=http://127.0.0.1:9000, bucket=wasabi-benchmark, region=us-east-1, duration=3, threads=1, loops=1, size=1K Loop 1: PUT time 3.0 secs, objects = 191, speed = 63.5KB/sec, 63.5 operations/sec. Slowdowns = 0 Loop 1: GET time 0.4 secs, objects = 191, speed = 449.9KB/sec, 449.9 operations/sec. Slowdowns = 0 Loop 1: DELETE time 0.5 secs, 367.2 deletes/sec. Slowdowns = 0 result title: name-concurrency-size, uloadspeed, downloadspeed result csv: 127-1-1K,0.06,0.44
-
-
选项 3: COSBench https://github.com/intel-cloud/cosbench
- 指南 https://github.com/intel-cloud/cosbench/raw/master/COSBenchUserGuide.pdf
- 负载范例 https://github.com/cs-course/obs-tutorial/raw/master/workload-example.xml
- 其余范例 https://github.com/open-io/dockerfiles/tree/master/cosbench-openio/examples
- 文献
- 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
-
选项 4: s3-bench-rs https://github.com/SKTT1Ryze/s3-bench-rs 或者 https://github.com/cs-course/obs-tutorial-rs
指标:吞吐率Throughput、延迟Latency,以及环境参数:对象尺寸object size、并发性、服务器数量。
建议思考:
- 对象尺寸如何影响性能?
- 对于熟悉的某类应用,根据其数据访问特性,怎样适配对象存储最合适?
- I/O 延迟背后的关键影响要素?
- 首先要采集全面的 I/O 延迟观测数据。
- 百分位延迟观测需使用s3bench,然后即可分析尾延迟影响因素。
- 如果客户端爆满将怎样?
- 请求并发数如何同时影响延迟分布和吞吐率?如何保障服务质量?
- 横向扩展系统 (Scaling Out) 效果如何 (向系统中追加更多存储服务器)?
不限于上述内容,鼓励更丰富思考。
- 前述实验如何自己编程实现?
- 不借助于 COSBench、s3bench,使用aws-sdk或boto3。
- 把 Python 当作自己的实验台
- Jupyter Notebook Tutorial https://github.com/cs-course/jupyter-tutorial
- 对冲请求
- 关联请求
- 排队论
- 序列预测
- 安装使用过程中的各种"坑"
- 经验分享https://github.com/cs-course/obs-tutorial/wiki
- 问题报告https://github.com/cs-course/obs-tutorial/issues
- 对象存储方面 SNIA 最新博文 http://sniablog.org/category/object-storage/
- 企业级 对象存储比较
- 用Go语言自制对象存储系统
- Delimitrou C, Kozyrakis C. Amdahl’s Law for Tail Latency[J]. Commun. ACM, 2018, 61(8): 65–72.
- Dean J, Barroso L A. The Tail at Scale[J]. Commun. ACM, 2013, 56(2): 74–80.
Zhan.Shi @ 2017, 2018, 2019, 2020, 2021