Web 后端教程(进阶篇)教学大纲
📌
施工中
教学目标
- 深入原理:通过 Go 的显式特性,让学生深刻理解路由、中间件、ORM 等概念的底层实现本质。
- 培养底层思维:从一个 “框架使用者” 转变为一个能思考性能、并发、内存管理的 “工程师”。
- 掌握 Go 后端开发:熟练使用 Go 语言、Gin 框架和 GORM 来构建高性能的后端服务,并掌握 Go 的指针、错误处理等核心特性。
- 熟悉高级组件:使用 Redis 缓存,使用消息队列。
- 衔接微服务架构:理解从单体应用到微服务的演进过程,初步掌握 RPC (gRPC)、服务注册与发现、容器编排 (Kubernetes) 等核心概念。
课程大纲
Lab 0: Go 语言基础
Go 语法,Go 环境搭建,工作区概念,Go Modules, Goroutine
模块一: 重新认识路由和框架
- 路由的本质:先用 Go 标准库 net/http 手写一个简单的 Web 服务器,暴露路由函数。
- 引入 Gin: 讲解 Gin 如何用更优雅的方式解决了 net/http 的路由和分组问题。
- Gin 的 Context
- ...
- 作业:
- 尝试使用 net/http 实现一个支持不同 HTTP 方法的路由分发器
- 拓展阅读:
- gin-swagger
- 大厂基于 Gin 的框架
- GORM
模块二: 再论架构与中间件的本质
- 通过接口和构造函数手动注入依赖,本质上为了解决相同的问题
- 中间件的本质:手写一个最简单的 Gin 中间件,本质是一个接收 *gin.Context 并调用 c.Next () 的函数。责任链模式.
- ...
- 作业:
- 替换 Gin 框架的默认 Logger 中间件
- 实现一个 Panic 恢复中间件,确保单个请求的崩溃不会导致整个服务宕机,并能记录下崩溃的堆栈信息
- 拓展阅读:
- Go 的闭包
- go 的反射机制和适用场景
模块三:消息队列
- 问题引入:当服务所需要的请求量越来越多
- RabbitMQ (AMQP 模型) 和 Kafka (流模型) 的区别和适用场景
- ACK, 持久化和重试
- 什么时候应当为系统引入消息队列才不会显得累赘
- ...
- 作业:
- 实现一个异步任务,通过 API 提交某个耗时请求之后,服务将任务放入 RabbitMQ 后立即返回,让一个 Worker 服务消费任务
- 拓展阅读:
- 死信队列
- Kafka 核心概念: Topic, Partition, Offset, Consumer Group
- RocketMQ
模块四:缓存
- Redis
- 缓存的常见策略 (Cache-aside, Read-through, Write-through)
- 缓存穿透、缓存击穿、缓存雪崩的原因和解决方案
- Redis 常见数据结构的使用场景
- 什么时候应当引入缓存才不会显得累赘
- ...
- 作业:
- 为某个高频读取的 API 增加 Redis 缓存 (Cache-aside), 并进行压测,对比 QPS 和响应时间。
- 拓展阅读:
- 缓存与数据库一致性问题
- 分布式锁的概念与基于 Redis 的实现
模块五:从单体到微服务
- 单体应用的痛点,为什么业界会需要微服务架构
- RPC 概念,以及 RPC 的底层本质
- gRPC: Protobuf, 服务定义,四种通信模式,在 Go 中的实践
- 作业:
- 创建两个微服务:user-service 和 order-service。order-service 在创建订单时,需要通过 gRPC 调用 user-service 来验证用户信息是否存在
模块六:Kubernetes
- 什么是容器编排?为什么已经有 compose 了还需要 k8s?
- k8s 架构和核心概念讲解
- kind
- 作业:
- 为一个简单的微服务编写 Kubernetes 的 Deployment 和 Service 的 YAML 文件,并使用 kind 在本地部署起来
- 在 kind 集群中滚动更新 (Rolling Update) 和回滚 (Rollback) 一个服务
- 拓展阅读:
- k8s 官方文档
- ...
Project 2 : 电商平台
参考 2024 年字节后端青训营项目。要求使用 gRPC 的微服务架构,使用 k8s 集群进行部署.