Back to Article

05. Go 与云原生路线图

05. Go 与云原生路线图

这一部分从零开始学习 Go 和云原生。读者已经会 docker run 和 Compose,但不理解容器基础概念,也不了解 Go、Kubernetes 和云原生工程体系。

1. 为什么后端和云原生常学 Go

Go 的优势:

  • 编译成单二进制,部署简单。
  • 标准库覆盖 HTTP、JSON、测试、并发等常见能力。
  • goroutine 和 channel 适合高并发 I/O。
  • Kubernetes、Docker、Prometheus、Terraform 等大量云原生项目使用 Go。
  • 语法小,团队代码风格容易统一。

Go 的代价:

  • 错误处理显式,初学者会觉得啰嗦。
  • 泛型能力克制,不适合照搬 Java 抽象层。
  • 并发容易启动,但正确取消、限流、收敛不简单。
  • Web 生态没有 Spring 这样的一站式大框架,需要自己组合库和规范。

2. Go 学习路线

第 1 周:语言基础

  • 安装 Go。
  • go mod
  • 包、函数、结构体、接口。
  • slice、map。
  • error。
  • table-driven tests。

输出:写一个命令行程序,读取 JSON 文件,输出汇总结果。

第 2 周:HTTP 服务

  • net/http
  • 路由库,例如 chi/gin/echo,先理解标准库再选框架。
  • JSON 编解码。
  • 请求校验。
  • 统一错误响应。
  • 日志。

输出:写一个账户查询 HTTP API。

第 3 周:并发与 context

  • goroutine。
  • channel。
  • sync.WaitGroup
  • sync.Mutex
  • context.Context
  • 超时、取消、信号关闭。
  • race detector。

输出:写一个并发调用多个下游的聚合接口,要求任何下游超时都能取消。

第 4 周:数据库与测试

  • database/sql
  • 连接池。
  • 事务。
  • migration。
  • repository。
  • 单元测试。
  • 集成测试。

输出:支付订单 CRUD + 幂等创建。

第 5 周:服务工程化

  • 配置。
  • 日志结构化。
  • metrics。
  • health check。
  • graceful shutdown。
  • Dockerfile。
  • Compose。

输出:Go 服务 + Postgres + Redis 用 Compose 本地跑起来。

第 6 周以后:云原生

  • Kubernetes 基础对象。
  • Helm/Kustomize。
  • Ingress/Gateway。
  • ConfigMap/Secret。
  • HPA。
  • RBAC/NetworkPolicy。
  • OpenTelemetry。

输出:把 Go 服务部署到本地 kind/minikube/k3d。

3. Docker 学习路线

你已经会 docker run 和 Compose,下一步要补概念。

必须理解的对象

  • Image:只读模板。
  • Container:镜像运行出来的进程环境。
  • Layer:镜像分层。
  • Registry:镜像仓库。
  • Volume:持久化数据。
  • Network:容器间通信。
  • Dockerfile:构建镜像。
  • Compose file:声明本地多容器应用。

学习顺序

  1. docker run 跑一个 nginx。
  2. 写一个最小 Dockerfile。
  3. 理解 COPYRUNCMDENTRYPOINT
  4. 用 volume 保存数据库数据。
  5. 用 Compose 管理 app + db + redis。
  6. 学多阶段构建。
  7. 学镜像体积和安全扫描。

Hacker News 和 Reddit 关于 Compose 与 Kubernetes 的讨论有一个共同点:Compose 很适合本地和简单部署,Kubernetes 提供更完整的集群调度、滚动发布、自愈和声明式控制,但复杂度更高。学习时不要把二者对立,先用 Compose 理解应用依赖,再用 K8s 学生产编排。

4. Kubernetes 学习路线

第 1 层:能部署

  • Pod。
  • Deployment。
  • Service。
  • ConfigMap。
  • Secret。
  • Ingress。

第 2 层:能稳定运行

  • Readiness probe。
  • Liveness probe。
  • Startup probe。
  • requests/limits。
  • rolling update。
  • rollback。

第 3 层:能排查

  • kubectl get/describe/logs/exec/events
  • 查看 Deployment rollout。
  • 查看 Service endpoints。
  • 查看 Pod 调度失败原因。
  • 查看镜像拉取失败。

第 4 层:能治理

  • Namespace。
  • RBAC。
  • NetworkPolicy。
  • ResourceQuota。
  • HPA。
  • PodDisruptionBudget。
  • Helm/Kustomize。

第 5 层:能生产化

  • 镜像安全。
  • Secret 管理。
  • GitOps。
  • 灰度发布。
  • service mesh。
  • 可观测性。
  • 备份恢复。
  • 集群升级。

V2EX 的 K8s 深入学习讨论提到一个常见卡点:只搭了小集群,没有真实场景,所以理解停留在表面。解决办法是做项目:部署服务、模拟故障、看日志、改配置、滚动发布、扩容缩容。

5. 云原生概念地图

云原生不是“用了 Kubernetes 就算”。核心概念:

  • 容器:标准化运行环境。
  • 微服务:按业务能力拆分。
  • 不可变基础设施:通过替换而不是 SSH 上去修改。
  • 声明式 API:提交期望状态,由控制器收敛。
  • 自动化:CI/CD、GitOps、自动扩缩容。
  • 可观测性:日志、指标、追踪。
  • 弹性:失败隔离、自愈、重试、降级。
  • 服务网格:把服务间通信的安全、可观测和流量治理下沉到基础设施层。

6. 学习项目路线

建议最终项目:go-payments-cloud-native

功能:

  • Go 写 payment API。
  • Postgres 保存订单。
  • Redis 做简单限流或幂等缓存。
  • Prometheus metrics。
  • Dockerfile 多阶段构建。
  • Compose 本地开发。
  • Kubernetes 部署。
  • Ingress 暴露。
  • ConfigMap/Secret 管理配置。
  • HPA 自动扩缩容。
  • NetworkPolicy 限制访问。

扩展:

  • 加一个 Java/SOFA account-service。
  • Go payment-service 调 Java account-service。
  • 加 OpenTelemetry trace。
  • 加 CI 扫描和镜像构建。

7. 本章检查清单

  • 能解释为什么 Go 常用于云原生项目。
  • 能区分 Dockerfile 和 Compose。
  • 能解释 Pod、Deployment、Service、Ingress 的关系。
  • 能说明 Compose 和 Kubernetes 的适用边界。
  • 能规划一个 Go 服务从本地到 K8s 的学习项目。