跳到主要内容

从0到1构建Curvine集群&FIO测试

· 阅读需 2 分钟
Founder of Curvine
Barry
Senior Engineer

如何快速上手试试Curvine的效果?这篇文章将介绍如何从0到1构建一个本地小集群,让大家快速上手。

github: https://github.com/CurvineIO/curvine


1. 下载代码:

git clone https://github.com/CurvineIO/curvine.git

2.环境要求:

GCC: version 10 or later 
Rust: version 1.86 or later
Protobuf: version 3.x
Maven: version 3.8 or later
LLVM: version 12 or later
FUSE: libfuse2 or libfuse3 development packages
JDK: version 1.8 or later
npm: version 9 or later
Python: version 3.7 or later

参考

3. 编译&&运行

make all

为方便大家编译,我们做编译脚本里会提前做依赖组件检查,对于MacOS系统的用户,暂时会选择跳过FUSE的编译(目前没适配mac系统)。 感兴趣的朋友可以考虑使用macfuse项目,进行适配。

make-checkenv

4.编译完成,启动本地集群

cd build/dist
./bin/restart-all.sh

启动成功后,执行report命令,检查是否成功:


bin/cv report

active_master: localhost:8995
journal_nodes: 1,localhost:8996
capacity: 233.5GB
available: 105.0GB (44.99%)
fs_used: 0.0B (0.00%)
non_fs_used: 128.4GB
live_worker_num: 1
lost_worker_num: 0
inode_num: 0
block_num: 0
live_worker_list: 192.168.xxx.xxx:8997,105.0GB/233.5GB (44.99%)
lost_worker_list:

5. 查看本地master和worker的webui

http://localhost:9000/
http://localhost:9001/

webui

6. FIO测试

测试环境:阿里云 ecs.r8a.8xlarge 机型 master/woker/client 各一台

  • 32 核(vCPU)
  • 256 GiB 内存
  • 系统盘 和 数据盘 均为:ESSD 云盘 500 GiB(7800 IOPS)
  • 最大带宽:25Gb

准备数据(在worker机器):

bin/curvine-bench.sh fuse.write

fio顺序读测试,8并发

fio -iodepth=1 -rw=read -ioengine=libaio -bs=256k
-group_reporting -size=200gb
-filename=/curvine-fuse/fs-bench/0
-name=read_test --readonly -direct=1 --runtime=60
-numjobs=8

fio随机读测试,8并发


fio -iodepth=1 -rw=randread -ioengine=libaio -bs=256k
-group_reporting -size=200gb
-filename=/curvine-fuse/fs-bench/0
-name=read_test --readonly -direct=1 --runtime=60
-numjobs=8

最后,视频演示一下,做一下fio测试的效果:

高性能分布式缓存Curvine,低调开源

· 阅读需 6 分钟
Founder of Curvine

Curvine是什么

 Curvine是一套分布式缓存系统,基于Rust实现,具备 高并发,高吞吐,低延迟,资源消耗低等特点。不同于Redis、TiKV等KV缓存,Curvine只提供文件缓存能力。Curvine不是存储系统,只提供缓存能力,数据持久化还是需要底层文件或者对象存储系统支撑。

解决什么问题

  1. 大规模数据IO性能瓶颈
  2. 单机缓存系统容量瓶颈

实际应用中,有哪些场景适用Curvine加速?

Curvine Application Scenarios.

Fig. 1:Curvine Application Scenarios.

如上图所示,Curvine适用于以下五大场景:

  1. 大数据shuffle 中间数据加速
  2. 大数据热表数据缓存加速
  3. AI训练数据缓存加速
  4. 模型文件分发缓存加速
  5. 多云数据缓存,解决跨云专线性能瓶颈

以上场景总结,只是抛砖引玉,通俗的理解,Curvine其实就是解决: 日益增长的计算性能需求与分布式存储系统的IO能力瓶颈的矛盾。

性能表现

我们从以下几个方面展示性能和资源使用情况:

1. 元数据操作性能

Operation TypeCurvine (QPS)Juicefs (QPS)oss (QPS)
create19,98516,0002,000
open60,37650,0003,900
rename43,00921,000200
delete39,01341,0001,900

: 对比数据选取的并发度均为40

详细结果https://curvineio.github.io/docs/Benchmark/meta/

业界类似产品测试数据https://juicefs.com/zh-cn/blog/engineering/meta-perf-hdfs-oss-jfs

2. 数据读写性能

相同硬件条件下,测试对比Alluxio性能:

● 256k顺序读

Thread countCurvine Open Source Edition (GiB/s)Throughput of Open Source Alluxio (GiB/s)
12.20.6
23.71.1
46.82.3
88.94.5
169.27.9
329.58.8
649.2N/A
1289.2N/A

● 256k随机读

Thread countCurvine Open Source Edition (GiB/s)Throughput of Open Source Alluxio (GiB/s)
10.30.0
20.70.1
41.40.1
82.80.2
165.20.4
327.80.3
648.7N/A
1289.0N/A

  Alluxio官网数据披露:https://www.alluxio.com.cn/alluxio-enterprise-vs-open-source/

3. 资源消耗情况

  得益于Rust语言的特性,我们在大数据shuffle加速场景下,对比线上使用Curvine和Alluxio资源消耗情况,内存降低90%+,cpu降低50%+。

架构简介

 Curvine架构设计理念:简单、极致、通用。

Curvine Architecture Diagram.

Fig. 2:Curvine Application Scenarios.

简单:简单轻量,缓存服务只有两个角色:master、worker。非性能瓶颈的模块,尽量复用开源或者已有的技术,代码最大可能轻量化。

极致:对性能影响较大的关键节点:底层rpc通信架构、Fuse 实现性能等关键组件,自主设计实现,以极致性能优化思维构建。

通用::兼容多种现有接入模式,底层存储兼容主流分布式文件和对象存储做到足够通用,易用。

关于开源

 我们在内部大数据高并发高吞吐场景下使用Curvine加速数据IO,取得比较大的收益。希望吸引外部的伙伴共同建设,一起加速基础设施向Rust转变。  https://github.com/curvineio/curvine

  由OPPO大数据提供支持。