栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

matrixkv 初体验

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

matrixkv 初体验

This is a distributed kv project to demonstrate how to use matrixcube.

matrixkv一个分布式 KV 存储样例,用于展示如何使用 matrixcube构建分布式系统。

前置条件
  • docker

是的,只需要docker。matrixkv 官方例子基于 docker 运行,编译运行都在docker 中进行。笔者使用的是基于 WSL2 backend 的 Docker Desktop For Windows。

如何编译 git clone
git clone https://github.com/matrixorigin/matrixkv

从 github clone 代码到本地。

Dockerfile
RUN go env -w GOPROXY=https://goproxy.cn,direct


为了加速下载 go 的三方库,在 Dockerfile 中设置 GOPROXY。

Makefile

笔者在编译过程中,遇到了 go vendor 报错的问题,社区有小伙伴提出了解决方案。这里提供另一种比较简单的方式,把 Makefile 中的 matrixkv label 下的 go 编译选项的 -mode=vendor 去掉即可。

.PHONY: matrixkv
matrixkv: dist_dir; $(info ======== compiled matrixkv binary)
	env GOOS=$(GOOS) go build -o $(DIST_DIR)matrixkv $(LD_FLAGS) $(ROOT_DIR)cmd/*.go

编译运行

默认的部署形态是4个节点,3个 Prophet 节点,1个数据节点。
非常简单,just do it

make docker
docker-compose up


基础功能

KV 存储基本的 put、get、delete 操作是必须要体验一下的。笔者先 put 了k1为 v1,然后 get 确认 put 成功。然后 delete v1,最后 get 确认 delete 成功。

shard 分裂

与常见的分布式系统设计一样,matrixkv 也会把数据按照 shard 进行分片,如此可实现所谓 scalability。每个 shard 的大小由启动参数 --shard-capacity 确定,笔者使用了默认值1024。

事先准备了2个接近 3KB 的文件,格式为 {key: “xx”, “value”: “yy”},value 的大小超过 shard-capacity,这样方便我们观察 matrixkv 的 shard 分裂过程。
首先我们确认一下现在的 shard 数量,可以看到有 id 为4、6和8共3个 shard。

随后,尝试写入大 key 并验证写入结果。

等待一段时间后,再次查询集群的 shard 数量,可以看到 shard 已经变为有 id 为11、12、13、14、15、16和17共7个 shard。需要说明的是,此处需要等待一定的时间(1min左右)。笔者确认了一下 matrixcube 的逻辑,shard 是否需要分裂是由定时任务来检查的,检查周期由 ShardSplitCheckDuration 选项控制,默认值为 1min。

节点 failover

分布式系统还有个特点就是 high reliability。matrixkv 在节点宕机后,为了保证3副本,matrixkv 会自动将数据复制一份到可用的未分布副本的机器上。
笔者中止 node3 容器进程,随后观察到本来属于 node3 的 shard 被移动都了 node1,而且系统依然可以对外提供服务,保证了可用性。

参考文献

MatrixCube揭秘102——300行实现的完整分布式存储系统MatrixKV

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号