近期阅读的一本书: Go语言高并发与微服务实战

内容尚可,部分章节不错,部分章节纯粹水货,还有一些一本正经的胡说八道似是而非,需要自行分辨。

  • 中国铁道出版社有限公司
  • 版次:202004第1版 202011第3次印刷

1、云原生与微服务

1.1、云原生架构

1.1.1、云计算的历史

1.1.1.1、云计算的基础:虚拟化技术
1.1.1.2、基于虚拟机的云计算
1.1.1.3、容器的横空出世和容器编排大战
1.1.1.4、云计算演进总结

1.1.2、云原生是什么

1.1.2.1、云原生出现的背景
1.1.2.2、云原生的定义
1.1.2.3、云原生与12因素

1.1.3、云原生的基础架构

1.1.3.1、微服务
1.1.3.2、容器
1.1.3.3、服务网格
1.1.3.4、DevOps

1.2、微服务概述

1.2.1、系统架构的演进

1.2.1.1、单体架构
1.2.1.2、垂直分层架构
1.2.1.3、SOA面向服务架构
1.2.1.4、微服务架构
1.2.1.5、云原生架构

1.2.2、常见的微服务框架

1.2.2.1、Java中的Spring Cloud与Dubbo框架
1.2.2.2、Go语言中的Go kit与Go Micro框架

1.2.3、微服务设计的六大原则

1.2.3.1、高内聚低耦合
1.2.3.2、高度自治
1.2.3.3、以业务为中心
1.2.3.4、弹性设计
1.2.3.5、日志与监控
1.2.3.6、自动化

1.2.4、领域驱动设计

1.2.4.1、设计为服务的困境
1.2.4.2、解困之法:领域驱动设计(DDD)
1.2.4.3、DDD的应用领域
1.2.4.4、DDD领域划分
1.2.4.5、微服务架构中的团队组织和管理

2、Go语法基础与特性功能

2.3、Go语言基础

2.3.1、Go语言介绍

2.3.2、环境安装

2.3.2.1、Go开发包安装
2.3.2.2、第一个Go语言程序
2.3.2.3、编译工具

2.3.3、基本语法

2.3.3.1、变量的声明与初始化
2.3.3.2、原生数据类型
2.3.3.3、指针
2.3.3.4、常量与类型别名
2.3.3.5、分支与循环控制

2.3.4、Go中常用的容器

2.3.4.1、数组
2.3.4.2、切片
2.3.4.3、列表与字典
2.3.4.4、容器遍历

2.3.5、函数与接口

2.3.5.1、函数声明和参数传递
2.3.5.2、匿名函数和闭包
2.3.5.3、接口声明和嵌套
2.3.5.4、函数体实现接口

2.3.6、结构体与方法

2.3.6.1、结构体的定义
2.3.6.2、结构体的实例化和初始化
2.3.6.3、方法与接收器
2.3.6.4、结构体实现接口
2.3.6.5、内嵌和组合

2.4、进阶:Go语言高级特性

2.4.1、依赖管理

2.4.1.1、包管理
2.4.1.2、GOPATH
2.4.1.3、Go Moodules

2.4.2、反射基础

2.4.2.1、reflect.Type类型对象
2.4.2.2、类型对象reflect.StructField和reflect.method
2.4.2.3、reflect.Value反射值对象

2.4.3、并发模型

2.4.3.1、并发与并行
2.4.3.2、CSP并发模型
2.4.3.3、常见的线程模型
2.4.3.4、MPG线程模型概述

2.4.4、并发实践

2.4.4.1、携程goroutine
2.4.4.2、通道channel
2.4.4.3、sync同步包

2.5、构建Go Web服务器

2.5.1、Web的工作原理

2.5.1.1、HTTP协议详解
2.5.1.2、访问Web站点的过程

2.5.2、使用Go语言构建服务器

2.5.3、接受和处理请求

2.5.3.1、Web工作的几个概念
2.5.3.2、处理器处理请求
2.5.3.3、解析请求体
2.5.3.4、返回响应体

2.5.4、Golang Web框架Gin实践

2.5.5、服务端数据存储

2.5.5.1、内存存储
2.5.5.2、database/sql接口
2.5.5.3、关系数据库存储
2.5.5.4、Noqsl数据库存储

2.5.6、Golang ORM框架beego实践

3、微服务核心组件

3.6、服务注册与发现

3.6.1、服务注册与发现的基本原理

3.6.1.1、服务发现与注册中心的职责
3.6.1.2、服务实例注册服务信息
3.6.1.3、CAP原理

3.6.2、常用的服务注册与发现框架

3.6.2.1、基于Raft算法的开箱即用服务发现组件Consul
3.6.2.2、基于HTTP协议的分布式key/Value存储组件Etcd
3.6.2.3、重量级一致性服务组件Zookeeper
3.6.2.4、服务注册与发现组件的对比与选型

3.6.3、Consul安装和接口定义

3.6.3.1、Consul的安装与启动
3.6.3.2、Go-kit项目结构
3.6.3.3、服务注册与发现接口
3.6.3.4、项目的总体结构

3.6.4、实践案例:直接使用HTTP的方式和Consul交互

3.6.4.1、服务注册与健康检查
3.6.4.2、服务注销
3.6.4.3、服务发现

3.6.5、实践案例:借助Go-kit服务注册与发现包和COnsul交互

3.6.5.1、服务注册与健康检查
3.6.5.2、服务注销
3.6.5.3、服务发现
3.6.5.4、服务实例信息缓存
3.6.5.5、MyDiscoverClient和KitDiscoverClient的比较

3.6.6、实践案例:基于服务注册于发现的string-service

3.6.6.1、项目结构
3.6.6.2、各层构建

3.7、远程过程调用RPC

3.7.1、RPC机制和实现过程

3.7.1.1、RPC机制
3.7.1.2、传递参数
3.7.1.3、通信协议制定
3.7.1.4、出错和超时处理
3.7.1.5、通用RPC接口

3.7.2、简易的Go语言原生RPC

3.7.2.1、实践案例:Go语言RPC过程调用实践
3.7.2.2、服务端注册实现原理分析
3.7.2.3、服务端处理RPC请求原理分析
3.7.2.4、客户端发送RPC请求原理分析
3.7.2.5、资源重用

3.7.3、高性能的gRPC

3.7.3.1、gRPC的安装
3.7.3.2、实践案例:gRPC过程调用实践
3.7.3.3、流式编程

3.7.4、便捷的Go-kit RPC

3.7.4.1、Go-kit简介
3.7.4.2、实践案例:Go-kit过程调用实践

3.8、分布式配置中心

3.8.1、如何管理分布式应用的配置

3.8.2、常见分布式配置中心开源组件

3.8.2.1、Spring Cloud Config
3.8.2.2、Appllo
3.8.2.3、Disconf
3.8.2.4、分布式配置中心的对比

3.8.3、应用Spring Cloud Config统一管理配置

3.8.3.1、搭建Spring Cloud Config Server
3.8.3.2、Vipper介绍
3.8.3.3、实战案例:动手实现Spring Cloud Config的Go语言客户端

3.8.4、实践案例:实现配置的热更新

3.8.4.1、如何实现热更新
3.8.4.2、Go语言客户端改进
3.8.4.3、结果验证

3.8.5、配置信息的加密解密

3.8.3.1、JCE环境安装
3.8.3.2、对称加密与解密
3.8.3.3、非对称加密与解密

3.9、微服务网关

3.9.1、微服务网关介绍与功能特性

3.9.2、实践案例:自己动手实现一个网关

3.9.2.1、实现思路
3.9.2.2、编写反向代理方法
3.9.2.3、编写入口方法
3.9.2.4、运行
3.9.2.5、测试

3.9.3、API网关选型

3.9.3.1、标配组件:Nginx网关
3.9.3.2、Java前置网关服务最佳选型:Netflix Zuul
3.9.3.3、该可用服务网关:Mashape Kong
3.9.3.4、三种常用API网关组件的指标对比

3.9.4、Kong接入

3.9.4.1、为什么使用Kong
3.9.4.2、Kong安装实践
3.9.4.3、创建服务
3.9.4.4、创建路由

3.9.5、安装Kong插件

3.9.5.1、跨域身份验证:JWT认证插件
3.9.5.2、系统监控报警:Prometheus可视化监控插件
3.9.5.3、实时链路数据追踪:Zipkin插件
3.9.5.4、进阶应用:自定义Kong插件

3.10、微服务的容错处理与负载均衡

3.10.1、服务熔断

3.10.1.1、分布式系统中的服务雪崩
3.10.1.2、服务熔断保障系统的可用性
3.10.1.3、断路器

3.10.2、负载均衡

3.10.2.1、负载均衡类型
3.10.2.2、负载均衡算法

3.10.3、实践案例:服务熔断和负载均衡使用

3.10.3.1、负载均衡器
3.10.3.2、服务编写
3.10.3.3、使用Go-kit Hystrix中间件

3.10.4、Hystrix详解

3.10.4.1、Hystrix基本使用
3.10.4.2、运行流程
3.10.4.3、常用参数配置

3.10.5、Hystrix监控面板

3.10.5.1、获取Hystrix命令调用信息
3.10.5.2、使用Hystrix Dashboard可视化面板

3.10.6、实践案例:在网关中添加Hystrix熔断和负载均衡

3.11、统一认证与授权

3.11.1、微服务安全的挑战与现状

3.11.2、常见的认证与授权方案

3.11.2.1、当前行业授权标准OAuth2
3.11.2.2、数据共享额分布式Session
3.11.2.3、安全传输对象JWT

3.11.3、实践案例:基于OAuth2协议和JWT实现一套简单的认证和授权系统

3.11.3.1、系统整体架构
3.11.3.2、授权服务器
  1. 用户服务和客户端服务
  2. TokenGrant令牌生成器
  3. TokenService令牌服务
  4. TokenStore令牌存储器
  5. /oauth/token和/oayth/checktoken
  6. 请求访问令牌和刷新令牌
3.11.3.3、资源服务器
  1. 令牌认证
  2. 鉴权
  3. 访问受限资源

3.12、分布式链路追踪

3.12.1、诊断分布式系统的问题

3.12.1.1、为什么需要分布式链路追踪
3.12.1.2、什么是分布式链路追踪
3.12.1.3、分布式链路追踪规范:OpenTracing
3.12.1.4、分布式链路追踪的基础概念

3.12.2、几种流行的分布式链路追踪组件

3.12.2.1、简单易上手的Twitter Zipkin
3.12.2.2、云原生链路监控组件Uber Jaeger
3.12.2.3、探针性能低损耗的SkyWalking
3.12.2.4、链路统计详细的Pinpoint
3.12.2.5、4种分布式链路追踪组件的指标对比

3.12.3、实践案例:应用Zipkin追踪Go微服务

3.12.3.1、微服务中集成zipkin-go
3.12.3.2、Go-kit微服务框架集成Zipkin实现链路追踪
  1. HTTP调用方式的链路追踪
  2. gRPC调用方式额链路追踪

4、综合实战

4.13、综合实战:秒杀系统的设计与实现

4.13.1、秒杀系统简介

4.13.2、项目架构简介

4.13.2.1、项目简介
4.13.2.2、架构信息
4.13.2.3、流程简介

4.13.3、整合升级:各个微服务脚手架的组装

4.13.3.1、服务注册与发现
4.13.3.2、负载均衡策略
4.13.3.3、RPC客户端装饰器
4.13.3.4、限流
4.13.3.5、Go语言Redis使用简介
4.13.3.6、Zookeeper集成
4.13.3.7、Go-kit开发利器Truss

4.13.4、秒杀核心逻辑

4.13.4.1、秒杀业务系统
4.13.4.2、秒杀核心系统
4.13.4.3、秒杀管理系统

4.13.5、性能压测

4.13.5.1、查看服务的配置文件
4.13.5.2、压测实验