/grape

像葡萄一样的多集群微服架构

Primary LanguageGo

Go边缘微服集群架构

  • 一串葡萄就是一个微服集群,当微服太多无法容下更多的微服时,就孕育另一串葡萄。这就是边缘服务架构。Grape架构。
  • 企业的组织架构影响技术架构。此微服架构适合10人以内的开发团队。项目的产出是一个个Docker镜像。
  • 通过此项目练手,加深对微服架构的理解。

一、项目架构

1、项目初衷

  • 用了1年(2019年)时间思考,怎么做出【适用、简单、演化】的微服架构,【可读、可维护、可扩展】的微服。 通向罗马的道路千万条,参考了大量大牛的**,我选择了一条,进行尝试,演化。 为了快速演示,架构采用了原型方式,mock数据,减少复杂度。程序员喜欢造轮子,忍不住也想造个轮子。
  • 随着数据量的增大,单一数据中心维护的成本成指数增长,架构的复杂度,开发的团队人数也增长迅猛; 有没一种方式,既能可扩容支持大数据,开发、维护成本尽可能没那么高?有,就是边缘微服集群。这个项目就是为它而生。
  • 想弄一个未来的微服架构。同时也符合未来的serverless。

2、架构图

详情:doc/项目架构.md

区域信息(sv-region)

能定位用户是属于哪个区域服务集群。含各区域全量数据。

认证服务(auth-jwt)

用户通过各种方式登录后,付给它Token令牌去访问资源,支持分端单点登录。

鉴权服务(auth-rbac)

正规的rbac鉴权。分角色,用户,权限。

网关(gateway-api)

统一对用户身份认证处理。统一入口。

配置中心(sv-config)

提供配置的数据接口;

日志服务(sv-log)

记录日志,统一记录;

AI相关接口服务器(sv-ai)

钱包(sv-money)

用户中心(sv-user)

通知服务(sv-notice)

MQ服务(sv-mq)

OSS文件管理(sv-oss)

微信/小程序接口(api-wx)

APP接口(api-app)

CMS接口(api-cms)

网站接口(api-www)

3、项目技术栈

golang,mysql,redis,mongo,jwt,docker, kubernetes, istio, mq, devOps 。

二、服务监控

1、prometheus

prometheus

2、grafana

grafana

3、全链路跟踪

全链路跟踪

三、发布CI/CD

1、gitlab CI/CD

ci-cd文档

2. gitOps

四、测试

1、本地开发

## 开发的go版本
go1.13.3
## 入口服务
go run app/gateway-api/main.go
curl http://localhost:7001
# host配置
# 查看 doc/host.md 

2、docker-compose环境

cd deploy
./deploy-docker.sh
# 详情配置
deploy/docker/mn/docker-compose.yml

3、minikube环境

## 先要把当前的k8s config 设置为minikube 。
cd deploy
./deploy-minikube.sh

4、阿里云Kubernetes环境

5、Istio环境

五、代码开发

1、Monorepo代码管理方式

Monorepo 是一种单库存储代码的方式。

monorepo详细

2、代码规范

代码规范详细

3、代码测试

代码测试

4、性能要求

性能要求

5、代码编译构建工具Bazel

Bazel 是一个很厉害的开源构建工具,我还没有领略它的奥秘,还在学习中。现在还是通过shell 脚本构建。

查看doc/Bazel.md文档

六、安全

详情

1、数据库存储

2、用户敏感数据

3、运营数据

七、可供参考微服务案例项目

八、更新日志

  • 2020-5-3 编写文档目录

更多日志

九、异常/注意

  • 要配置自己的docker账号(deploy/base/MakeDockerConfig.mk)
  • 配置 pkg/config/private***.go.example 改为 private***.go