From b91966709b0d4aaca6303deb2dc8a84301815953 Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Wed, 3 Nov 2021 20:47:29 +0800 Subject: [PATCH 1/4] feat(dockerfile): add docker file f --- Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..cdf0905 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM ubuntu:18.04 + +WORKDIR /home/src/gitee.com/wheat-os/wheat-cache +ADD . /home/src/gitee.com/wheat-os/wheat-cache + +RUN mkdir /etc/wheat-cache +RUN mv /home/src/gitee.com/wheat-os/wheat-cache/conf/wheat-cache.yaml /etc/wheat-cache/ From c867665b603062fb22bf12a825239c2665da62c2 Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Wed, 3 Nov 2021 22:40:28 +0800 Subject: [PATCH 2/4] feat(conf): update conf --- conf/wheat-cache.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/wheat-cache.yaml b/conf/wheat-cache.yaml index 51687c3..86657bc 100644 --- a/conf/wheat-cache.yaml +++ b/conf/wheat-cache.yaml @@ -3,7 +3,7 @@ version: 'v1.0' env: 'dev' storage: - host: '127.0.0.1' + host: '0.0.0.0' port: 5890 timeOut: 2 # second @@ -52,7 +52,7 @@ plugins-control: plugins-infos-context: ["mock-plugins"] gateway: - host: '127.0.0.1' + host: '0.0.0.0' port: 5891 target: ["127.0.0.1:5890"] From 2f46dfaa2ea535e9a133ce787f853a1140cf873e Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Wed, 3 Nov 2021 22:40:46 +0800 Subject: [PATCH 3/4] feat(icon): add icon --- doc/_icon/alf.svg | 2 ++ doc/_icon/cache.svg | 2 ++ doc/_icon/version.svg | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 doc/_icon/alf.svg create mode 100644 doc/_icon/cache.svg create mode 100644 doc/_icon/version.svg diff --git a/doc/_icon/alf.svg b/doc/_icon/alf.svg new file mode 100644 index 0000000..6a41fec --- /dev/null +++ b/doc/_icon/alf.svg @@ -0,0 +1,2 @@ + +license: AFL3.0licenseAFL3.0 \ No newline at end of file diff --git a/doc/_icon/cache.svg b/doc/_icon/cache.svg new file mode 100644 index 0000000..f3874e2 --- /dev/null +++ b/doc/_icon/cache.svg @@ -0,0 +1,2 @@ + +Wheat: CacheWheatCache \ No newline at end of file diff --git a/doc/_icon/version.svg b/doc/_icon/version.svg new file mode 100644 index 0000000..2f7a67b --- /dev/null +++ b/doc/_icon/version.svg @@ -0,0 +1,2 @@ + +version: v1.1versionv1.1 \ No newline at end of file From 0f2b73e93253605e137244fb6d4a22c75f2d5fef Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Wed, 3 Nov 2021 23:59:21 +0800 Subject: [PATCH 4/4] doc(readme): add v1 readme --- README.md | 146 ++++++++++++++++++++++++++++++------- doc/_icon/architecture.svg | 3 + 2 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 doc/_icon/architecture.svg diff --git a/README.md b/README.md index be7325a..f0e6b55 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,127 @@ # WheatCache +![](./doc/_icon/version.svg) ![](./doc/_icon/cache.svg) ![](./doc/_icon/alf.svg) -#### 介绍 -WheatCache, 一个通用的分布式LRU缓存 +### 介绍 +WheatCache, 是一个使用使用 go 语言开发,采用 grpc 服务调用的高性能,高扩展性的分布式缓存。 -#### 软件架构 -软件架构说明 +### 功能特性 +- 采用 grpc 服务调用,多语言客户端支持 +- 基于事件驱动模型的多连接,单线程 lru +- 基于 skiplist 的高效 TTL 机制 +- 分步 GC 高 IO 处理时允许继续使用失效缓存,防止雪崩 +- 集群,哨兵,主从备份的分布式机制 (目前只实现集群) +- 可选择的 强一致性(AC), 或高可用(AP)方案 (目前只实现 AP) +- 可单步回滚的事务支持 +- 快速 Api 扩展工具 +- 支持消息推送的插件扩展,基于 git 的插件安装工具 +- AOF,RDB 持久化方案 (目前只实现 AOF) -#### 安装教程 +### 软件架构 +![架构图](./doc/_icon/architecture.svg) -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +1. 应用层使用 一元 RPC 构建,参考 protobuf 构建其他平台客户端。 +2. 网关层主要实现,集群的转发,主从模式的转发,协议的转换,storage 状态监听 +3. 服务层为 存储结构的具体实现, 主要为 storage service,dao,structure,详细可以见开发者文档 +4. lru 层 负责具体的存储,过期机制,清理机制 +5. 消息中间件层,负责推送 storage,gateway 产生的消息到插件。 -#### 特技 +### 安装教程 +- 使用 docker 快速体验 +```sh +# 拉取 docker 镜像 +docker pull registry.cn-hangzhou.aliyuncs.com/bandl/wheat-cache:v1.1 -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +# 启动 wheatCache storage 服务 +docker run -p 5890:5890 -itd registry.cn-hangzhou.aliyuncs.com/bandl/wheat-cache:v1.1 ./bin/storage +``` +- 使用 代码 构建项目(以 ubuntu 为例) +```sh +# 前置环境 go1.15+, python3 +sudo apt install python3-pip # 项目构建需要使用 python3 脚本 +pip3 install jinja2 +sudo apt install make + +# fork 代码 +git clone https://gitee.com/wheat-os/wheat-cache.git + +# 安装 mod 依赖 +cd wheat-cache +go mod tidy # tidy 失败请参考 https://goproxy.cn/ + +# 构建项目 +make install # 默认配置文件目录 /etc/wheat-cache/wheat-cache.yaml + +# 启动 storage +make storage + +# 启动 集群网关 +make gateway +``` + + +### 使用方法 +客户端安装 `go get gitee.com/wheat-os/wheat-cache` + +```go +func TestClient(t *testing.T) { + // middle.WithUnaryColonyClient 创建一个集群模式的客户端,直接访问 storage 可以不使用 + cli, err := NewWheatClient("127.0.0.1:5890", middle.WithUnaryColonyClient) + require.NoError(t, err) + ctx := context.Background() + + bKey := proto.NewBaseKey("apple") + resp, err := cli.Set(ctx, &proto.SetRequest{ + Key: bKey, + Val: "yyyy", + }) + + require.NoError(t, err) + require.Equal(t, resp.Result, "yyyy") + + getResp, err := cli.Get(ctx, &proto.GetRequest{ + Key: bKey, + }) + require.NoError(t, err) + require.Equal(t, getResp.Result, "yyyy") +} +``` + + ### v1.1 开发规划 + +- 服务层 + - [x] 基础类型 + - [x] listx + - [x] stringx + - [ ] hashx + - [ ] setx + - [ ] zsetx + - [ ] channelx +- storage 层 + - [x] log 消息推送 + - [x] 服务自动生成工具 + - [ ] storage 消息推送 +- Lru 层 + - [x] 基于单线程事件驱动的 lru + - [ ] 分段锁多线程 LRU + - [x] AOF 持久化方案 + - [ ] RDB 持久化方案 + - [x] TTL 机制 + - [x] 清理机制 + - [ ] lru 消息推送 +- 网关层 + - [x] 基于 key 一致性 hash 的集群 transport + - [ ] 基于配置的主从 transpoart + - [ ] 基于配置的备份 transpoart +- 中间件以及插件层 + - [x] 推送中间件 + - [x] 事件驱动 v2 + - [x] mock 以及性能分析插件 + - [ ] 系统监控插件 + - [ ] 备份恢复插件 + - [ ] 基于 git 的插件管理工具 + + +### 开发者文档 +更新中 diff --git a/doc/_icon/architecture.svg b/doc/_icon/architecture.svg new file mode 100644 index 0000000..db8b1f6 --- /dev/null +++ b/doc/_icon/architecture.svg @@ -0,0 +1,3 @@ + + +应用层
proto 自动生成客户端
proto 自动生成客户端
集群模式客户端中间件
集群模式客户端中间件
哨兵模式客户端中间件
哨兵模式客户端中间件
网关层集群模式
一致性 hash
一致性 hash
心跳检查机制
心跳检查机制
动态节点,稳定节点分析
动态节点,稳定节点分析
哨兵模式
主从转发
主从转发
心跳检查
心跳检查
storage 发现
storage 发现
缓存服务层
stringx
stringx
listx
listx
hashx
hashx
setx
setx
zsetx
zsetx
channelx
channelx
Lru 存储层
Lru Map
Lru Map
毫秒级别过期机制
毫秒级别过期机制
单线程工作函数
单线程工作函数
持久化
持久化
插件以及消息层middleware 推送消息类型
log 消息
log 消息
Lru 清理消息
Lru 清理消息
Lru 过期消息
Lru 过期消息
storage 节点消息
storage 节点消息
...
...
系统或者 第三方插件
可视化监控
可视化监控
2 级缓存
2 级缓存
集群节点更新
集群节点更新
其他第 3 方插件
其他第 3 方插件
消息推送中间件
消息推送中间件
Viewer does not support full SVG 1.1
\ No newline at end of file