一、前言
1. 微服务背景与意义
微服务架构已成为现代软件工程的主流选择。Go语言凭借其简洁高效的语法、强大的并发处理能力和出色的性能表现,成为构建微服务的理想语言。基于Go语言的微服务工程设计与实现,给个比较通用的方案。
待补充
- smux连接复用
- dtm分布式事务 https://www.dtm.pub/
2. 技术选型
2.1. 核心技术栈
本微服务项目采用的核心技术栈包括:
- 编程语言:Go 1.24+,利用其高效的并发处理、简洁的语法和丰富的标准库
- 服务通信:gRPC,基于HTTP/2的高性能RPC框架,支持多种编程语言
- HTTP框架:go-zero框架内置HTTP服务器和gRPC Gateway两套方案提供http
- 数据存储:MongoDB作为主数据库,Redis作为缓存层
- 服务治理:集成服务注册与发现、负载均衡、熔断降级等能力
- 链路追踪:Jaeger,用于分布式系统的监控和故障排查
- 容器化:Docker和Kubernetes,实现服务的快速部署和弹性伸缩
- 配置管理:支持多种配置源,包括文件、环境变量和配置中心
2.2. 框架对比
在微服务提供http的框架选择上,我们对比了几个主流的Go微服务框架:
- go-zero:一个集成了多种工程实践的开源微服务框架,提供了从API定义到服务实现的完整工具链,内置了丰富的中间件和工具,适合快速构建企业级微服务系统。
- gRPC Gateway:一个gRPC到HTTP的反向代理,允许RESTful API客户端访问gRPC服务,适合需要同时提供gRPC和HTTP接口的场景。
- Gin:一个轻量级的HTTP Web框架,性能优秀,但需要自行集成微服务相关组件,json的序列化需要自己实现,可能会出现乱传递的问题。
由于产品代码严肃性(参数规范化),并且已经存在grpc的情况下,选择grpc gateway的方式比较合适。但是protobuf对于int64的json转换会变成字符串,并且grpc-gateway性能可能会有所降低,同时有go-zero框架提供选择。
2.3. 选型依据
技术选型的依据主要包括以下几个方面:
- 性能需求:Go语言的高性能特性和gRPC的高效通信机制,能够满足高并发、低延迟的业务需求,适合微服务之间进行调用。
- 开发效率:go-zero框架提供了代码生成工具和丰富的中间件,大大提高了开发效率,减少了重复工作。
- 可维护性:微服务架构的模块化设计和清晰的接口定义,使系统更易于理解和维护。这一点grpc gateway的proto定义和go-zero的api定义都满足要求
3. 项目架构
3.1. 整体架构设计
二、工程案例一:grpc+go-zero工程框架
1. go-zero框架介绍
1.1. 框架特点
1.2. 核心组件
1.3. 适用场景
2. gRPC服务设计与实现
2.1. Protocol Buffers定义
2.2. 服务接口设计
2.3. 服务实现
3. HTTP接口设计与实现
3.1. 路由设计
3.2. 中间件实现
3.3. 参数验证
三、工程案例二:grpc+grpcgateway
1. gRPC Gateway介绍


