starter-kit icon indicating copy to clipboard operation
starter-kit copied to clipboard

stack-rpc 快速开发包

Micro 快速开发工具包

项目进行中

本仓库旨在提供面向 stack-rpc 生产环境的快速开发包。

目录

  • 快速开始示例
    • 控制台示例
      • 以最常见的登录流程为例,实现一个场景简单,但包含微服务各种治理能力的示例
    • Hipster Shop示例
  • 架构设计
  • 目录结构
  • 目标功能
  • 开发环境
  • 部署环境
  • 参与贡献

架构设计

系统架构图

业务架构图

Console示例

领域模型&整洁架构参考

目录结构

├── console             控制台示例
│   ├── account         go.micro.srv.account,Account服务
│   │   ├── domain              领域
│   │   │   ├── model           模型
│   │   │   ├── repository      存储接口
│   │   │   │   └── persistence ①存储接口实现
│   │   │   └── service         领域服务
│   │   ├── interface           接口
│   │   │   ├── handler         micro handler接口
│   │   │   └── persistence     ②存储接口实现
│   │   ├── registry            依赖注入,根据使用习惯,一般Go中不怎么喜欢这种方式
│   │   └── usecase             应用用例
│   │       ├── event           消息事件
│   │       └── service         应用服务
│   ├── api             go.micro.api.console,API服务
│   ├── pb              服务协议统一.proto
│   └── web             go.micro.api.console,Web服务,集成gin、echo、iris等web框架
├── deploy              部署
│   ├── docker
│   └── k8s
├── doc                 文档资源
├── gateway             网关,自定义micro
└── pkg                 公共资源包

目标功能

  • 自定义micro网关
    • [x] JWT认证
    • [x] Casbin鉴权
    • [x] Tracing
    • [ ] RequestID
    • [x] Metrics
    • [ ] Access Log
    • ...
  • API服务
    • 网关使用默认处理器(handler=meta),聚合服务通过Endpoint定义路由规则,实现统一网关管理rpchttp类型的聚合服务
    • [x] api
    • [x] rpc
    • proxy/http/web
      • [x] 静态资源
        • 前后端分离场景将静态资源独立更好,但不排除使用Web模板框架的应用加入微服务体系,尤其在已有单体逐步拆分的演进过程中
      • [x] echo
      • [x] gin
      • [x] iris
      • [x] beego
  • 配置中心
  • 前后端分离console
  • 参数验证
    • [x] protoc-gen-validate,适用于APIhandler=rpc的模式
      • 规则配置account.proto
      • 参数验证account.go
  • 领域驱动
    • [x] 整洁架构
  • ORM
    • [x] gorm
    • [x] xorm
  • 发布
  • 部署
    • [ ] K8S
      • [x] helm
    • [ ] Docker
  • 安全
  • CICD
    • [x] Drone README
      • [x] Go编译
      • [x] Docker镜像
      • [ ] Kubernetes发布
    • [ ] Jenkins
  • 基础服务
    • [ ] 日志收集
      • stdout标准输出
      • log.file日志文件
      • log-pilot
    • [ ] 监控告警
      • Prometheus
      • Grafana
    • [ ] Tracing
      • Jaeger
  • ...

开发环境

TODO

  • 本地
    • [x] Docker Compose
  • 在线
    • [ ] CICD
    • [ ] Kubernetes
    • 本地服务接入
      • [ ] Network代理 + 流量染色

部署环境

Kubernetes环境

可选服务

Jaeger

浏览器访问:http://localhost:16686/

$ docker run -d --name=jaeger -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp   -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest
Prometheus

浏览器访问:http://localhost:9090/

prometheus.yml参考gateway插件`metrics/prometheus.yml

$ docker run -d --name prometheus -p 9090:9090 -v ~/tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Grafana

浏览器访问:http://localhost:3000/

Grafana仪表盘importmetrics/grafan.json

$ docker run --name grafana -d -p 3000:3000 grafana/grafana

参与贡献

代码格式

  • IDE IDEA/Goland,Go->imports 设置
    • Sorting type gofmt
    • [x] Group stdlib imports
      • [x] Move all stdlib imports in a single group
    • [x] Move all imports in a single declaration