项目进行中
本仓库旨在提供面向 stack-rpc 生产环境的快速开发包。
- 快速开始示例
- 控制台示例
- 以最常见的登录流程为例,实现一个场景简单,但包含微服务各种治理能力的示例
- Hipster Shop示例
- 参考GoogleCloudPlatform/microservices-demo实现一个业务场景比较复杂的微服务应用
- 控制台示例
- 架构设计
- 目录结构
- 目标功能
- 开发环境
- 部署环境
- 参与贡献
领域模型&整洁架构参考
├── 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网关
-
JWT
认证 -
Casbin
鉴权 - Tracing
- RequestID
- Metrics
- Access Log
- ...
-
- API服务
- 配置中心
- 前后端分离
console
- 参数验证
- protoc-gen-validate,适用于API
handler=rpc
的模式- 规则配置account.proto
- 参数验证account.go
- protoc-gen-validate,适用于API
- 领域驱动
- 整洁架构
- ORM
- gorm
- xorm
- 发布
- 灰度
- 蓝绿
- 注:由于micro默认的api和web网关均不支持服务筛选,需要自己改造,方案参考微服务协作开发、灰度发布之流量染色
- 部署
- K8S
- Docker
- 安全
- CICD
- 基础服务
- 日志收集
stdout
标准输出log.file
日志文件- log-pilot
- 监控告警
- Prometheus
- Grafana
- Tracing
- Jaeger
- 日志收集
- ...
TODO
- 本地
- 在线
- CICD
- Kubernetes
- 本地服务接入
- Network代理 + 流量染色
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
- 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