Skip to content

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网关实现
  • 配置管理
  • 健康检查
  • 负载均衡
  • 熔断器模式
  • 分布式追踪

常用微服务工具

  1. Consul: 服务发现和配置管理
  2. etcd: 分布式键值存储
  3. gRPC: 高性能RPC框架
  4. Prometheus: 监控和告警
  5. Jaeger: 分布式追踪
  6. Kong: API网关
  7. Docker: 容器化部署
  8. Kubernetes: 容器编排

学习要点

  1. 服务拆分: 按业务领域拆分服务
  2. 服务通信: 使用HTTP/gRPC进行服务间通信
  3. 服务发现: 动态发现和注册服务
  4. 配置管理: 集中管理配置
  5. 监控: 监控服务健康状态
  6. 容错: 实现熔断、重试等容错机制

架构模式

  1. API网关模式: 统一入口点
  2. 服务发现模式: 动态服务注册
  3. 熔断器模式: 防止级联故障
  4. CQRS模式: 命令查询职责分离
  5. 事件驱动模式: 基于事件的通信

下一步

  • 学习性能优化 (05-performance)
  • 学习部署运维 (06-deployment)