Go/Cloud Native
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:声明本地多容器应用。
学习顺序
- 用
docker run跑一个 nginx。 - 写一个最小 Dockerfile。
- 理解
COPY、RUN、CMD、ENTRYPOINT。 - 用 volume 保存数据库数据。
- 用 Compose 管理 app + db + redis。
- 学多阶段构建。
- 学镜像体积和安全扫描。
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 的学习项目。