Go to file
yfxu 16a2141089 brpc: Fix brpc __const__ attribute problem.
replace it with __used__, so brpc can be compiled on
high version glibc.
2022-04-28 16:14:30 +08:00
.github Update bug_report.md 2022-04-26 10:35:24 +08:00
conf curve-client: add enable logging option 2022-04-25 13:45:34 +08:00
coverage 【chunkserver】split read and write thread in concurrentApplyModel 2020-09-23 12:27:10 +08:00
curve-ansible ansible: fix auto map script 2022-03-10 20:26:25 +08:00
curve-chunkserver/DEBIAN ansible: fix chunkserver_ctl.sh 2021-07-22 09:48:14 +08:00
curve-mds/DEBIAN ansible: fix some issues 2021-06-10 20:47:50 +08:00
curve-monitor/DEBIAN 添加版本信息 2019-12-21 20:56:08 +08:00
curve-nginx/DEBIAN add package nginx 2020-04-16 17:04:53 +08:00
curve-sdk/DEBIAN fix file header for *.sh and *.py 2020-07-25 16:02:51 +08:00
curve-snapshotcloneserver/DEBIAN ansible: fix some issues 2021-06-10 20:47:50 +08:00
curve-snapshotcloneserver-nginx add License head for all files 2020-07-13 15:20:43 +08:00
curve-tools/DEBIAN move curve-snapshotcloneserver outside 2020-07-15 18:31:46 +08:00
curvefs curvefs: add switch for fuse splice 2022-04-28 09:39:09 +08:00
curvefs_python chunkserver: fix crc issues 2021-07-09 10:21:27 +08:00
curvesnapshot_python optimize curve-client 2020-09-23 22:20:02 +08:00
deploy/local chunkserver: modify write op return without synchronization 2022-03-09 18:41:43 +08:00
docker curvebs/dockerfile: fixed remove unuseful file. 2022-04-21 17:09:15 +08:00
docs curvefs/docs: add curvefs client unified cache 2022-04-25 14:54:57 +08:00
include curvefs: support curvebs as data backend 2022-04-08 15:38:35 +08:00
k8s Improve the k8s mount curve script 2021-01-20 16:09:37 +08:00
monitor fix grafana dashboard config path and an error doc link 2022-02-17 09:41:09 +08:00
nbd ansible: fix auto map script 2022-03-10 20:26:25 +08:00
nebd fixes typos 2022-02-28 14:14:53 +08:00
proto Merge branch 'fs' 2022-01-12 23:37:43 +08:00
robot Update deploy.py 2022-04-19 10:51:47 +08:00
src curve-client: add enable logging option 2022-04-25 13:45:34 +08:00
test curvebs snapshotcloneserver: fix bug of report GetChunkIndexData error when exist pendding snapshottask 2022-04-21 11:02:23 +08:00
thirdparties brpc: Fix brpc __const__ attribute problem. 2022-04-28 16:14:30 +08:00
tools Update check_coverage.sh 2022-03-09 15:56:07 +08:00
util upgrade bazel 2022-04-06 09:44:35 +08:00
.bazelrc upgrade bazel 2022-04-06 09:44:35 +08:00
.bazelversion upgrade bazel 2022-04-06 09:44:35 +08:00
.gitignore curvefs/metaserver: speed up getting inode by padding inode's s3chunkinfo 2022-04-25 13:39:48 +08:00
.gitmodules change gitsubmodule to bazel dependency 2019-10-12 14:02:37 +08:00
BUILD curve: add compile warning/error options 2021-11-22 22:04:55 +08:00
CHANGELOG-1.0.md curve: update changelog 2021-11-22 19:49:31 +08:00
CHANGELOG-1.1.md Add performance test data 2020-10-19 15:46:40 +08:00
CHANGELOG-1.2.md curve: update changelog 2021-11-22 19:49:31 +08:00
CHANGELOG-1.3.md docs: update change log for tag v1.3-beta2 2021-07-14 13:55:31 +08:00
CHANGELOG-2.0.md doc: add changelog-2.0.md 2022-02-15 13:55:19 +08:00
CHANGELOG-2.1.md doc: add changelog-2.1.md 2022-03-22 13:49:07 +08:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-03-09 17:18:42 +08:00
CONTRIBUTING.md Update CONTRIBUTING.md 2020-08-13 10:47:13 +08:00
Dockerfile Update build_and_run.md 2020-07-24 16:19:13 +08:00
LICENSE fix compile/unittests errors and add unittests branch coverage scripts 2022-01-13 10:14:13 +08:00
LICENSE_APACHE add License head for all files 2020-07-13 15:20:43 +08:00
LICENSE_GPL add License head for all files 2020-07-13 15:20:43 +08:00
LICENSE_GPLv3 fix compile/unittests errors and add unittests branch coverage scripts 2022-01-13 10:14:13 +08:00
LICENSE_LGPL add License head for all files 2020-07-13 15:20:43 +08:00
MAINTAINERS Create MAINTAINERS 2021-03-09 17:36:47 +08:00
Makefile upgrade bazel 2022-04-06 09:44:35 +08:00
README.md docs: update README about Curve arch and docs about CurveFS 2022-02-28 17:45:12 +08:00
README_cn.md docs: update README about Curve arch and docs about CurveFS 2022-02-28 17:45:12 +08:00
WORKSPACE brpc: Fix brpc __const__ attribute problem. 2022-04-28 16:14:30 +08:00
build.sh upgrade bazel 2022-04-06 09:44:35 +08:00
buildfs.sh curve: add compile warning/error options 2021-11-22 22:04:55 +08:00
common.bzl fix compile error in gcc-4.8 2020-07-29 15:25:52 +08:00
copts.bzl upgrade bazel 2022-04-06 09:44:35 +08:00
localut.sh curvefs/metaserver: now we support rocksdb storage. 2022-04-10 21:17:59 +08:00
mk-deb.sh make packages include libnebd.h. 2021-11-15 09:05:42 +08:00
mk-tar.sh curve-nbd: change auto mount service to systemd 2021-11-19 10:00:31 +08:00
replace-curve-repo.sh upgrade bazel 2022-04-06 09:44:35 +08:00
startfs.sh change 'fuse_client' to 'curve-fuse' 2021-10-11 18:53:19 +08:00
ut.sh curvefs/metaserver: now we support rocksdb storage. 2022-04-10 21:17:59 +08:00

README.md

中文版

CURVE

Docs Releases LICENSE

Curve is a distributed storage system designed and developed by NetEase, featured with high performance, easy operation and cloud native. Curve is compose of CurveBS(Curve Block Storage) and CurveFS(Curve FileSystem). CurveBS supports snapshot, clone, and recover, also supports virtual machines with qemu and physical machine with nbd. CurveFS supports POSIX based on Fuse.

Curve Architecture

The architecture overview of Curve is as follows:

Curve supports deployment in private cloud and public cloud environment, and can also be used in hybrid cloud. The deployment architecture in private cloud environment is as follows:

The CurveFS shared file storage system can be elastically scaled to public cloud storage, which can provide users with greater capacity elasticity, lower costs, and better performance experience:

Curve Block Service vs Ceph Block Device

Curve: v1.2.0

Ceph: L/N

Performance

Curve random read and write performance far exceeds Ceph in the block storage scenario.

Environment3 replicas on a 6-node cluster, each node has 20xSATA SSD, 2xE5-2660 v4 and 256GB memory.

Single Vol

Multi Vols

Stability

The stability of the common abnormal Curve is better than that of Ceph in the block storage scenario.

Fault Case One Disk Failure Slow Disk Detect One Server Failure Server Suspend Animation
Ceph jitter 7s Continuous io jitter jitter 7s unrecoverable
Curve jitter 4s no effect jitter 4s jitter 4s

Ops

Curve ops is more friendly than Curve in the block storage scenario.

Ops scenarios Upgrade clients Balance
Ceph do not support live upgrade via plug-in with IO influence
Curve support live upgrade with second jitter auto with no influence on IO

Design Documentation

Quick Start of CurveBS

In order to improve the operation and maintenance convenience of Curve, we designed and developed the CurveAdm project, which is mainly used for deploying and managing Curve clusters. Currently, it supports the deployment of CurveBS & CurveFS (scaleout, upgrade and other functions are under development), please refer to the CurveAdm User Manual for related documentation, and install the CurveAdm tool according to the manual before deploying the Curve cluster.

Deploy an all-in-one environment (to try how CURVE works)

Please refer to the CurveBS cluster deployment steps in the CurveAdm User Manual , for the single-machine experience environment, please use the template about "cluster topology file for single-machine deployment".

Deploy on single machine - deprecated method

Deploy multi-machine cluster (try it in production environment)

Please refer to the CurveBS cluster deployment steps in the CurveAdm User Manual , please use the template about "cluster topology file for multi-machine deployment".

Deploy on multiple machines - deprecated method

curve_ops_tool introduction

curve_ops_tool introduction

Quick Start of CurveFS

In order to improve the operation and maintenance convenience of Curve, we designed and developed the CurveAdm project, which is mainly used for deploying and managing Curve clusters. Currently, it supports the deployment of CurveBS & CurveFS (scaleout, upgrade and other functions are under development), please refer to the CurveAdm User Manual for related documentation, and install the CurveAdm tool according to the manual before deploying the Curve cluster.

Detail for deploying CurveFS cluster: CurveFS deployment

curvefs_tool introduction

curvefs_tool introduction

For Developers

Deploy build and development environment

development environment deployment

Compile test cases and run

test cases compiling and running

FIO curve block storage engine

Fio curve engine is added, you can clone https://github.com/opencurve/fio and compile the fio tool with our engine(depend on nebd lib), fio command line example: ./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

Coding style guides

CURVE is coded following Google C++ Style Guide strictly. Please follow this guideline if you're trying to contribute your codes.

Code coverage requirement

  1. Unit tests: Incremental line coverage ≥ 80%, incremental branch coverage ≥ 70%
  2. Integration tests: Measure together with unit tests, and should fulfill the same requirement
  3. Exception tests: Not required yet

Other processes

After finishing the development of your code, you should submit a pull request to master branch of CURVE and fill out a pull request template. The pull request will trigger the CI automatically, and the code will only be merged after passing the CI and being reviewed. The Jenkins username and password of CI is netease/netease. If the CI fails to run, you can login to the Jenkins platform to view the reason for the failure.

For more detail, please refer to CONTRIBUTING.

Release Cycle

  • CURVE release cycleHalf a year for major version, 1~2 months for minor version

  • Versioning format: We use a sequence of three digits and a suffix (x.y.z{-suffix}), x is the major version, y is the minor version, and z is for bugfix. The suffix is for distinguishing beta (-beta), RC (-rc) and GA version (without any suffix). Major version x will increase 1 every half year, and y will increase every 1~2 months. After a version is released, number z will increase if there's any bugfix.

Branch

All the developments will be done under master branch. If there's any new version to establish, a new branch release-x.y will be pulled from the master, and the new version will be released from this branch.

Feedback & Contact

  • Github IssuesYou are sincerely welcomed to issue any bugs you came across or any suggestions through Github issues. If you have any question you can refer to our FAQ or join our user group for more details.
  • FAQFrequently asked question in our user group, and we'll keep working on it.
  • User groupWe use Wechat group currently.
  • Double Week Meetings: We have an online community meeting every two weeks which talk about what Curve is doing and planning to do. The time and links of the meeting are public in the user group and Double Week Meetings.