时长:105:20:26

第一阶段: go语言基础

在该阶段,我们将会通过和python对比学习的方式讲解go的所有基础知识,本阶段讲解go语言不会只是简单的讲解go语言,而是和python对比讲解,比如某个知识点在go语言中是如何的,同时该知识点在python中又是如何使用的,两者之间使用上有什么区别,通过对比学习的方式。一方面可以加深大家对go语言的快速理解,同时也能加深大家多python的认识,学习效率事半功倍。在这个阶段中我们会全面讲解go的全部基础知识点,为后面的学习打好基础。

第一章:go语言介绍和hello world

主要介绍go语言的特点以及快速入门go语言

第二章 变量和常量

本章节介绍变量、匿名变量的基本定义和使用,除了变量以外最常用的常量和变量的作用域。

第三章 计算机组成原理快速扫盲

本章节快速讲解静态语言学习过程中最基础的计算机原理,包括各种进制以及ascii码表

第四章 基本数据类型、运算符和表达式

本章节我们将全面的了解go语言的整数类型,浮点数类型以及这些基本类型的转换,我们将理解到go语言中的strconv包以及各种转换函数的使用,我们也将通过对比python和go的数据类型来加深两种语言之间的区别

第五章 python的海象运算符和变量注解

本章节我们将介绍python中的新特性- 海象运算符,也会讲解python中的类型申明和函数的类型检查等静态语言具备的功能

第六章 字符串的基本操作

本章节我们会了解到go语言中字符串相关的细节,包括中文字符串的长度问题、转义符、子串查询和统计、以及字符串的格式化输入和输出等常用的字符串相关功能

第七章 条件语句和循环语句

本章节我们会了解到go语言中的条件语句和循环语句,除了基本的if和for循环以外还理解到中文在for循环中容易出现的问题,goto语句和switch等常用语句的基本使用,我们也会理解到python中为什么没有switch以及如何实现

第八章 最常用的复杂数据类型 - map、数组、 切片

本章节主要讲解go语言中最常用的复杂类型:map、数组、切片, 通过本章节的学习我们不只是会使用go语言的这些基本类型还将了解到python和go语言在这些类型上的差异。比如go语言中切片的实现原理等

第九章 go语言的利器- 指针

本章节我们将会介绍go语言区别于其他语言的利器-指针,除了指针的基本使用以外,还包括make函数和new函数的区别以及new函数的使用过程、nil和python中的none的区别等

第十章 go语言的函数

go语言中的函数是静态语言中的一大亮点,基本上满足了python使用者的灵活性。例如:不定长参数、一等公民特性。本章节中我们还会介绍go语言函数中的defer机制以及panic机制和recover的异常处理等。通过对比python的args、kwargs以及go语言的参数也能加深我们对python的理解

第十一章 go语言的结构体

go语言的结构体是go语言中完成面向对象特征的最重要类型,对于struct的学习和理解有助于我们理解go语言的设计理念,本章节我们会详细的介绍struct的各个细节,包括定义、组合以及结构体标签等

第十二章 go语言的接口

go语言的接口设计理念和python的鸭子类型设计理念是一致的,所以学习完本章节你将对python和go对于面向对象的理解有一个新的理解。我们也会对比讲解go语言的设计理念和面向对象语言的区别以及go是如何通过接口达到面向对象的各个主要特性

第十三章 包管理和编码规范

go语言的包管理经历过两个重要的阶段,本章节我们将会了解到静态语言是如何进行包管理以及和python的包管理有什么区别,也会着重介绍go编码规范和python的编码规范

第十四章 go并发编程

go语言最大的特性是高并发实现非常简单而且并发性很高,本章节我们除了会讲解go语言并发编程中基本概念如:goroutine的基本使用、waitgroup、互斥锁、读写锁、channel以及deadlock出现的场景以外还会介绍另一个非常重要的知识点 - context。我们也会通过和python的协程对比来加深大家对协程的理解。

第二阶段:多语言通信基础 - grpc

在该阶段中,我们会详细的讲解rpc流行的框架-grpc,rpc是微服务开发的起点也是非常重要的知识点,所以该阶段我们对grpc的讲解不会一上来就直接讲解如何使用grpc,而是我们会从0开始讲解rpc,然后通过rpc过渡到grpc,在该阶段我们不只是会使用grpc,而是会从0开始讲解一个rpc是如何开发出来的,然后通过讲解xml-rpc、json-grpc、zero-rpc以及对这些rpc框架做一个分析,然后通过讲解一个rpc框架应该如何封装才能达到我们的要求,所以该阶段绝对是一个非常有两点的阶段,通过该阶段的学习我们将明白:一个rpc框架应该要解决哪些问题?我们为什么要使用grpc,grpc有哪些重要的知识点,通过该阶段还有另一个非常重要的特点:由浅入深,而不是简单的对grpc的使用,而是对grpc的全方面的详解。

第一章 python下的rpc开发体验

本章节我们将会理解到什么是rpc,而且我们会讲解通过各种方法如:json、xml等方式实现rpc效果。通过对比学习xml-rpc、json-rpc和zero-rpc等方法完成rpc的调用,学习完各种rpc框架以后我们将会了解到rpc的各个细节,为后面学习grpc打下坚实基础

第二章 go的rpc体验

本章节中我们会采用和python不一样的方法了解go语言中的rpc开发体验,通过本章节我们将会体验到python和go语言的rpc调用,本章节我们会一步步基于go提供的基础rpc功能开始逐步封装达到grpc的使用效果,本章节是一个非常重要的章节,理解到本章节以后我们上手grpc会很快

第三章 grpc快速入门

本章节是grpc的快速入门章节,我们除了体验到python和go下的grpc基本使用以外,还会体验到go和python的grpc互相调用,通过本章节学习我们将体验到protobuf的基本定义、grpc的流模式使用

第四章 protobuf和grpc进阶

前面的章节中我们已经入门了grpc的基本使用,本章节是一个非常重要的进阶过程,本章节的学习将为后续的微服务打下坚实的基础,本章节介绍了大量的protobuf和grpc进阶知识,如:protobuf的各种类型、grpc的metadata、拦截器、验证器、错误处理以及超时机制等等

第三阶段: 需求分析、架构设计、orm基础和web框架基础

在该阶段中,我们要完成两个目标:1. 详细的架构演进设计 2. 后面实战课程中需要用到的基础 - orm和go语言的web框架。
本阶段中除了需要完成需求分析以外,架构的演进对于需要学习微服务开发以及进阶都是非常重要的。在架构设计阶段我们将会详细的讲解 单体应用到微服务架构演进的过程中需要解决哪些问题?为什么我们需要微服务架构设计?go语言和python语言在微服务设计中分别承担的作用是什么?
在介绍完架构以后,对于实际开发过程中非常重要的两个组件, orm和web框架,在我们的框架中,我们会选择将python作为和数据库最近的底层业务层,这是一方面python非常适合做业务接口开发,同时python的orm使用会非常的简单方面,同时底层服务在微服务架构中处于的位置更加简单,在微服务的中间层,我们选择go语言的gin来完成,一方面gin简单并且性能高、另一方面是go语言在微服务的中间层整个生态更加丰富。
最后在该阶段我们还将介绍一个非常有用的系统-yapi来完成在前端系统开发中的痛点:1. 对前端提供mock接口。 2. 对后端提供快速的测试接口 3. 文档的接口参数管理等。

第一章 需求分析

本章节我们将介绍后台管理系统和电商系统的各个功能,通过需求分析我们后面设计数据库以及接口将会得心应手

第二章 架构设计

本章节我们将理解到从单体应用到微服务架构设计的整个过程,以及微服务设计过程中需要解决的各个问题,比如服务注册和发现、配置中心、链路追踪等等大量的细节

第三章 yapi的安装和配置

前后端分离开发的最大痛点是: 1. 接口管理麻烦 2. 前端等到后端的mock数据 3. 后端测试需要引入postman等测试工具,本章节我们介绍前后端开发过程中的利器:yapi,通过yapi的使用我们能解决这些所有的问题使得前后端开发完全独立

第四章 python的orm-peewee

本章节我们将会快速入门python下的流行orm-peewee,本章节主要解决python下的数据库访问,除了基本的crud基本操作以外,还包括多表查询、反向查询以及最后的如何避免n+1查询问题

第五章 go的web框架-gin

本章节我们将会快速的体验到go语言下最流行的web框架之一-gin,我们除了讲解gin的基本功能以外,还会讲解gin中的一些难懂的点-中间件的原理解析。本章节的主要内容包括:gin的路由、表单验证、错误中文翻译、优雅退出等大量的细节

第四阶段:第一个微服务 - 用户服务

从本阶段开始我们将开始进行实战项目开发,在本阶段我们将开始使用上一步阶段设计的微服务模式进行电商项目的第一个微服务 - 用户服务,在该阶段中我们会完成用户相关的接口, 用户登录、用户注册、用户列表等大量和用户相关的接口,该阶段完成以后我们不止能对外提供http接口供电商系统和后台管理系统调用,同时还能在python服务中完成对go语言提供grpc接口。
该阶段除了完成基本的接口功能以外还集成了实际生产环境中关心的:日志管理、配置文件管理、测试和生产环境的配置文件隔离、jwt的登录机制、项目代码结构设置、优雅退出、启动参数设置

第一章 service开发 - python

本章节我们将搭建一个微服务的基本功能,是微服务开发的起点,我们在本章节将解决一个完整的微服务需要具备的基本功能:参数启动、日志库、服务的优雅退出、项目的基本目录结构。除了服务的基本构成以外还包括基础功能如:用户的密码加密方案、用户表结构设计、用户登录和注册等用户相关的接口

第二章 web层开发 - gin

本章节我们会将gin定制成为微服务服务的基本架构,通过本章节的学习我们除了能对gin有更深入的理解以外还会理解到更多的微服务开发细节,本章节我们除了上一个章节的基础功能如日志、配置文件、优雅退出以外我们还会涉及到更多的知识点: 短信发送、表单验证、json web token的校验机制、图片验证码以及跨域问题等大量的开发细节

第五阶段:服务注册、服务发现、负载均衡、配置中心

该阶段我们将解决微服务中最基础也是最重要的问题: 服务注册和发现、配置中心和负载均衡。
服务注册和发现是微服务需要解决的第一个也是最重要的问题之一,本阶段我们将通过技术选型的方式选择流行的微服务注册组件并将其集成到微服务中,我们会分别集成到gin和python的grpc服务中,通过服务注册和发现我们将能解决大量的ip地址和端口的配置问题,以及服务的健康检查等。处理服务的注册和发现,我们还需要解决另一个非常重要的问题 - 大量的微服务配置,我们将会选择目前最新也是流行的配置中心-nacos,通过配置中心除了能够讲开发和生产环境的配置隔离看来以外,还能够发布和发现最新的配置,可以解决不用重启就能够解决配置的更新。
解决了服务注册发现以及配置中心以后,我们就要解决一个服务多个实例下的负载均衡问题,通过grpc的启动配置我们能够解决grpc的负载均衡问题。

第一章 服务注册和发现

本章节我们会来到微服务开发第一个核心技术点-服务注册和发现。通过服务注册中心我们不仅解决了大量的微服务的管理和互相调用,还能够确保服务的健康检查。我们会首先通过技术选型然后分别在python和go下集成服务注册和发现

第二章 服务集成注册中心

本章节我们将前面开发的service层和gin开发的web层服务集成到consul的服务发现体系中

第三章 负载均衡

本章节我们需要解决微服务中一个非常重要的问题-负载均衡,本章节首先会解决多个服务下的端口动态分配的问题,然后解决负载均衡策略和常用的负载均衡算法,最后讲负载均衡和注册中心集成进来并完成grpc下的负载均衡调用

第四章 配置中心

微服务管理除了管理服务实例以外,大量的微服务下的配置也需要一个统一的配置中心来解决,我们将会选择主流的nacos来完成配置的统一管理,以及如何解决在生产环境以及开发环境下的隔离。

第六阶段:电商系统 - 商品服务、图片服务、库存服务、订单和购物车服务、分布式锁

该阶段是电商系统主要接口开发的阶段,也是内容最多的阶段,在该阶段我们会分别开发电商系统中的商品服务、图片服务、库存服务、订单购物车服务和用户操作服务等。
该阶段除了完成生鲜电商的基本接口以外,还解决了微服务中的图片文件的oss存储,我们通过前端直传的方式解决了将文件上传到阿里云的传输问题。还解决了通过分布式锁完成库存的扣减问题,我们详细介绍和实现了基于乐观锁和基于redis的分布式锁如何完成库存的扣减问题。该阶段虽然只有一个阶段,但是在整个课程中的比重是非常重要的,通过本阶段的学习以后,我们除了能够完成一个完成的基于微服务的电商系统还能够了解到电商中一些非常重要的问题以及解决方案。

第一章 商品服务-service层

本章节我们需要解决大量的商品相关的接口,包括商品、商品分类、轮播图、品牌、品牌分类等相关接口,在本章节中我们会使用前面开发的基本微服务架构完成商品相关的底层接口,我们定义了大量的proto接口以及各个接口的逻辑实现,在本章节我们也会讨论物理删除和逻辑删除

第二章 商品服务-web等

本章节我们会使用上一节课中完成的底层微服务接口,在web层我们会完成客户端的调用和底层接口的转换,在本章节中我们除了完成底层的接口调用以外,还需要解决gin的优雅退出、yapi的接口调试,在本章中我们也会提供一个python脚本用于同步python和go的proto以及源码的生成。

第三章 阿里云的oss服务

微服务下我们无法使用简单的文件上传功能,我们需要使用独立的图片服务,本章节我们除了要使用阿里云上传图片以外,还需要解决阿里云下的oss直传问题,对于直传后的回调问题我们需要通过内网穿透技术来调试。

第四章 库存服务

库存服务我们需要独立出来,库存服务的独立会产生出很多新的问题,本章节我们会详细介绍库存服务的重要性、以及库存的扣减问题和数据库事务的细节,并集成库存的设置接口

第五章 分布式锁

本章节我们需要解决分布式系统下的一个非常重要的问题,也是面试中经常被问到的问题-分布式锁。分布式锁在微服务中有大量的应用,所以对于分布式锁的细节我们需要理解到而不是简单的会使用,大公司对分布式锁的要求较高,所以本章节我们会讲解到两个重要的实现手段: 1. 基于数据库的乐观锁 2. 基于redis的分布式锁,在基于redis的分布式锁下我们会讲解到到各种细节,比如超时、watchdog机制等。

第六章 订单和购物车服务-service层

本章节我们要解决订单和购物车相关的功能,订单是电商中的重点,也是难点,订单服务会牵扯到大量的其他微服务,包括商品、库存、用户等服务。订单服务的完整性要涉及到分布式事务,在后续的过程中我们会也会针对性的解决分布式事务以及订单超时和库存归还等细节。

第七章 订单和购物车服务-web等

本章节我们需要和前端联调订单和购物车服务接口,在web服务中我们还需要解决另一个重要的问题-支付宝支付,在本章节我们也会通过内网穿透的方式解决支付成功的回调细节。

第八章 用户操作服务-service层

用户操作服务主要解决用户在电商系统中的重要行为:收藏商品、留言、收货地址管理等,经过前面的章节学习,后续的这些操作会变得很简单。

第九章 用户操作服务-web等

通过底层的接口可以快速完成这些用户行为的接口调试

第七阶段:分布式系统技术难点 - 分布式事务、幂等性机制

本阶段不是单独的知识点讲解,仍然是电商系统的开发,在本阶段中我们将要解决分布式系统中非常重要的几个问题: 分布式事务、幂等性机制,在前面的章节中我们解决了电商系统的基本功能开发,本章节我们需要完善电商系统中的重要细节, 比如库存的超时归还,订单创建过程中的分布式事务,同时我们需要介绍重试机制和重试机制,以及超时、重试以及网络问题带来的幂等性问题,这些都是分布式开发中的重要问题以及面试中会被经常问题的问题。

第一章 rocketmq消息队列

本章节我们会通过技术选型来确定课程中会用到的消息队列-rocketmq,在本章节中我们除了介绍消息队列选型以外,还会介绍rocketmq的基本功能,主要包括延迟消息、事务消息等,这些是解决分布式事务的重点

第二章 分布式事务

分布式事务是微服务中必须要解决的问题,也是难点,在本章节中我们会介绍常用的分布式事务解决方案,如:2pc、TCC、基于可靠消息的最终一致性。通过各种方案的对比我们会基于rocketmq事务消息实现最终一致性

第三章 幂等性机制

幂等性问题属于分布式系统中常见的问题之一,也属于面试高频问题。本章节我们会讲解常见的幂等性解决方案

第八阶段:微服务的高可用保障 - 链路追踪、熔断、限流、降级

前面部分我们虽然解决了分布式系统的重要问题以及接口的基本功能开发,但是一个高可用的微服务框架我们还需要解决负载的微服务间的调用链的监控以及超时可能会带来的服务雪崩问题,通过引入链路追踪以及服务的熔断、限流等机制将会让我们的微服务变得更加可控以及可用性增强,在本阶段中我们会引入jaeger来进行链路追踪,使用sentinel解决熔断、限流等问题。这些都是微服务领域最新也是未来的使用趋势。

第一章 链路追踪 - jaeger

在微服务开发中,调用链路过长。所以如果一个请求中途过慢或者卡住了,所以有针对性的分析链路掉过过程中各个阶段的时长能够让我们有针对性的分析问题所在。本章节我们会讲解opentracing和jaeger来实现微服务的调用链路追踪。

第二章 熔断、限流 - sentinel

微服务由于调用链路的问题,很容易出现服务雪崩这种严重的错误,本章节我们采用目前最流行的sentinel完成服务间调用的熔断和限流。

第九阶段: api网关

本阶段我们来完成微服务开发的最后一站 - api网关,经过前面的开发我们已经开发出来了大量的微服务,这些微服务如何对外暴露统一的接口,以及如何解决这些服务的统一认证都将在api网关中实现,在本阶段我们会选择高性能的api网关-kong来完成从用户端到微服务端的调用以及接口管理。

第一章 api网关技术选型

本章节我们介绍api网关的作用以及分别对比各种api网关框架,最后选择主流的kong作为微服务的api网关。

第二章 kong的配置

本章节通过kong完成api网关到各个微服务的调用,本章节我们需要解决kong通过consul的服务发现功能完成到gin的微服务的调用,而且可以配置jwt认证

第十阶段:jekins自动化部署

在课程的最后我们需要通过jekins来完成大量微服务的统一部署,微服务由于服务较多以及组件依赖较多,我们需要通过自动化部署工具来对这些服务进行统一的部署管理。

第一章 jekins自动化部署

本章节我们通过jekins的自动化部署完成大量微服务的部署