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 @@
+
+
\ 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 @@
+
+
\ 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 @@
+
+
\ 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 @@
+
+
+
\ No newline at end of file