Go微服务架构示例
概述
本文档展示了Go语言的微服务架构特性,包括服务发现、负载均衡、API网关、配置管理、监控等。
运行示例
bash
cd apps/go/examples/04-microservice
go run main.go
核心概念
1. 微服务架构
微服务是一种将应用程序构建为一组小型自治服务的架构风格。
go
// 用户服务
type UserService struct {
db *gorm.DB
}
func (s *UserService) GetUser(id int) (*User, error) {
var user User
result := s.db.First(&user, id)
return &user, result.Error
}
// 订单服务
type OrderService struct {
db *gorm.DB
}
func (s *OrderService) CreateOrder(order *Order) error {
return s.db.Create(order).Error
}
2. 服务发现
go
import (
"github.com/hashicorp/consul/api"
)
func registerService(client *api.Client, serviceName, serviceID, address string, port int) error {
registration := &api.AgentServiceRegistration{
ID: serviceID,
Name: serviceName,
Address: address,
Port: port,
}
return client.Agent().ServiceRegister(registration)
}
3. API网关
go
func gatewayHandler(w http.ResponseWriter, r *http.Request) {
// 路由到不同的微服务
switch r.URL.Path {
case "/api/users":
forwardToUserService(w, r)
case "/api/orders":
forwardToOrderService(w, r)
default:
http.NotFound(w, r)
}
}
4. 配置管理
go
import (
"github.com/spf13/viper"
)
func loadConfig() {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
if err := viper.ReadInConfig(); err != nil {
log.Fatal(err)
}
}
5. 健康检查
go
func healthCheck(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
response := map[string]interface{}{
"status": "healthy",
"timestamp": time.Now().Unix(),
"service": "user-service",
}
json.NewEncoder(w).Encode(response)
}
示例代码
详细示例请查看 main.go
文件,包含:
- 微服务架构设计
- 服务注册与发现
- API网关实现
- 配置管理
- 健康检查
- 负载均衡
- 熔断器模式
- 分布式追踪
常用微服务工具
- Consul: 服务发现和配置管理
- etcd: 分布式键值存储
- gRPC: 高性能RPC框架
- Prometheus: 监控和告警
- Jaeger: 分布式追踪
- Kong: API网关
- Docker: 容器化部署
- Kubernetes: 容器编排
学习要点
- 服务拆分: 按业务领域拆分服务
- 服务通信: 使用HTTP/gRPC进行服务间通信
- 服务发现: 动态发现和注册服务
- 配置管理: 集中管理配置
- 监控: 监控服务健康状态
- 容错: 实现熔断、重试等容错机制
架构模式
- API网关模式: 统一入口点
- 服务发现模式: 动态服务注册
- 熔断器模式: 防止级联故障
- CQRS模式: 命令查询职责分离
- 事件驱动模式: 基于事件的通信
下一步
- 学习性能优化 (05-performance)
- 学习部署运维 (06-deployment)