项目简介
ggs(Go Gin Service)是专门为微服务架构设计的开发框架,其目标是让业务开发人员能专注于业务逻辑实现,同时自动具备服务治理能力,以此提升开发效率。该框架封装了程序启动、退出、部署等细节,集成服务治理各环节,并实现与公司内部组件的无缝对接,最大程度降低服务治理的开发成本。
项目的主要特性和功能
- Gin无缝集成:HTTP使用习惯与Gin完全一致。
- 多协议多端口:支持HTTP和gRPC,可同时监听多个端口。
- 服务注册与发现:集成公司Consul,自动实现服务注册和发现。
- 配置中心:集成公司配置中心,一键生成框架定制模板,支持热更新。
- 限流:自动具备限流能力,使用方配置参数即可,支持Provider和Consumer。
- 调用链追踪:集成公司Trace,自动具备链路追踪能力。
- Metrics:自动生成Metrics数据,并与Prometheus自动对接。
- 负载均衡:作为Consumer调用远端时,支持多种负载均衡策略和重试,按需配置。
- 隔离容错:通过超时、熔断策略保护分布式系统,避免错误雪崩,按需配置。
- Sidecar:接入Sidecar时指定参数即可。
- Log库:提供开箱即用的Log库,支持stdout/file输出、自动切割、JSON格式、添加结构化字段等。
- Redis/MySQL:封装开箱即用的Redis/MySQL库,支持Trace。
- 部署:与PIEE的新CI&CD结合,简单配置可实现部署,无缝支持Kubernetes部署。
- 优雅处理:支持优雅退出和平滑重启,避免发布时流量丢失或报错,解决并行发布时的负载均衡问题。
安装使用步骤
1. 快速搭建
1.0 使用ggs框架的最短路径
- 安装ggs - gen工具:
bash
- 生成新应用:
bash ggs - gen new myapp
1.1 快速搭建HTTP服务
- 参考代码:
go package main import ( "net/http" ) func main() { if err := ggs.Init(); err != nil { panic(err) } r, err := ggs.Gin() if err != nil { panic(err) } r.GET("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") }) ggs.Run() }
- 配置文件
./conf/app.yaml
:yaml service: name: RestServer environment: dev ggs: protocols: rest: listenAddress: "0.0.0.0:8868"
1.2 快速搭建gRPC服务
- 定义proto文件。
- 使用
protoc - gen - ggs
插件生成*.pb.go
文件。 - 参考代码:
go package main import ( pb "your/proto/package" "context" ) type Service struct{} func (s *Service) SayHello(ctx context.Context, in *pb.HelloReq) (*pb.HelloResp, error) { return &pb.HelloResp{ Message: "Hello " + in.Name,}, nil } func main() { if err := ggs.Init(); err != nil { panic(err) } pb.RegisterGreeterServer(&Service{}) ggs.Run() }
- 配置文件
./conf/app.yaml
:yaml service: name: GrpcServer environment: dev ggs.protocols: grpc: listenAddress: "0.0.0.0:9000" rest: listenAddress: "0.0.0.0:9001"
2. 服务治理
2.1 服务注册与发现
在conf/advanced.yaml
中配置:
yaml
ggs.service:
registry:
disabled: false
address: http://10.0.1.101:8500
2.2 调用链追踪
在conf/advanced.yaml
中配置:
yaml
ggs.tracing:
disabled: false
settings:
samplingRate: 1.0
traceFileName: /data/logs/trace/trace.log
3. 公共服务调用
3.1 调用Redis
(文档未给出具体步骤)
3.2 调用MySQL
参考代码:
go
import (
)
db := store.GormWithTrace(c.Request.Context(), "local")
4. 部署
4.1 CI构建命令
- Go mod模式(推荐):
bash make artifacts_mod
- 非Go mod模式:
bash make artifacts
4.2 CD运行命令
- ECS发布:
bash sh run.sh reload
- 容器发布:
bash ./paas - project - id - c /data/etc/cc/paas_project_id
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】