/starter-kit

Quick Go-Micro 快速开发包

Primary LanguageGoApache License 2.0Apache-2.0

Micro 快速开发工具包

项目进行中

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

目录

架构设计

系统架构图

业务架构图

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                 公共资源包

目标功能

开发环境

  • 本地
  • 在线
    • CICD
      • Drone
      • Kubernetes
    • 本地服务接入
      • Docker环境
      • K8S环境

本地服务接入-Network代理

本地服务接入-Network代理

Network代理测试

consoledocker-compose.yaml为例,假设compose为在线环境,本地开发account服务。

  • compose中加入network服务,参考docker-compose-network.yml
  • api服务使用network做代理MICRO_PROXY=go.micro.network注意测试时compose中仅api服务使用代理
  • 本地启动network
    • micro --registry=etcd --transport=tcp network --nodes=127.0.0.1:8085 --address=:8086 --advertise_strategy=local
  • 剩下的工作使用proxyroute的筛选功能,参考PR#897
    • 查看本地routermicro --registry=etcd --transport=tcp network routes
    • curl -XPOST -H "Micro-Router: 6832f8ff-1217-4119-8a56-9a90adf19fef" -d '{"username" : "admin","password":"123456"}' http://localhost:8080/account/login

真实场景

  • 考虑所有服务都可以自助路由到本地,不能直接使用Micro-Router(因为Micro-Router会在全链路生效),可以自定义header来定义router筛选的应用范围,通过Client/Call Wrap实现,参考实现router_filter
  • 要做到api服务可以路由筛选,在网关层与流量染色有相同的问题,不支持服务筛选,导致的代理服务被忽略,需要去掉SelectOption
    • 另一个方案是在本地开micro api + 聚合服务,聚合服务再通过network代理访问线上服务,可以满足一般场景的需求
  • 网关及服务全部使用network做代理
# api服务路由到本地
curl -XPOST -H "X-Micro-Router-Filter: go.micro.api.console:6832f8ff-1217-4119-8a56-9a90adf19fef" -d '{"username" : "admin","password":"123456"}' http://localhost:8080/account/login

# account服务理由到本地
curl -XPOST -H "X-Micro-Router-Filter: go.micro.srv.account:6832f8ff-1217-4119-8a56-9a90adf19fef" -d '{"username" : "admin","password":"123456"}' http://localhost:8080/account/login

# api和account服务都路由到本地
curl -XPOST -H "X-Micro-Router-Filter: go.micro.api.console:6832f8ff-1217-4119-8a56-9a90adf19fef;go.micro.srv.account:6832f8ff-1217-4119-8a56-9a90adf19fef" -d '{"username" : "admin","password":"123456"}' http://localhost:8080/account/login

生产环境

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
    • Group stdlib imports
      • Move all stdlib imports in a single group
    • Move all imports in a single declaration