# curve
**Repository Path**: recallg/curve
## Basic Information
- **Project Name**: curve
- **Description**: CURVE 是网易自主设计研发的高性能、高可用、高可靠分布式存储系统,具有非常良好的扩展性
- **Primary Language**: C/C++
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/curve
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 23
- **Created**: 2020-11-04
- **Last Updated**: 2022-08-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[English version](README.md)
# Curve
[](http://59.111.91.248:8080/job/curve_untest_job/HTML_20Report/)
[](http://59.111.91.248:8080/job/curve_failover_testjob/)
[](http://59.111.91.248:8080/job/curve_robot_job/)
[](http://59.111.91.248:8080/job/opencurve_multijob/lastBuild)
[](https://github.com/opencurve/curve/tree/master/docs)
[](https://github.com/opencurve/curve/releases)
[](https://github.com/opencurve/curve/blob/master/LICENSE)
[](https://bestpractices.coreinfrastructure.org/projects/6136)
Curve是一款高性能、易运维、云原生的开源分布式存储系统。可应用于主流的云原生基础设施平台:对接 OpenStack 平台为云主机提供高性能块存储服务;对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构。Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。
Curve已加入云原生计算基金会(CNCF)作为沙箱项目托管。
## Curve Architecture
Curve总体架构图:
Curve支持部署在私有云和公有云环境,也可以以混合云方式使用,私有云环境下的部署架构如下:
其中CurveFS共享文件存储系统可以弹性伸缩到公有云存储,可以为用户提供更大的容量弹性、更低的成本、更好的性能体验。
公有云环境下,用户可以部署CurveFS集群,用来替换云厂商提供的共享文件存储系统,并利用云盘进行加速,可极大的降低业务成本,其部署架构如下:
## Curve Block Service vs Ceph Block Device
Curve: v1.2.0
Ceph: L/N
### 性能
块存储场景下,Curve随机读写性能远优于Ceph。
测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本,使用nbd场景。
单卷场景:
多卷场景:
### 稳定性
块存储场景下,常见异常Curve的稳定性优于Ceph。
| 异常场景 | 单盘故障 | 慢盘 | 机器宕机 | 机器卡住 |
| :----: | :----: | :----: | :----: | :----: |
| Ceph | 抖动7s | 持续io抖动 | 抖动7s | 不可恢复 |
| Curve | 抖动4s | 无影响 | 抖动4s | 抖动4s |
### 运维
块存储场景下,Curve常见运维更友好。
| 运维场景 | 客户端升级 | 均衡 |
| :----: | :----: | :----: |
| Ceph | 不支持热升级 | 外部插件调整,影响业务IO |
| Curve | 支持热升级,秒级抖动 | 自动均衡,对业务IO无影响 |
## 设计文档
- 通过 [Curve概述](https://opencurve.github.io/) 可以了解 Curve 架构
- CurveBS相关文档
- [NEBD](docs/cn/nebd.md)
- [MDS](docs/cn/mds.md)
- [Chunkserver](docs/cn/chunkserver_design.md)
- [Snapshotcloneserver](docs/cn/snapshotcloneserver.md)
- [Curve质量体系介绍](docs/cn/quality.md)
- [Curve监控体系介绍](docs/cn/monitor.md)
- [Client](docs/cn/curve-client.md)
- [Client Python API](docs/cn/curve-client-python-api.md)
- CurveBS上层应用
- [对接k8s文档](docs/cn/k8s_csi_interface.md)
- CurveFS相关文档
- [架构设计](docs/cn/curvefs_architecture.md)
- [Client概要设计](docs/cn/curvefs-client-design.md)
- [元数据管理](docs/cn/curvefs-metaserver-overview.md)
- [数据缓存方案](https://github.com/opencurve/curve-meetup-slides/blob/main/CurveFS/Curve%E6%94%AF%E6%8C%81S3%20%E6%95%B0%E6%8D%AE%E7%BC%93%E5%AD%98%E6%96%B9%E6%A1%88.pdf)
- [空间分配方案](https://github.com/opencurve/curve-meetup-slides/blob/main/CurveFS/Curve%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%A9%BA%E9%97%B4%E5%88%86%E9%85%8D%E6%96%B9%E6%A1%88.pdf)
- [更多](https://github.com/opencurve/curve-meetup-slides/tree/main/CurveFS)
## CurveBS快速开始
为了提升 Curve 的运维便利性,我们设计开发了 [CurveAdm](https://github.com/opencurve/curveadm) 项目,其主要用于部署和管理 Curve 集群,目前已支持部署CurveBS & CurveFS(扩容、版本升级等更多功能正在开发中),相关使用文档请参考 [CurveAdm用户手册](https://github.com/opencurve/curveadm/wiki),并根据手册首先安装CurveAdm工具之后再进行Curve集群的部署。
### 部署All-in-one体验环境
请参考CurveAdm用户手册中[CurveBS集群部署步骤](https://github.com/opencurve/curveadm/wiki/curvebs-cluster-deployment),单机体验环境请使用“集群拓扑文件-单机部署”模板。
[单机部署 - 即将废弃方式](docs/cn/deploy.md#%E5%8D%95%E6%9C%BA%E9%83%A8%E7%BD%B2)
### 部署多机集群
请参考CurveAdm用户手册中[CurveBS集群部署步骤](https://github.com/opencurve/curveadm/wiki/curvebs-cluster-deployment),请使用“集群拓扑文件-多机部署”模板。
[多机部署 - 即将废弃方式](docs/cn/deploy.md#%E5%A4%9A%E6%9C%BA%E9%83%A8%E7%BD%B2)
### 命令行工具说明
[命令行工具说明](docs/cn/curve_ops_tool.md)
## CurveFS快速开始
为了提升 Curve 的运维便利性,我们设计开发了 [CurveAdm](https://github.com/opencurve/curveadm) 项目,其主要用于部署和管理 Curve 集群,目前已支持部署CurveBS & CurveFS,相关使用文档请参考 [CurveAdm用户手册](https://github.com/opencurve/curveadm/wiki),并根据手册首先安装CurveAdm工具之后再进行Curve集群的部署。
具体流程见:[CurveFS部署流程](https://github.com/opencurve/curveadm/wiki/curvefs-cluster-deployment)
### 命令行工具说明
[命令行工具说明](curvefs/src/tools#readme)
## 参与开发
如何参与 Curve 项目开发详见[Curve 开源社区指南](Community_Guidelines_cn.md)
### 部署编译开发环境
[编译开发环境搭建](docs/cn/build_and_run.md)
### 测试用例编译及运行
[测试用例编译及运行](docs/cn/build_and_run.md#%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E7%BC%96%E8%AF%91%E5%8F%8A%E6%89%A7%E8%A1%8C)
### FIO curve块存储引擎
fio的curve块存储引擎代码已经上传到 https://github.com/opencurve/fio ,请自行编译测试(依赖nebd库),fio命令行示例:`./fio --thread --rw=randwrite --bs=4k --ioengine=nebd --nebd=cbd:pool//pfstest_test_ --iodepth=10 --runtime=120 --numjobs=10 --time_based --group_reporting --name=curve-fio-test`
## 版本发布周期
- CURVE版本发布周期:大版本半年,小版本1~2个月
- 版本号规则:采用3段式版本号,x.y.z{-后缀},x是大版本,y是小版本,z是bugfix,后缀用来区beta版本(-beta)、rc版本(-rc)、和稳定版本(没有后缀)。每半年的大版本是指x增加1,每1~2个月的小版本是y增加1。正式版本发布之后,如果有bugfix是z增加1。
## 分支规则
所有的开发都在master分支开发,如果需要发布版本,从master拉取新的分支**release-x.y**。版本发布从release-x.y分支发布。
## 反馈及交流
- [Github Issues](https://github.com/openCURVE/CURVE/issues):欢迎提交BUG、建议,使用中如遇到问题可参考FAQ或加入我们的User group进行咨询
- [FAQ](https://github.com/openCURVE/CURVE/wiki/CURVE-FAQ):主要根据User group中常见问题整理,还在逐步完善中
- User group:当前为微信群,由于群人数过多,需要先添加以下个人微信,再邀请进群。
