跳转至

学习资料:https://liuqh.icu/categories/Go/page/3/

课程大纲

模块一:Go 架构实践 - 微服务(微服务概览与治理)

教学目标:

  1. 了解微服务的演进历史及它的优缺点

  2. 了解微服务的设计方法

  3. 了解微服务中 RPC 的底层原理

  4. 多集群、多租户的概念

学习和工作中的痛点:

  1. 不理解微服务的服务角色:API Gateway、BFF 还是 Service?

  2. 不知道怎么做微服务拆分

  3. 不理解 RPC 的原理,不知道如何进行微服务 RPC 框架的选型

详细内容:

  1. 微服务的原理、概念,以及微服务的实现细节

  2. API Gateway、BFF、Service 等概念精讲

  3. 微服务通讯 RPC 框架的细节和选型

  4. 多集群、多租户解决全链路压测、多测试环境等

模块二:Go 语言实践 - 异常处理

教学目标:

  1. 了解 Go 语言中 error 的处理方法

  2. 了解 Go 语言中业务错误的处理方法

学习和工作中的痛点:

  1. error 的处理复杂,不会正确使用

  2. 业务错误定义和 error 整合难度较高

详细内容:

  1. Go 语言中的 error 处理实践:检查错误、定义错误、追加上下文

  2. Go 项目中的业务错误码如何结合 error 的最佳实践

模块三:Go 语言实践 - 并行编程

教学目标:

  1. 了解 Go 语言中的 Memory Model

  2. 了解 Go 语言的并发特性并发编程模式:Timeout、Pipeline、Cancellation、Fanout、errgroup 等模式

  3. 了解 Go 语言中 Context 的原理并掌握其使用方法

学习和工作中的痛点:

  1. 搞不清楚 Go 中内存模型和同步语义

  2. 无法熟练使用基于 channel 通讯方式的并行编程模式

  3. 不明白 Context 传播式传递有什么意义

详细内容:

  1. 内存模型:Happens Before、同步语义、channel 通讯、锁

  2. 利用 channel 完成并行开发的设计模式,包含超时控制、管道、扇出、errgroup 并发

  3. 使用 Go 标准库 Context 的原理和最佳实践,包含超时控制、元数据传递、生命周期控制

模块四:Go 工程化实践

教学目标:

  1. 了解 Go 项目中良好的项目目录组织原则和规范

  2. 了解 Go 项目中 API 的设计方法和规范

  3. 了解 Go 项目中 Package 的管理和设计方法

  4. 了解 Go 项目中的单元测试方法

学习和工作中的痛点:

  1. 不知道怎么做 Go 项目的标准化管理

  2. 总是设计出各种不合理的 API

  3. 不知道怎么做包管理

详细内容:

  1. 良好的 Go 项目中的分层目录结构组织和代码规范

  2. Go 项目中 API 的设计原则和方法:定义、状态和业务错误码处理

  3. Go 项目中包的设计和最佳实践、go mod 的使用

  4. go test 工具链的使用方法、单元测试的最佳实践以及 Mock 技术

模块五:Go 架构实践 - 微服务(可用性设计)

教学目标:

  1. 掌握可用性设计的最佳实践

  2. 了解可用性设计的几大关键点:隔离、超时控制、过载保护、限流、容错&重试

学习和工作中的痛点:

  1. 不知道如何设计高可用的分布式服务

  2. 不清楚如何提升服务自愈能力

详细内容:

  1. 微服务的隔离实现,以及架构设计中的隔离实现

  2. 进程内超时控制和跨进程超时控制

  3. 程序自保护避免过载,抛弃一定的流量完成自适应限流

  4. 单机限流、多租户场景的分布式限流

  5. 节点故障的容错逻辑、重试容错的策略和设计

模块六:评论系统架构设计

教学目标:

  1. 评论系统的存储、缓存设计

  2. 评论系统的可用性设计

  3. 评论系统的架构设计

学习和工作中的痛点:

  1. 缓存的单飞加载,缓存的流控,缓存的优化技巧

  2. 缓存和存储的数据一致性设计,多级缓存的设计,热点缓存的应对

  3. 异步消息队列消峰设计

详细内容:

  1. 评论系统设计中结合消息队列如何做存储优化

  2. 评论系统设计中缓存、存储设计的方案

模块七:播放历史架构设计

教学目标:

  1. 掌握极高 TPS,高 QPS 系统的架构设计思路

  2. 掌握消息队列在海量数据持久化场景中的最佳实践

学习和工作中的痛点:

  1. 极高 TPS,高 QPS 系统在设计和优化中如何做取舍

  2. 对于海量写入如何消峰,提高系统吞吐

详细内容:

  1. 历史记录系统如何做架构设计和技术选型

  2. 历史记录系统设计中缓存、存储设计的方案

  3. 如何结合消息队列做数据持久化的优化

  4. 提升系统可用性的核心思想和技巧

模块八:Go 架构实践 - 中间件(缓存、数据库)

教学目标:

  1. 了解Redis、Memcache的原理和实战使用

  2. 了解MySQL的常用设计和优化

学习和工作中的痛点:

  1. Redis、Memcache的应用场景、最佳实践,以及缓存的一致性设计

  2. MySQL的表设计,常用优化手段,如何解决分布式事务

详细内容:

  1. Redis、Memcache 的应用场景、最佳实践,以及缓存的一致性设计

  2. MySQL 的表设计、常用优化手段,以及如何解决分布式事务

模块九:Go 语言实践 - 网络编程

教学目标:

  1. 熟练掌握 Go 语言中的 TCP 网络编程

  2. 熟练掌握 Go 语言中的 HTTP 网络编程

学习和工作中的痛点:

  1. 不知道怎么用 Go 实现高性能的 TCP Server

  2. HTTP 框架有不少,但不知道怎样做选型

  3. 不会针对业务需求对 HTTP 框架做针对性的扩展

详细内容:

  1. 结合 goim 项目了解 Go 语言中 TCP Server 的基础库和性能优化方案

  2. 结合 gin 项目了解 Go 语言中的 HTTP Server 的基础库和框架

模块十:Go 架构实践 - 中间件(日志、指标、链路追踪)

教学目标:

  1. 了解 Go 项目中的日志收集

  2. 了解 Go 项目中的监控指标体系

  3. 了解 Go 项目中的分布式链路追踪

学习和工作中的痛点:

  1. 不知道如何解决微服务的可观测性难题

  2. 不清楚怎么做微服务的可视化和标准化

  3. 出故障后,难以对微服务进行问题诊断

详细内容:

  1. 实现一个可以集中收集所有微服务实例的日志,并能统一查看和检索的日志采集架构

  2. 指标监控、使用 Prometheus 解决监控可视化、指标采集

  3. 微服务中的跨服务性能问题诊断,结合 Jaeger 实现分布式链路追踪

模块十一:Go 架构实践 - 分布式架构(前端负载均衡)

教学目标:

  1. 掌握高可用 DNS 的最佳实践

  2. 了解 CDN 的架构和应用场景

  3. 深入理解 4/7 层负载均衡的原理

学习和工作中的痛点:

  1. 缺乏对在线服务的全链路视野

  2. 不了解应用服务上层的负载均衡

详细内容:

  1. DNS 的原理、防劫持的方法、HTTPDNS + IP 长连接

  2. CDN 的系统架构、应用领域以及保证数据一致性的方法

  3. LVS、Nginx 4/7 层负载均衡的原理和实践

模块十二:Go 架构实践 - 中间件(消息队列、服务发现)

教学目标:

  1. 深入理解消息队列的原理,掌握基于消息队列的架构设计方法

  2. 服务发现原理、选型策略,以及服务发现实现的微服务多租户架构

学习和工作中的痛点:

  1. 不会做消息解耦的架构设计

  2. 不清楚如何实现服务发现对平滑发布的支持

  3. 不知道怎样利用多租户实现多测试环境

详细内容:

  1. Kafka 的实现原理、异步消息系统的架构设计

  2. RPC 服务发现、动态地址的选型和实现原理,以及基于服务发现的平滑重启和多租户架构

模块十三:Go 语言实践 - Runtime

教学目标:

  1. 了解 Go 语言中 Goroutine 的调度原理

  2. 了解 Go 语言中的内存模型

  3. 了解 Go 语言中 GC(垃圾回收)的原理

  4. 了解 Go 语言中 channel 的消息通讯原理

学习和工作中的痛点:

  1. 分不清 Goroutine 和线程的区别

  2. 不熟悉 Go 的内存分配机制

  3. 搞不懂 GC 三色标记算法

  4. 不了解 channel 的底层实现

详细内容:

  1. Goroutine 的实现、GPM 调度模型、调度状态及流转、调度原理、协作式抢占以及和网络库的协作

  2. Go 内存分配的内部结构和分配机制

  3. Go GC 介绍、三色标记的实现原理、GC 的流程以及 GC 的一些优化方案

  4. Go channel 的通讯机制、环形队列的结构、调度和唤醒的原理

大纲

微服务概览与设计 在自己的工作中,公司的微服务是如何划分的?
服务注册与发现的设计要点
面试:微服务和模块化,究竟有哪些区别?对于不同规模的公司来说,我是应该模块化还是应该微服务化?
Go 语言实践 error 如何设计 error code?
如何利用 AOP 来统一记录错误?
Go 语言实践 Concurrency Goroutine、线程、进程的统一抽象
利用 Context 来构建全链路
channel 实现以及 sync 包 mutex 实现的面试要点
Go 工程化实践 配置模块 API 设计,体会工程化实践
如何在公司内部搭建完整的 Go 代码质量体系?
静态代码质量检测、分支覆盖、设计利于测试的 API
微服务可用性设计 各种框架是怎么提供对可用性功能支持的?
公司内部如何应用可用性保障?
微服务相关面试要点
评论系统架构设计 Cache 的各种模式以及 API 设计
评论系统架构设计相关面试要点
播放历史架构设计 高可用高性能架构的设计套路
播放历史架构设计相关面试要点
分布式缓存与分布式事务 分布式事务的三板斧与例子
SEATA 与事件驱动构建无分布式事务系统
Redis 面试要点
Go 语言编程实践-网络编程 用 TCP 来实现一个简单的 RPC
网络编程相关面试要点
日志&指标&链路追踪 如何在公司搭建完整的可观测性平台?
各个框架如何集成可观测性中间件?
关注哪些指标以及一般的指标异常可能原因
DNS & CDN & 多活架构 推进公司应用 CDN
多活架构面试要点
消息队列 - Kafka 如何用 Kafka 解决问题?
Kafka 面试要点
Go 语言实践 - Runtime 如何阅读源码?
GC 面试要点

http://c.biancheng.net/golang/build/