!86 添加 docker 安装,以及描述

Merge pull request !86 from bandl/docker-build
This commit is contained in:
bandl 2021-11-03 16:03:03 +00:00 committed by Gitee
commit b6dedfa384
7 changed files with 136 additions and 30 deletions

7
Dockerfile Normal file
View File

@ -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/

146
README.md
View File

@ -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 的插件安装工具
- AOFRDB 持久化方案 (目前只实现 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 servicedaostructure详细可以见开发者文档
4. lru 层 负责具体的存储,过期机制,清理机制
5. 消息中间件层,负责推送 storagegateway 产生的消息到插件。
#### 特技
### 安装教程
- 使用 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 的插件管理工具
### 开发者文档
更新中

View File

@ -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"]

2
doc/_icon/alf.svg Normal file
View File

@ -0,0 +1,2 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="94" height="20" role="img" aria-label="license: AFL3.0"><title>license: AFL3.0</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="94" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="47" height="20" fill="#555"/><rect x="47" width="47" height="20" fill="#97ca00"/><rect width="94" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="245" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">license</text><text x="245" y="140" transform="scale(.1)" fill="#fff" textLength="370">license</text><text aria-hidden="true" x="695" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="370">AFL3.0</text><text x="695" y="140" transform="scale(.1)" fill="#fff" textLength="370">AFL3.0</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

2
doc/_icon/cache.svg Normal file
View File

@ -0,0 +1,2 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="88" height="20" role="img" aria-label="Wheat: Cache"><title>Wheat: Cache</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="88" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="45" height="20" fill="#555"/><rect x="45" width="43" height="20" fill="#a4a61d"/><rect width="88" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="235" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="350">Wheat</text><text x="235" y="140" transform="scale(.1)" fill="#fff" textLength="350">Wheat</text><text aria-hidden="true" x="655" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="330">Cache</text><text x="655" y="140" transform="scale(.1)" fill="#fff" textLength="330">Cache</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

2
doc/_icon/version.svg Normal file
View File

@ -0,0 +1,2 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20" role="img" aria-label="version: v1.1"><title>version: v1.1</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="51" height="20" fill="#555"/><rect x="51" width="35" height="20" fill="#007ec6"/><rect width="86" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="265" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="410">version</text><text x="265" y="140" transform="scale(.1)" fill="#fff" textLength="410">version</text><text aria-hidden="true" x="675" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">v1.1</text><text x="675" y="140" transform="scale(.1)" fill="#fff" textLength="250">v1.1</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB