本仓库旨在提供面向Go-Micro生产环境的快速开发包。项目结合维护者们十余年的工作经验,不同领域的实战沉淀,一切为了缩短大家的选型、开发周期。
go 1.13
export GOSUMDB=off
export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
micro api
网关
$ cd gateway
# 编译
$ make build
# API网关(二选一)
$ make run_api # 默认mdns + http
$ make run_api registry=etcd transport=tcp # 使用etcd + tcp
# Web网关(二选一)
$ make run_web # 默认mdns + http
$ make run_web registry=etcd transport=tcp # 使用etcd + tcp
- Web应用
app/console/web
控制台
- 聚合API
app/console/api
控制台
- 基础服务
srv/account
账户
注:
registry
、transport
选择与网关一致
$ cd {指定服务目录}
# 运行服务(二选一)
$ make build run # 默认mdns + http
$ make build run registry=etcd transport=tcp # 使用etcd + tcp
注:
console API
由于有认证
不能直接访问
- gateway
- console
$ make build # 编译
$ make run # 运行
$ make run registry=etcd transport=tcp # 运行,指定registry、transport
$ make build run # 编译&运行
$ make build run registry=etcd transport=tcp # 编译&运行,指定registry、transport
$ make vue statik # 前端编译,并打包statik.go文件
$ make docker tag=xxx/xxx:v0.0.1
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
仪表盘import
metrics/grafan.json
$ docker run --name grafana -d -p 3000:3000 grafana/grafana
- 自定义micro网关
-
JWT
认证 -
Casbin
鉴权 - Tracing
- RequestID
- Metrics
- Access Log
- ...
-
- 网关选择
- 配置中心
- 前后端分离
console
- 参数验证
- 领域驱动
- 整洁架构
- ORM
- gorm
- xorm
- 发布
- 灰度
- 蓝绿
- 注:由于micro默认的api和web网关均不支持服务筛选,需要自己改造,方案参考微服务协作开发、灰度发布之流量染色
- 部署
- K8S
- helm
- Docker
- K8S
- 安全
- CICD
- Drone
- Jenkins
- 基础服务
- 日志收集
stdout
标准输出log.file
日志文件- log-pilot
- 监控告警
- Prometheus
- Grafana
- Tracing
- Jaeger
- 日志收集
- ...
├── app 应用,API聚合、Web应用
│ ├── console 控制台
│ │ ├── api go.micro.api.*,API
│ │ └── web go.micro.web.*,Web,集成gin、echo、iris等web框架
│ ├── mobile 移动端
│ └── openapi 开放API
├── deploy 部署
│ ├── docker
│ └── k8s
├── doc 文档资源
├── gateway 网关,自定义micro
├── pkg 公共资源包
└── srv 基础服务
├── account 账户服务,领域模型整洁架构示例
│ ├── domain 领域
│ │ ├── model 模型
│ │ ├── repository 存储接口
│ │ │ └── persistence ①存储接口实现
│ │ └── service 领域服务
│ ├── interface 接口
│ │ ├── handler micro handler接口
│ │ └── persistence ②存储接口实现
│ ├── registry 依赖注入,根据使用习惯,一般Go中不怎么喜欢这种方式
│ └── usecase 应用用例
│ ├── event 消息事件
│ ├── service 应用服务
├── example micro srv不同场景示例
└── pb 基础服务协议统一.proto
TODO
领域模型&整洁架构参考
- IDE IDEA/Goland,
Go->imports
设置- Sorting type
gofmt
-
Group stdlib imports
-
Move all stdlib imports in a single group
-
-
Move all imports in a single declaration
- Sorting type